- •Предисловие
- •Часть 1. Электроника для начинающих
- •Глава 1. Что на плате электронного устройства?
- •Резистор
- •Конденсатор и индуктивность
- •Диод и транзистор
- •Глава 2. Программы и схемы
- •PSIM в Linux
- •Qucs в Linux
- •Операционный усилитель
- •Цифровая микросхема
- •Глава 3. Путешествие по плате с осциллографом
- •Что такое осциллограф?
- •Что такое сигнал?
- •Что я увидел на плате с помощью осциллографа?
- •Глава 4. Электричество и магнетизм
- •Глава 5. Сигналы или переменный ток на практике
- •Разные законы изменения переменного тока
- •Генерация сигналов
- •Использование сигналов
- •Глава 6. С чего начать свой первый проект?
- •Усилитель мощности
- •Светофор
- •Блок питания
- •Глава 7. Усилитель
- •Включение транзистора с общей базой
- •Включение транзистора с общим коллектором
- •Включение транзистора с общим эмиттером
- •Определение зависимости тока базы от напряжения
- •Частотные характеристики усилителя
- •Стоп, стоп, стоп!
- •Глава 8. Бабахать или нет – вот в чем вопрос
- •Разговоры, разговоры
- •Проект «Громкоговоритель»
- •Глава 9. Теплоотвод
- •Разные режимы работы оконечных каскадов
- •Тепло. Что с ним делать?
- •Глава 10. Сигналы, немного больше
- •Прямоугольные импульсы
- •Получение импульсов некоторых видов из простых сигналов
- •Немного о сигналах и линиях
- •Больше об амплитудной модуляции
- •Другие преобразования напряжений
- •Глава 11. Немного больше об усилителях
- •Усилители в радиоприемнике
- •Предварительный усилитель НЧ
- •Снижение шумов и автоматическая регулировка
- •Глава 12. Автоматика, и зачем она нужна
- •Обогреватель-автомат или простые устройства автоматики
- •Автоматическая нянька для рассеянных
- •Глава 13. Один интересный преобразователь
- •Преобразователи постоянного напряжения в переменное
- •Разные типы современных преобразователей
- •Проблемы симуляции электрических схем
- •Глава 14. Как считает домашний компьютер
- •Пример расчета максимальной выходной мощности
- •Пример расчета схемы стабилизатора
- •Примеры соотношений в транзисторных схемах
- •Программы для более сложных расчетов
- •Глава 15. Микропроцессор и программирование
- •Галопом по европам
- •Как организована работа процессора
- •Что такое программа?
- •Глава 16. Микроконтроллеры
- •Что нужно для работы с микроконтроллером?
- •Завершение проекта «Светофор»
- •Некоторые особенности работы с программатором
- •Завершение проекта «Автомат для рассеянных»
- •Завершение проекта «Электроника для начинающих»
- •Глава 17. Измерения в электрических цепях
- •Схема коммутатора к осциллографу
- •Схема приставки к мультиметру для измерения L и C
- •Схема регулировки яркости светильника
- •Глава 18. Организация собственной разработки
- •Часть 2. Игра в программирование
- •Глава 1. Поиск печки, от которой танцевать
- •Два берега
- •Первое знакомство с Gambas
- •Компьютер может помочь с программированием
- •Почему Емеля ездил на печи?
- •А можно с этого места поподробнее?
- •Первый блин
- •Глава 2. Бряцая железом
- •Хорошее начало
- •Возвращение
- •Отладка в gpsim
- •Глава 3. У камелька
- •Начало проекта «Машинистка»
- •Развиваем успех
- •Заметки и пометки «на память»
- •Глава 4. Охота на кентавра
- •Засада в интерфейсе
- •Железное решение
- •Лирическое отступление
- •Грустное завершение рассказа о счетчике
- •Глава 5. Сказка о неудачливом радиолюбителе
- •Возвращение на круги своея
- •Расширение кругов (на воде?)
- •gpsim как зерцало грешника
- •Вялая попытка оправдаться
- •И оргвыводы
- •Глава 6. Сказка о ловком программисте
- •Предварительное рассмотрение проекта «Генератор»
- •Продолжение работы над проектом «Генератор»
- •Завершение
- •Конспекты
- •Gambas дружелюбен к пишущим на VB, но используя Linux
- •Разработка приложений в Gambas
- •Часть 3. Proteus в любительской практике
- •Что такое интегрирующая и дифференцирующая цепь?
- •Почему не выпрямляет диод?
- •Как работает транзистор?
- •Микроконтроллеры и Proteus
- •Как работать с линиями?
- •Помогите найти схему внешнего генератора импульсов 4-8 MHZ (например на 555ЛН1).
- •Собрал одно, собрал другое — не работает. Что делать?
- •Почему я работаю с AVR?
В.Н. Гололобов |
Экскурсия по электронике |
308 |
Устройство управления устанавливает счетчик команд в соответствии с командой.
Из ячейки, следующей за командой, устройство управления считывает число и записывает его в первый регистр процессора.
Из ячейки, следующей за этой, устройство управления считывает число и записывает его во второй регистр процессора.
Устройство управления дает команду АЛУ процессора – сложить.
Результат запоминается в аккумуляторе процессора.
Счетчик команд изменился на 3.
Адрес, задаваемый на шине адреса, изменился на 3.
Прочитывается следующая команда.
Ориентируясь на такой порядок работы, можно представить структуру микропроцессора в следующем виде:
Рис. 15.7. Простейшая структура микропроцессора
Все устроено сложнее, чем нарисовано, но не думаю, что вы намерены заняться разработкой микропроцессоров, а мне не хотелось использовать больше понятий, чем те, с которыми мы познакомились. И, несмотря на существенное упрощение, структура близка к реальной.
Теперь, поковырявшись во внутренностях микропроцессора, попробуем разобраться, как устроен его «духовный мир», то есть, получить некоторое представление о том, что такое программа.
Что такое программа?
А мы уже говорили об этом. Последовательность команд, которые должен выполнить процессор для реализации программы, записанная в ячейках оперативной памяти, и есть программа. Самая простая структура программы – это линейная. Именно, все команды и данные записаны в ячейках памяти последовательно, одна за другой, и последовательно же прочитываются и выполняются.
С точки зрения процессора вся программа это последовательность двоичных чисел. Нам удобнее видеть эту последовательность, например, в шестнадцатеричном виде – так легче ее
В.Н. Гололобов |
Экскурсия по электронике |
309 |
воспринимать. Но еще легче нам воспринимать программу, если каждому числу, обозначающему команду, мы сопоставим некоторое буквенное обозначение. Желательно, чтобы это обозначение было сокращением привычных для нас слов. Вот, если говорить о предыдущем фрагменте работы процессора, как могла бы выглядеть команда записи числа из ячейки памяти в регистр:
Переместить число по адресу A3 в регистр 0.
Мы можем ей сопоставить, укоротив ее, такой вариант ПРМ А3, R0. В основном используется англоязычная аббревиатура, по причине чего команда выглядит так: MOV a3, R0. Здесь MOV – это сокращение от английского move. Согласитесь, такую команду легче запомнить, чем безликую 48 или, того хуже, 1001000.
Так программисты некогда перешли от программирования в машинных кодах к программированию на языке ассемблера. Чтобы программа, понятная программисту, была понятна и процессору, ее переводят на машинный язык. Для этого создается транслятор с языка программирования в машинные коды. А занимается переводом сам процессор. В настоящее время существует очень большое количество языков программирования. У каждого из них есть свое назначение, своя область применения, где язык наиболее эффективен. Кроме ассемблеров были созданы языки более высокого уровня, легче понимаемые программистом, а, значит, он быстрее может написать программу, программа будет содержать меньше ошибок, и можно писать программы, которые будут упрощать и общение с микропроцессором, и написание новых программ.
Применительно к радиолюбительским интересам ни микропроцессоры, ни программирование не являются обязательной составляющей, но посмотрите на современные устройства и скажите себе: «Я не хочу иметь с ними дело». А что в остатке?
Вернемся к программированию. Линейные программы получаются далеко не всегда даже в простых случаях. Практически в каждой программе возникает необходимость проверить некоторое условие, а по результатам проверки выполнить те или иные действия. Возникает необходимость в ветвлении программы. Обычно это во многих языках программирования выполняется операторами If... then... else (Если... то... иначе). Подобные команды высокого уровня разбиваются на ряд машинных команд, но суть остается – есть необходимость и возможность выполнить разные действия в разных ситуациях.
Принято программы записывать в виде алгоритмов – структурных схем программы – перед написанием кода программы. Алгоритм примера приведенного выше выглядел бы похожим на такой:
В.Н. Гололобов |
Экскурсия по электронике |
310 |
Рис. 15.8. Алгоритм программы сложения Схема программы с проверкой условий может выглядеть похожей на следующую.
Рис. 15.9. Запись алгоритма при ветвлении программы
Какую бы предварительную форму записи программы вы не выбрали, вам следует описать программу, как ряд действий с достаточной детальностью. После этого можно приступать к написанию кода программы. Поскольку все, что я хотел рассказать о процессорах и программах, я сделал «в прицеле» к микроконтроллерам, я не буду детально описывать ни один из языков программирования, а только упомяну о том, что есть во всех, практически, языках.
Очень часто возникает необходимость многократно повторять один и тот же набор операций. Если вы точно знаете, когда нужно остановиться, вы можете использовать цикл. Это монотонно повторяющееся действие, которое заканчивается либо тогда, когда
В.Н. Гололобов |
Экскурсия по электронике |
311 |
выполняется условие, например, переменная принимает определенное вами значение, либо выполняется определенное количество раз, если вы знаете, сколько раз следует повторить операции.
Еще более общий смысл вкладывается в повторяющийся набор операций, когда вы объявляете его подпрограммой – частью программы, которая используется многократно. В частности, в любом языке высокого уровня есть такие подпрограммы в виде процедур или функций. В эти подпрограммы можно из основной программы передать некоторые значения, которые процедура или функция возвращает основной программе после выполнения всех предписанных действий.
Организация программы с применением функций дает возможность не только многократно использовать эти функции в программе, но создавать библиотеки функций, а в программе просто ссылаться на эти библиотеки, используя уже готовые функции.
Чаще других при работе с микроконтроллерами используют ассемблер и язык программирования «С». Поскольку каждый микроконтроллер имеет свой набор команд, каждый из них будет иметь свой ассемблер, а переводчик (транслятор, компилятор) с языка «С» должен иметь возможность переводить на язык именно этого ассемблера.
Получается, сколько контроллеров, столько ассемблеров. Собственно, ассемблер один, но разные записи команд ассемблера и разные трансляторы в машинные коды. Если вы решите перейти от работы с одним контроллером к другому, вам понадобится знакомство с его набором команд, но его ассемблер вы освоите быстрее, чем тот, первый.
Есть еще один нюанс в работе с микропроцессорами, касающийся их «физического» воплощения. В рассказе об осциллографе я, кажется, обещал об этом вспомнить, и время пришло. Имея в своем распоряжении осциллограф, бывает обидно, если не удается посмотреть, вернее увидеть, сигналы на шинах микропроцессорных схем. Проблема в первую очередь в том, что сигналы эти, как правило, не периодические. Возьмем схему на рисунке 15.6 в качестве «опорной». Очень хотелось бы увидеть сигналы на выходе после их записи. В изображенной схеме все просто, но если это реальная микросхема памяти, то данные в нее записываются часто, сигналы мелькают с такой скоростью, что на экране осциллографа рябит от событий.
В таких случаях осциллограф переключается в ждущий режим, в качестве сигнала запуска используется (на рисунке) out, и просматриваются выходы. При условии, что можно в машинных кодах написать, зациклив ее, программу записи в ячейку памяти. В реальной микросхеме это может быть сигнал CS (выбор микросхемы) или сигнал записи. Если микропроцессор позволяет это сделать, можно снизить тактовую частоту до приемлемого значения.
Вспомнил я это не только потому, что обещал, но и по другой причине: в микроконтроллере с наблюдениями еще хуже. В этом виновата, однако, их сущность. Так какова она?
