Циклический таймер на PIC16F628Предлагаемый вниманию читателей таймер способен циклически включать и выключать нагрузку с периодичностью от 1 секунды до 23 часов 59 минут 59 секунд. Система настроек позволяет задавать первое состояние, время включения и выключения нагрузки, количество циклов.

Циклический таймер на PIC16F628 - схема


На рисунке выше изображена схема таймера. Ядром схемы является микроконтроллер PIC16F628A.

Основные этапы настройки прибора:

График коммутации нагрузки:

График коммутации нагрузки

Код программы написан на языке ассемблер. Прибор управляется одной кнопкой. Для визуального отображения информации служит дисплей со встроенным контроллером.

Микроконтроллер DD1 имеет функциональные выводы RA0, RA1, RB0 – RB5, которые служат для ввода и вывода информации. Микроконтроллер DD1 не имеет функции принудительного сброса, вывод для сброса подключен через резистор R1 к положительному потенциалу питания. Для генерации тактовой частоты в микроконтроллере используется встроенный RC-генератор тактовой частоты на кристалле.

К выводу RA1 через токоограничительный резистор R3 подключена тактовая кнопка SB1. В отжатом положении тактовой кнопки SB1 резистор R7 имитирует низкий логический уровень. Микроконтроллер DD1 распознаёт три состояния тактовой кнопки SB1:

1. не нажата;
2. нажата кратковременно (менее 1 с);
3. нажата и удерживается (более 1 с).

Изображение на дисплее помогает различать состояния тактовой кнопки SB1. Так при 1 состоянии микроконтроллер выполняет инструкции не связанные с нажатием кнопки, при 2 состоянии происходит управление в данном состоянии, пока микроконтроллер не распознает 3 состояние, а в 3 состоянии дисплей изображает следующие управляемое состояние.

К выводу RA0 через токоограничительный резистор R2 подключено твёрдотельное реле U1, которое включает и выключает подключенный к клеммнику X1 нагрузку. Твердотельное реле U1 может коммутировать нагрузку при переменном напряжении 48-530 В и максимальном токе 3 А (рабочая температура твердотельного реле U1 не должна превышать +60 °С).

Для отображения информации используется жидкокристаллический дисплей HG1. Он имеет контроллер, в котором реализована функция знакогенерации. Отображает две строки по шестнадцать символов в каждой. Управление дисплеем осуществляется через выводы микроконтроллера RB0 – RB5. Загрузка данных происходит полубайтами, через выводы RB2 – RB5. «Защёлка» - RB1.  Выбор регистра сигнала формируем на выводе RB0. Резисторами R5 и R6 устанавливаем контрастность дисплея HG1. Подсветка дисплея HG1 подключается к питанию через токоограничительный резистор R4. Дисплей HG1 прикручивается к плате 3 x 15 мм латунными стойками и 3 x 6 мм винтами.

Для точного счёта времени модулем TMR1 был использован внешний генератор на базе кварцевого резонатора ZQ1 с ёмкостями C2 и C3. Кварцевый резонатор ZQ1 с ёмкостями C2 и C3 подключен к выводам T1OSI и T1OSO. Точность хода времени 1 секунда.

Прибор запитывается от переменного или постоянного источника напряжения, подключаемого к разъему X2. Номинальное напряжение источника питания 9 – 15 В.  Номинальный ток источника питания 0.5 А. Для стабилизации питания используется обычная схема из диодного моста VD1, линейного стабилизатора DA1, фильтрующих конденсаторов C1, C4, C5, C6. При питании устройства постоянным напряжением 12 В максимальный потребляемый ток составляет 60 мА. Прибор может эксплуатироваться в диапазоне температур от –20 °С до +60 °С.

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

1. При включении происходит чтение энергонезависимой памяти данных EEPROM, где происходит выгрузка необходимых данных для дальнейшей работы прибора. По умолчанию: первое состояние нагрузки – выключено, время удержания первого состояния 1 с, время удержания инверсного состояния 1 с, количество циклов – 1. Прибор переходит в исходное рабочее состояние, т.е. 2.

2. Таймер отключен. Прибор выводит на дисплее в верхней строке «S(DE)* 00:00:00**», в нижней строке «C(00)*** 00:00:00****». После кратковременного нажатия тактовой кнопки включается таймер, т.е. 3. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние где происходит выбор первого состояния нагрузки, т.е. 4.

3. Прибор выводит на дисплее в верхней строке «Number of starts», в нижней строке «00001»*****. После кратковременной паузы прибор выводит на дисплее в верхней строке «S(ED)* 00:00:01**», в нижней строке «C(01)*** 00:00:01****». С начало происходить декрементирование  времени 1, когда время 1 обнулиться произойдёт инверсия состояния нагрузки и будет происходить декрементирование времени 2, когда обнулиться время 2, произойдёт декрементирование числа циклов. После этого, если число циклов не равно нулю, произойдёт загрузка настроенного ранее времени 1 и 2 и нагрузка перейдёт в первое состояние, начнётся следующий цикл. Если число циклов равно нулю, тогда происходит отключение таймера, т.е. 2. Все изменения таймера отображает дисплей. После кратковременного нажатия тактовой кнопки происходит рестарт, т.е. 3. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние где происходит выбор первого состояния нагрузки, т.е. 4.

4. Таймер отключен. Прибор выводит на дисплее в верхней строке «First state», в нижней строке «Disable». После кратковременного нажатия тактовой кнопки происходит выбор первого состояния нагрузки. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние где происходит индикация времени удержания первого состояния нагрузки, т.е. 5.

