Когда сын клеил для школы из бумаги муляж светофора, пришла мысль: «А почему не собрать для него действующую модель светофора на микроконтроллере». На просторах Интернет есть много схем и программок к ним, реализующих принцип простейшего светофора. Но они или слишком сложны для игрушки (DC-DC преобразователь, сдвиговые регистры и т.д.) или представлены лишь как пример простейшей программы на ассемблере. Я хочу представить на обозрение схему и программу на ассемблере законченной конструкции игрушечного светофора с некоторыми дополнительными функциями. Причем собрана она на “копеечном “ микроконтроллере по простейшей схеме, что немаловажно для начинающих. Надеюсь, эта простая схема станет для многих, начинающих изучать программирование микроконтроллеров PIC, первой реально собранной на PIC конструкцией. Простая, но при этом содержащая основные приемы и атрибуты программирования, программа позволит легко ее понять и экспериментировать с ней.
Каждому, кто имеет дело с программированием микроконтроллеров, известны основные принципы написания обработчиков прерываний: как можно короткое время выполнения и короткий код, отсутствие циклов и вызовов из обработчика других подпрограмм и т.д. В данном же случае разрешены прерывания лишь по изменению уровня (пропустить другие прерывания мы никак не можем, потому что их попросту нет) и я, для упрощения программы и ее восприятия, счел возможным отойти от этих принципов. Здесь в обработчике прерывания есть и циклы, и вызов другой подпрограммы, и (о ужас!) даже переход в режим SLEEP. Потому, в заголовке программа названа «неправильной». В данном случае, обработчик прерываний используется как обычная подпрограмма, однако, в других случаях вышеназванные принципы, разумеется, остаются в силе.
Краткие характеристики устройства:
Устройство представляет собой модель уличного светофора с достоверной симуляцией его работы (переключение цветов, моргание зеленого) и имеет дополнительные функции: изменение частоты переключения по нажатию кнопки, режим моргающего желтого, переход в спящий режим в ручном и автоматическом режиме с последующим включением по нажатию кнопки. Данное устройство может быть использовано как детская игрушка, а также как наглядное пособие в детских дошкольных учреждениях при обучении детей поведению на дорогах.
Итак, перейдем к описанию и рассмотрению схемы.
Схема собрана на недорогом микроконтроллере PIC12F629. Непосредственно для управления светодиодами используются выводы GP0-GP2, GP4,GP5 (ножки 7, б, 5, 3, 2), запрограммированные как выходы. Светодиоды по каждому направлению объединены в последовательные группы, что позволяет минимизировать потребляемый ток. Резисторы R3-R8 ограничивают токи светодиодов. В случае сильной разницы в отдаче светодиодов разных цветов, придется подбирать соответствующие резисторы. У меня, например, две группы желтого цвета соединены параллельно и подключены к одному резистору, причем того же номинала, что и остальные и светят даже чуть ярче остальных (отдача больше).
В этой схеме на светодиоды подается на 1.5 В больше чем на микроконтроллер с дополнительного элемента (в данном случае, при отключенном выходе ток не проходит на вывод микросхемы, потому что для открытия переходов 2-х светодиодов требуется гораздо большее напряжение, чем 1.5 В (не менее 2.5 В). И даже при пробитых обоих светодиодах (что маловероятно), ток через внутренний защитный диод на плюс питания составит около 7.5 мА, что гораздо меньше допустимого. Потребление тока светодиодами намного выше, чем потребление МК, поэтому, разностью разрядки элементов (через один не течет ток потребления МК) можно пренебречь. Экспериментально установлено, что, несмотря на уменьшение тока через светодиоды при разрядке батареи, яркость их свечения остается на приемлемом уровне во всем диапазоне напряжения батареи. Схема при этом предельно упрощается, и нет стабилизатора напряжения, потребляющего дополнительный ток, что позволило отказаться от выключателя питания (ток потребления в спящем режиме – 1-3 мкА).
Кнопка управления режимами работы устройства подключена к выводу GP3 (ножка 4), который в битах конфигурации объявлен как цифровой вход. При нажатии кнопки происходит прерывание, в обработчике которого происходит следующее. При длительном нажатии (более 4 с) устройство переходит в спящий режим. При более коротких нажатиях, происходит последовательное переключение скорости работы светофора по кругу с индикацией текущей скорости согласно рисунку.
В последнем режиме (горят красные светодиоды) включается режим желтого мигающего сигнала. При длительном нажатии на кнопку (подтверждается погасанием всех светодиодов), переходим на обычную работу с изменением режима на новый, если же кнопка не нажата более 6 сек., режим работы остается, тем же, что и до нажатия кнопки.
Заряда элементов АА в режиме sleep хватит не менее чем на год, именно поэтому, в устройстве не предусмотрен выключатель питания. Устройство переходит в спящий режим также по истечении 0.5 – 1 часа (зависит от скорости переключения цветов) работы без воздействия на кнопку. Из режима SLEEP выход происходит при любом нажатии кнопки. Питание на микроконтроллер подается по выводам 1 и 8. Для экономии выводов и упрощения конструкции, нем включен режим внутреннего генератора без внешних элементов.
Небольшие пояснения к программе, которая приведена во вложении.
Обработка нажатий кнопки производится в подпрограммах: wait_butt__- ожидание нажатия и регистрация 6сек. без нажатия, push_butt__- регистрация длительности нажатия, wait_nobutt__- ожидание не нажатой кнопки. В моменты изменения состояния светофора (желтый и моргание зеленого) значения на выходной порт считываются из таблицы в подпрограмме tact__ (младший или старший полубайты). Аналогично, индикация состояния при нажатии кнопки – из подпрограммы ind__. Для перехода в спящий режим по истечении времени работы, происходит принудительный переход в подпрограмму обработки прерываний путем программной установки флага прерывания. Изменением констант CONST_MIN, CONST_REG, CONST_SL можно изменить соответственно период моргания зеленого, начальный режим при подсоединении батареи, время работы без воздействия до перехода в режим SLEEP.
Печатная плата изготовлена из односторонне-фольгированного стеклотекстолита и имеет размеры 22х87 мм. Крайние светодиоды установлены параллельно плате в разные стороны. Средние устанавливаются один со стороны установки деталей, а другой – со стороны дорожек с продеванием выводов в отверстия платы и фиксацией их со стороны деталей каплей припоя, а со стороны дорожек припаиванием к соответствующим дорожкам.
Все резисторы мощностью 0.125 Вт. Светодиоды можно взять любые отечественные или импортные желательно одного типа с прямым падением напряжения при токе 10 мА около 2 Вольт. Кнопка – любая без фиксации. Микроконтроллер установлен на колодку.
Слово конфигурации заносится в память автоматически при загрузке прошивки (в IC-Prog установлена “птичка” лишь в пункте “PWRT”, остальные пункты “сброшены”, в графе “осциллятор” установлено “intOSC GP4”). Предварительно необходимо считать прошивку с чистой микросхемы и записать значение слова в конце памяти программ по адресу 03FF, которое требуется для настройки частоты внутреннего генератора конкретного экземпляра микросхемы. После загрузки в программу HEX-файла, по адресу 03FF необходимо вручную прописать это значение. В данном устройстве отклонение частоты не критично, но все же следует знать, что для данной микросхемы требуется такая процедура. В крайнем случае, если заводское значение потеряно, можно ничего не делать – в программе приняты меры для корректной работы и в этом случае.
Устройство помещается в подходящую пластмассовую коробку. Под светодиоды в коробке и крышке проделываются соответствующие отверстия. В моем варианте сам светофор и основание с кнопкой и батареей питания соединяются через отрезок пластиковой водопроводной трубы, диаметром 20 мм.
В приложении имеются: Proteus модель, печатная плата в формате LAY, программа на Ассемблере MPASM, файл прошивки HEX.
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
IC1
МК PIC 8-битPIC12F6291
DIPR1
Резистор3 кОм1
0.125 ВтR2
Резистор100 Ом1
0.125 ВтR3-R8
Резистор200 Ом6
0.125 ВтHL1,HL2,HL9,HL10
СветодиодАЛ307А4
REDHL3,HL4,HL11,HL12
СветодиодАЛ307В4
GREENHL5-HL8
СветодиодАЛ307Д4
YELLOWC1
Конденсатор10 мкФ х10В1
S1
КнопкаRBS-12B1
Без фиксацииДобавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- svetofor.rar (26 Кб)