Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
начинающим / Экскурсия по электронике.pdf
Источник:
Скачиваний:
211
Добавлен:
06.01.2022
Размер:
31.57 Mб
Скачать

В.Н. Гололобов

Экскурсия по электронике

312

Глава 16. Микроконтроллеры

Микроконтроллеры во многом похожи на микропроцессоры. Основная разница в том, что микропроцессор предназначен для работы с множеством программ, а микроконтроллер придуман для работы с единственной. Эту программу можно, конечно, заменить, перепрограммировав контроллер, но это внешний процесс, тогда как микропроцессор сам прочитает новую программу (по вашей команде), положим, с дискеты, и может начать с ней работать.

Еще одно отличие контроллера от процессора в том, что в контроллере есть процессор, но кроме него есть и некоторое количество оперативной памяти для размещения программы, есть ряд полезных устройств, таких как аналого-цифровые преобразователи или последовательный порт ввода-вывода, и, пожалуй, еще в том, что процессор в контроллере огорожен (и укрыт от внешнего мира) портами ввода-вывода. В этом смысле микроконтроллер ближе к микрокомпьютеру.

Развитие микроконтроллеров шло параллельно с созданием новых микропроцессоров, с появлением новых технологий изготовления микросхем и развитием вычислительной техники, которая требовала все новых внешних устройств для работы с компьютером. Когдато мышка, без которой сегодня трудно обходиться, была экзотическим устройством. Дисководы для общения с процессором требовали громоздкого контроллера, внушительные платы с многочисленными цифровыми микросхемами, звуковым устройствам нужен был свой контроллер, монитору свой. Мне кажется, что это постоянное расширение числа внешних устройств, с одной стороны, и удешевление процессоров, с другой, заставили разработчиков микросхем унифицировать подход к понятию контроллера и разработать микросхему, которая называется микроконтроллер.

Что нужно для работы с микроконтроллером?

В первую очередь, и это главное, желание. Освоить азы программирования вы сегодня можете великолепным образом за компьютером. Есть доступные, в частности бесплатные, среды программирования. Для Linux есть удобная среда программирования под названием Gambas – это и язык программирования на основе Basic, и возможности быстрого создания графической части программы, и возможность работать со множеством компьютерных устройств, не задумываясь о деталях этой работы. Аналог этой программы для Windows – Visual Basic. Хотя язык Gambas, в отличие от Visual Basic, создавался сразу как современный объектно-ориентированный язык.

Освоить азы программирования легче именно в такой среде программирования за компьютером. Это, правда, не означает, что, создав несколько программ, вы сразу готовы программировать микроконтроллер. Для работы с контроллерами есть свои программы. А выбор этой программы сильно зависит от выбора микроконтроллера. Есть программы поддерживающие широкий спектр контроллеров, но, думаю, нет абсолютно универсальной программы.

Для работы с микроконтроллерами серии PIC мне очень понравилась программа MPLAB для Windows. В Linux есть свой вариант MPLAB – это, например, Piklab. Последняя требует симулятора gpsim для отладки программы.

Кроме программных средств написания и отладки программы для микроконтроллера нужен программатор. Его можно купить, есть доступные по цене варианты, но можно сделать самому. Я в предыдущих книгах описывал несколько вариантов программаторов и достаточно подробно, с моей точки зрения, описывал создание своих программ и в MPLAB,

В.Н. Гололобов

Экскурсия по электронике

313

и в Piklab. Не буду останавливаться на этом, но схему программатора для Piklab приведу, чтобы не было нужды искать ее.

Рис. 16.1. Схема программатора для PIC16F628A

Схема достаточно проста, и это хорошая практика для начинающих, особенно если вы еще плохо умеете паять, собирать такие схемы. Трудность, правда, в проверке и налаживании этой схемы – она предназначена для подключения к COM-порту и работает с компьютером. Но, если все собрано правильно, схема работает сразу. Вообще, собирать свои приборы для радиолюбителей обычная практика, приборов всегда не хватает, а опыт, приобретаемый при сборке и наладке приборов, обязательно пригодится в последствии. Измерениям будет посвящена следующая глава, а сейчас вернемся к программам для написания, отлаживания и загрузки программы в микроконтроллер.

Программа MPLAB имеет более развитую часть, связанную с симуляцией работы осциллографа, чем симулятор gpsim. Но и последний имеет такую интересную особенность, как симуляция работы макетной платы. Кроме того, в программе Piklab хорошо работает свободный компилятор языка «С», полнообъемный и доступный. В несложных случаях для контроллера PIC16F628A особых ошибок у него в последней версии я не заметил.