5. Прибор выводит на дисплее в верхней строке «Time 1», в нижней строке «00:00:01». После кратковременного нажатия тактовой кнопки происходит настройка секунд, т.е. 6. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние где происходит индикация времени удержания инверсного состояния нагрузки, т.е. 9.

6. Прибор выводит на дисплее в верхней строке «Time 1», в нижней строке «00:00:[01]». После кратковременного нажатия тактовой кнопки происходит инкрементирование секунд. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние где происходит настройка минут, т.е. 7.

7. Прибор выводит на дисплее в верхней строке «Time 1», в нижней строке «00:[00]:01». После кратковременного нажатия тактовой кнопки происходит инкрементирование минут. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние где происходит настройка часов, т.е. 8.

8. Прибор выводит на дисплее в верхней строке «Time 1», в нижней строке «[00]:00:01». После кратковременного нажатия тактовой кнопки происходит инкрементирование часов. Если тактовая кнопка нажата и удерживается более 1 с, происходит индикация времени удержания первого состояния нагрузки, т.е. 5.

9. Прибор выводит на дисплее в верхней строке «Time 2», в нижней строке «00:00:01». После кратковременного нажатия тактовой кнопки происходит настройка секунд, т.е. 10. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние где происходит настройка количества циклов, т.е. 13.

10. Прибор выводит на дисплее в верхней строке «Time 2», в нижней строке «00:00:[01]». После кратковременного нажатия тактовой кнопки происходит инкрементирование секунд. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние где происходит настройка минут, т.е. 11.

11. Прибор выводит на дисплее в верхней строке «Time 2», в нижней строке «00:[00]:01». После кратковременного нажатия тактовой кнопки происходит инкрементирование минут. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние где происходит настройка часов, т.е. 12.

12. Прибор выводит на дисплее в верхней строке «Time 2», в нижней строке «[00]:00:01». После кратковременного нажатия тактовой кнопки происходит инкрементирование часов. Если тактовая кнопка нажата и удерживается более 1 с, происходит индикация времени удержания инверсного состояния нагрузки, т.е. 9.

13. Прибор выводит на дисплее в верхней строке «Cycles», в нижней строке «01». После кратковременного нажатия тактовой кнопки происходит инкрементирование числа циклов. Если тактовая кнопка нажата и удерживается более 1 с, происходит переход в состояние сохранения, т.е. 14.

14. Прибор выводит на дисплее в верхней строке «Saving data». Прибор проверяет время 1 и 2 на равенство нулю, если это так, тогда прибор исправляет на минимальное значение, т.е. 00:00:01 для времени 1 и 00:00:01 для времени 2. Затем прибор сохраняет настройки в EEPROM памяти и переходит в исходное рабочее состояние, т.е. 2.

* S(ED), где S – Status, первое E – Enable таймер включен, второе D – Disable нагрузка выключена.
** 00:00:01 – Первое время – время удержания первого состояния.
*** С(01), где С – Cycles, 01 – число циклов, а если например C(EC), Endless cycle- Бесконечный цикл, в данном случае индикации числа циклов не происходит.
**** 00:00:01 – Второе время - время удержания инверсного состояния.
***** 00001 – счётчик числа включения таймера или рестартов, максимальное значение 65535, после чего происходит обнуление и подсчёт начинается заново.

В данном устройстве можно заменить следующие детали. Микроконтроллер  DD1 из серии PIC16F628A-I/P-xxx с рабочей тактовой частотой 20 МГц в корпусе DIP18. Дисплей HG1 подойдет любой из серии WH1602x. Стабилизатор напряжения DA1 отечественный КР142ЕН5А (5 В, 1.5 А). Диодный мост VD1 можно применить любой из серии 2Wxx. Твёрдотельное реле U1 можно найти аналогичное в крайнем случае заменить на CX240D5 с другими характеристиками. Разъём питания X2 аналогичный указанному на схеме с центральным контактом d=2.1 мм. Неполярные конденсаторы С1 и С6 номиналом 0.01 – 0.47 µF x 50 V.

Обсуждение статьи на форуме


Архив для статьи "Циклический таймер на PIC16F628"
Описание: Исходный текст программы(Ассемблер), файл прошивки микроконтроллера, макет печатной платы в SprintLayout5
Размер файла: 45.6 KB Количество загрузок: 2 936 Скачать

Комментарии  

0 #1 Andrey90 01.12.2013 10:17
Спасибо автору. работает великолепно.
Сообщить модератору
0 #2 Владислав 02.01.2015 12:26
Как сделать что бы он при пуске не инвертировал исходное состояние?
Сообщить модератору
0 #3 slyfoxnet 16.05.2015 23:29
Выставить First state disable (enable)
Сообщить модератору
0 #4 alexandrgm81 23.12.2015 01:40
А не подскажите есть ли у кого-то рабочая прошивка, а то ни в схеме не в протеусе почему-то не работает
Сообщить модератору
0 #5 volzok1 26.01.2016 06:07
alexandrgm81, посмотри даташит на дисплей, питание как подключается и со схемой сравни.
Сообщить модератору
0 #6 Buzz 09.04.2017 21:32
Не работает. Дисплей светится нижняя строка и все. Пробовал на МК смотреть осциллографом ничего мертво.
Сообщить модератору
+1 #7 kbv 22.01.2018 23:02
Отлично работает! Спасибо автору!
Что нужно сделать ,что при отключении питания и следующее включение питания заработал от там где был прерван.
. Спасибо!
Сообщить модератору