Главная » Микроконтроллеры
Призовой фонд
на май 2017 г.
1. Тестер компонентов MG328
Паяльник
2. Осциллограф DSO138
Паяльник
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Светофор на PIC12F629 с "неправильной" программой

Когда сын клеил для школы из бумаги муляж светофора, пришла мысль: "А почему не собрать для него  действующую модель светофора на микроконтроллере". На просторах Интернет есть много схем и программок к ним, реализующих принцип простейшего светофора. Но они или слишком сложны для игрушки (DC-DC преобразователь, сдвиговые регистры и т.д.) или представлены лишь как пример простейшей программы на ассемблере. Я хочу представить на обозрение схему и программу на ассемблере законченной конструкции игрушечного светофора с некоторыми дополнительными функциями. Причем собрана она на “копеечном “ микроконтроллере по простейшей схеме, что немаловажно для начинающих. Надеюсь, эта простая схема станет для многих, начинающих изучать программирование микроконтроллеров PIC, первой реально собранной на PIC конструкцией. Простая, но при этом содержащая основные приемы и атрибуты программирования, программа позволит легко ее понять и экспериментировать с ней.

Каждому, кто имеет дело с программированием микроконтроллеров, известны основные принципы написания обработчиков прерываний: как можно короткое время выполнения и короткий код, отсутствие циклов и вызовов из обработчика других подпрограмм и т.д.  В данном же случае разрешены прерывания только по изменению уровня (пропустить другие прерывания мы никак не можем, так как их попросту нет) и я, для упрощения программы и ее восприятия, счел возможным отойти от этих принципов. Здесь в обработчике прерывания есть и циклы, и вызов другой подпрограммы, и (о ужас!) даже  переход в режим SLEEP. Поэтому, в заголовке программа названа «неправильной». В данном случае, обработчик прерываний используется как обычная подпрограмма, однако, в других случаях вышеназванные принципы, разумеется, остаются в силе.

Краткие характеристики устройства:

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

Итак, перейдем к описанию и рассмотрению схемы.

Схема светофора

Схема собрана на недорогом микроконтроллере PIC12F629. Непосредственно для управления светодиодами используются выводы GP0-GP2, GP4,GP5 (ножки 7, б, 5, 3, 2), запрограммированные как выходы. Светодиоды по каждому направлению объединены в последовательные группы, что позволяет минимизировать потребляемый ток. Резисторы R3-R8 ограничивают токи светодиодов. В случае сильной разницы в отдаче светодиодов разных цветов, придется подбирать соответствующие резисторы. У меня, например, две группы желтого цвета соединены параллельно и подключены к одному резистору, причем того же номинала, что и остальные и светят даже чуть ярче остальных (отдача больше).

В этой схеме на светодиоды подается на 1.5 В больше чем на микроконтроллер с дополнительного элемента (в данном случае, при отключенном выходе ток не проходит на вывод микросхемы, так как для открытия переходов двух светодиодов требуется гораздо большее напряжение, чем 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-бит
PIC12F629
1 DIPПоиск в FivelВ блокнот
R1 Резистор
3 кОм
1 0.125 ВтПоиск в FivelВ блокнот
R2 Резистор
100 Ом
1 0.125 ВтПоиск в FivelВ блокнот
R3-R8 Резистор
200 Ом
6 0.125 ВтПоиск в FivelВ блокнот
HL1,HL2,HL9,HL10 Светодиод
АЛ307А
4 REDПоиск в FivelВ блокнот
HL3,HL4,HL11,HL12 Светодиод
АЛ307В
4 GREENПоиск в FivelВ блокнот
HL5-HL8 Светодиод
АЛ307Д
4 YELLOWПоиск в FivelВ блокнот
C1 Конденсатор10 мкФ х10В1 Поиск в FivelВ блокнот
S1 КнопкаRBS-12B1 Без фиксацииПоиск в FivelВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (4) | Я собрал (0) | Подписаться

0
Денис #
Повторил, но не работает режим моргающего желтого (моргает два раза и переходит в рабочей режим светофора) что может быть? Подборка желтых светодиодов и резисторов не влияет? Может на 5-ую ногу нагрузка большая?
Ответить
0

[Автор]
diogen_b #
Не думаю, что нагрузка на порт может так повлиять на работу... Прикинул, да, при свежих батареях ток порта желтых диодов может превысить норму. Наверное, стоит заменить ограничительные резисторы (все) на 300 ом.
Ответить
0
slepoi #
Так же за полтора часика собрал, с перекурами... схема простая . Жалко что не было разноцветных светодиодов у меня...
Прикрепленный файл: -jIdLSQ5ZdI.jpg
Ответить
0
Sevlik #
smd платка. Работает норм.
Отредактирован 24.03.2017 18:44
Прикрепленный файл: светофорчик.lay6
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Катушка Тесла Солнечная панель 10Вт 12В поликристаллическая
вверх