В.Н. Гололобов

Экскурсия по электронике

314

Рис. 16.2. Программа Piklab в Linux

Для работы с ассемблером конкретного микроконтроллера дополнительные средства не потребуются, достаточно выбрать тип контроллера, но если есть желание, а это гораздо удобнее, использовать язык «С», понадобится компилятор PICC Compiler (SDCC). На рисунке во встроенном тестовом редакторе программа на языке «C».

Внастройках программы можно (и нужно) установить конкретный программатор (выше приведена схема JDM) и используемый транслятор. Работаете ли вы на языке высокого уровня, работаете ли на ассемблере, вам понадобится документация с описанием конкретной модели микроконтроллера. Для контроллеров серии PIC производства MicroChip на сайте российского представительства можно найти описания на русском языке.

Вописании не только рассказано об устройстве контроллера, но приведены все сведения, включая полный набор команд, необходимые для программирования контроллера.

Вот, пожалуй, все для начинающего, что ему нужно для начала работы с микроконтроллерами. А теперь вернемся к незавершенным проектам.

Завершение проекта «Светофор»

Я много раз сетовал на то, что «я бы... если бы...» и вспоминал микроконтроллер. Больше не на что пенять, говорю я себе, загружай Piklab или MPLAB, покажи, как надо делать.

Иногда я жульничаю. Никто этого не замечает, а меня избавляет от неприятных объяснений. На этот раз я тоже сжульничаю, но объясню, почему я решил это сделать.

Для того, кто только начал осваивать электронику, микроконтроллер не цель, ради которой можно и программирование освоить, это одно из средств решения своих задач или работы в сфере своих интересов. На первом этапе я бы посоветовал, хотя позже очень полезно будет

В.Н. Гололобов

Экскурсия по электронике

315

вернуться к полным схемам работы — с ассемблером, языком «С» и чтением документации

— я бы посоветовал для начала использовать программу KTechlab. Программа работает в среде Linux, и я не знаю есть ли ее аналог для Windows. Тем не менее, написание небольшой программы для микроконтроллера доставит вам удовольствие своей простотой.

Иногда в подобных случаях опытные электронщики ругают и подобные советы, я их понимаю, и подобные программы, здесь я не согласен, но это их личное дело, их собственное мнение. Если вы хотите присоединиться к их мнению, удалите эту часть книги, да и дело с концом. Вот такое у меня МНЕНИЕ.

Рис. 16.3. Программа KTechlab

Как и многие среды работы над чем-то, программа позволяет работать с проектом, и после ее запуска есть смысл в пункте меню Project использовать раздел New project, открывающий окно диалога создания проекта, как это сделано на рисунке.

Выбрав имя проекта и место его расположения, с помощью основного меню (пункт File) или с помощью кнопки инструментального меню создайте новый файл. Вы сразу можете убедиться, что файлы в этой программе бывают разные.

В.Н. Гололобов

Экскурсия по электронике

316

Рис. 16.4. Диалоговое окно создания нового файла

Для обычной работы со схемой есть возможность выбрать Circuit, для написания программ на ассемблере (я так думаю) Assembly и т.д. Здесь же выбор микроконтроллера, и не забудьте проверить флажок Add to project, чтобы созданный вами файл вошел в состав проекта. Как видите, я выбрал FlowCode — пошел по пути наименьшего сопротивления, не видать мне славы «крутого спеца», зато вы можете и без помощи закона Ома определить величину этого сопротивления.

Напомню, как должен работать наш светофор:

Две секунды горит зеленый светодиод.

Зеленый светодиод гаснет, зажигается желтый.

Желтый светодиод горит одну секунду, затем он гаснет.

Зажигается красный светодиод и горит две секунды.

Гаснет красный и на секунду зажигается желтый, после которого зеленый и т.д.

Микроконтроллер имеет встроенные «подтягивающие» резисторы, на некоторых выводах портов их можно использовать, но я пользуюсь старым макетом, где у меня есть резисторы и светодиоды (все красные, но это разве важно?), резисторы включены одним концом к плюсу питающего напряжения, другим к выводу порта. В эту точку приходит анод светодиода. Что предполагает, когда на выводе единица, то светодиод через резистор (его величину вы уже легко подсчитаете, зная напряжение питания микроконтроллера 5 В, и выбрав ток через светодиод 5 мА) подключен к питающему напряжению и светится. А когда на выводе появляется логический ноль, светодиод оказывается «закорочен» этим состоянием вывода и гаснет. Все просто и ясно.

Первым делом (как на картинке ниже) я нажимаю клавишу Advanced нарисованного контроллера, поскольку в его верхней части есть примечание (или название) PIC Settings, заставляющее меня думать, что это ключик к установкам контроллера.

В.Н. Гололобов

Экскурсия по электронике

317

Рис. 16.5. Задание начальных установок микроконтроллера

Сознаюсь, что знаю назначение регистра TRIS (верхнее окошко), где вместо последних трех единиц записываю три нуля. Мало того, в следующем окошке, где были записаны одни нули, я меняю последний нуль на единицу. Затем, как и положено, последовательно нажимаю клавиши Apply (принять) и OK. Если вы теперь приглядитесь к рисунку микросхемы в верхнем левом углу рабочего поля, то заметите, что стрелки у выводов RA0, RA1 и RA2 изменили свое направление — результат работы первого окошка, эти выводы микроконтроллера будут работать на выход. А вывод RA0 еще и покраснел — результат работы второго окошка, вывод перешел в состояние логической единицы, на нем напряжение питания.

Простая конструкция: три вывода, три светодиода на них. Проще не бывает.

В левом окне интерфейса программы компоненты. Первый из них, который я перенесу на рабочее поле, это Start из набора Common. Я просто цепляю компонент мышкой и переношу на рабочее поле. Ниже из набора Functions я располагаю Delay. По умолчанию длительность задержки 1 сек. Мне нужно две. Щелкаю по рисунку этой задержки на рабочем поле левой клавишей мышки, выделяя его, и получаю в верхнем поле, где расположено основное меню, доступ к свойствам этой задержки, из которых я знаю только одно свойство — время.

В.Н. Гололобов

Экскурсия по электронике

318

Рис. 16.6. Изменение времени задержки

Теперь обязательно нужно соединить верхнюю часть Start с Delay: подводим курсор к стрелочке в нижней части овала Start, курсор превращается в перекрестие, нажимаем левую клавишу мышки и ведем линию к стрелочке в верхней части Delay, и отпускаем клавишу мышки.

Следом за этим переносим на рабочее поле Set Pin State из меню компонент. Щелкаем по нему чтобы в его свойствах изменить значение вывода RA0 с high на low, выключая светодиод. Переносим еще один такой же компонент, у которого меняем RA0 на RA1. Его состояние оставляем как high. Конечно, соединяем все вновь установленные компоненты подобно первым двум.

Переносим еще один компонент Delay. И еще несколько раз повторяем размещение компонентов Set Pin State и Delay, думаю, вы уже догадались для чего, повторяя соединение компонентов, за этим следует следить особо. Если компоненты расположены очень близко друг к другу, то их стрелки как бы соединяются, создавая иллюзию соединения. Но компоненты, которые должны быть соединены, должно соединить очевидным образом.

Проведя эти несложные манипуляции, мы получим следующее.

В.Н. Гололобов

Экскурсия по электронике

319

Рис. 16.7. Создание программы по проекту «Светофор» Ничего вам это не напоминает? Мне напоминает запись алгоритма.

Многие профессиональные программисты считают, что создание программы — это создание алгоритма. Написание кода программы, скорее напоминает пайку схемы на макетной плате, и это дело чисто техническое. Так что, считайте, что программу мы создали.

Если бы от программы требовался только один проход, то закончить ее можно было бы элементом End (расположенным под элементом Start), но работа программы должна быть постоянной — светофор горит и день, и ночь — поэтому программа замкнута в бесконечный цикл.

А почему я говорил о жульничестве (немного раньше), а потому, что код программы мне писать лень. И не буду. Нажимаю кнопочку с изображением ракеты на инструментальной панели, выбираю в выпадающем меню Convert to раздел Hex, а в диалоговом окне оставляю флажок на Display directly и нажимаю свою любимую клавишу ОК.

То, что вы сейчас видите (ниже) это готовая к загрузке в микроконтроллер программа. Поверьте на слово. А поскольку программа KTechlab работает с JDM программатором, схему которого я приводил выше, я мог бы выбрать загрузку в контроллер PIC (upload) в выпадающем меню ракеты.