Многопрограммный таймер на микроконтроллере pic16f628a. Простой электронный таймер на PIC16F628A

Это очередная поделка из хлама - таймер для кухни, хотя и не обязательно для кухни. В ход пошли детали которые валялись без дела, в частности старые индикаторы АЛСки, резисторы выпаянные из старых плат и т.д. Основа устройства микроконтроллер PIC16F628A , один из самых распространенных и дешевых. Управление таймером осуществляется с помощью валкодера и одной кнопки. Диапазон выдержки времени от 1 до 99 минут. По окончанию цикла отсчета времени подается прерывистый звуковой сигнал. А архиве лежит две прошивки, первая просто таймер, а вторая с некоторыми наворотами, об этом ниже.

Также есть вариант под индикаторы с общим анодом. Обратите внимание, что и прошивки под каждую из схем - свои. Все отличия выделены на схеме красным цветом.

После включения питания на индикаторах высвечивается заданное время, светодиод не горит. Вращая валкодер можно изменить установку времени от 1 до 99 минут. Когда время установлено, нажимаем кнопку - раздается короткий звуковой сигнал и таймер начинает отсчет времени, светодиод мигает, а время на индикаторе уменьшается каждую минуту. Когда время дошло до нуля, таймер издает прерывистые звуковые сигналы, светодиод светиться постоянно. Теперь нажатием кнопки снимается звуковой сигнал и девайс возвращается в исходное состояние - режим установки времени. Так работает первая версия прошивки.

Вторая версия прошивки работает также как и первая, но имеет несколько дополнений. В режиме установки времени, если к валкодеру не прикасаться несколько секунд, на дисплее начинает бегать анимационная заставка. нажатие кнопки или вращение валкодера отключит анимацию и вновь отобразит режим установки времени. Во время отсчета времени, если осталась одна минута, на дисплее индицируются секунды от 60 до 00. Когда сработал звуковой сигнал, звучать он будет не бесконечно, а около 20 секунд. Далее дисплей начинает индицировать анимационную заставку (отличную от той, которая в режиме установки). А также, через каждую минуту будет напоминать коротким звуковым сигналом. Нажатием кнопки также, как и в первой прошивке таймер сбрасывается в режим установки времени. Когда до срабатывания таймера остается 3 секунды, таймер издает на каждую секунду короткий звуковой сигнал, т.е. 3...2...1 и далее срабатывает как обычно. Обе прошивки доступны и лежат в архиве вместе с рисунком печатной платы.

Звуковой сигнал реализован с помощью аппаратного ШИМ встроенного в микроконтроллер. Динамическая головка должна иметь сопротивление порядка 50 ом. Можно применить и низкоомные динамические головки (4 или 8 ом), но в данном случае лучше установить малогабаритный выходной трансформатор, т.к. через 4 омную головку будет протекать большой ток, который может вызвать перегрузку блока питания и спровоцировать сброс микроконтроллера.

Печатная плата, вариант Алексея Антонова

Комментарии

1 2

0 #21 kaktuss 14.06.2015 16:08

Цитирую AntonChip:

Можно глянуть скриншот установки битов конфигурации при программировании


Спрашивал автора какую конфигурацию при прошивке, он ответил, что все есть уже в прошивке. Поэтому ничего не устанавливал, просто залил прошивку.
Я бы выложил скриншоты, но не знаю как. Может на почту Вам скинуть?

Случилось так, что в связи с болезнью пришлось оставить домик в поселке без присмотра. Нужен таймер, который в течении 2-3 недель (а получилось 2,5 месяца) создавал эффект присутствия в доме, не взирая на нестабильное напряжение и частое отключение сети. Из продающихся за разумную цену ничего не подошло. Интернет и радиотехническая литература тоже не удовлетворила меня полностью. Пришлось творить самому. За пару вечеров собрал простенький таймер с часами, который по вечерам с 18-00 до 21-00 включал свет. В случае отключения напряжения часы не сбивались: индикатор отключался, а микроконтроллер продолжал работать от аккумуляторов, которые потом заряжались малым током. Время такое выбрал потому что был январь месяц. В конце февраля перевел часы на полтора часа назад. Теперь хотя на таймерных часах было 18-00 и включалась лампа, реально было 19-30 вечера. К концу марта необходимость в таймере отпала, но думаю он мне еще пригодится на период отпуска. Возможно дойдут руки до усовершенствования, ну а пока делюсь тем, что есть.

Схема простая, подобна тем часам, которые я выкладывал на этом сайте. Там же и блок питания с резервными аккумуляторами. Добавлен только узел включения лампы. Сначала я его сделал на симисторе ВТВ-16. Но экономка вспыхивала при включении в сеть (иногда). Чем бороться с переходными процессами, поставил реле, думаю для лампы-экономки это безопаснее. К плате я не подводил 220 вольт, поэтому симистор (а впоследствии – реле) с транзистором и диодом закрепил отдельно.

Также в корпусе установил и патрон под лампу. Для охлаждения в боковых и задней стенке корпуса просверлил по 8 отверстий d=5мм: по 4 в нижней части и по 4 в верхней. Но нагрев не ощущается.

Часы выставляются двумя кнопками: часов и минут. Программа написана на Ассемблере. Программа проверяет соответствие часов установленным (запрограммированным) значениям. Сейчас в программе установлены 18, 19 и 20 часов. Но при программировании можно изменить время работы таймера. На примере IC Prog (в других программах - аналогично) нужно найти по адресу 0013h значение 3012, по адресу 0017h значение 3013, по адресу 0021h значение 3014. Первые две цифры значений (30) - это код команды, а вторые две - это значение часов в шестнадцатеричном коде: 12 соответствует десятичному числу 18, 13 -19 и т.д. Для изменения нужно дважды кликнуть левой кнопкой по значению того адреса, который хотите изменить. Откроется окно редактирования, в котором значение 3012 меняете на другое, например 3005. Теперь таймер будет включен утром с 5-00 до 6-00 и вечером с 19-00 до 21-00. Так-же можно установить любое другое время.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
МК PIC 8-бит

PIC16F628A

1 В блокнот
VR1 DC/DC импульсный конвертер

LM2575

1 В блокнот
VT1-VT4 Биполярный транзистор

КТ3102

4 В блокнот
VT5 Биполярный транзистор

КТ315А

1 В блокнот
VD1-VD3 Диод Шоттки

1N5819

3 В блокнот
VD4 Выпрямительный диод

1N4004

1 В блокнот
VS1 Диодный мост

DB157

1 В блокнот
C1, C2 Конденсатор 20 пФ 2 В блокнот
С3, С6 Конденсатор 0.1 мкФ 2 В блокнот
С4 330мкФ 25В 1 В блокнот
С5 Электролитический конденсатор 100мкФ 25В 1 В блокнот
R1, R3, R6, R7, R11, R12 Резистор

300 Ом

6 В блокнот
R2, R4 Резистор

10 кОм

2 В блокнот
R5 Резистор

360 Ом

1 В блокнот
R8-R10, R13 Резистор

1.5 кОм

4 В блокнот
R14 Резистор

100 Ом

1 В блокнот
R15 Резистор

6.2 кОм

1 В блокнот
R16 Резистор

2 кОм

1 В блокнот
R17 Резистор

1 кОм

1 В блокнот
F1 Предохранитель 100 мА 1 В блокнот
L1 Катушка индуктивности 330 мкГн 1
  • 24.09.2014

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

  • 08.10.2016

    MAX9710/MAX9711 — стерео/моно УМЗЧ с выходной мозностью 3 Вт имеющие режим пониженного потребления. Технические характеристики: Выходная мощность 3 Вт на нагрузке 3 Ом (при КНИ до 1%) Выходная мощность 2,6 Вт на нагрузке 4 Ом (при КНИ до 1%) Выходная мощность 1,4 Вт на нагрузке 8 Ом (при КНИ до 1%) Коэффициент подавления шумов …

  • 30.09.2014

    Характеристики: Диапазон воспроизводимых частот 88…108 МГц Реальная чувствительность 3 мкВ Выходная мощность УНЧ 2*2Вт Диапазон воспроизводимых частот 40…16000Гц Напряжение питания 3…9В Приемник построен на 2-х микросхемах CXA1238S и TEA2025B. CXA1238S содержит универсальный АМ\ЧМ радиоприемный тракт, выбор режима работы определяет лог. уровень на 15-ом выводе микросхемы. В состав ЧМ входит — …

  • 22.04.2015

    На рисунке № 1 показана схема простого индикатора сетевого напряжения. R1 ограничивает прямой ток через светодиод HL1. С1 используется в качестве балластного элемента, что позволило улучшить тепловой режим уст-ва индикации. При отрицательной полуволне сетевого напряжения стабилитрон VD1 работает как обычный диод, предохраняя светодиод от пробоя в обратным смещением. При положительной …

  • 21.09.2014

    В наше время, когда многие обзавелись дачей или домом в селе, где сварка является необходимостью, возникает проблема с ее приобретением. Покупка заводского аппарата осложняется его высокой стоимостью. Самая трудоемкая часть — изготовление самого сварочного трансформатора. При этом изготовитель сталкивается с проблемой приобретения магнитопровода. К магнитопроводу предъявляют следующие требования: достаточная площадь …

В микроконтроллерах есть полезная вещь – таймер. Таймер можно использовать как счётчик или с его помощью формировать импульсы заданной длины (ШИМ). С использованием таймера можно, например, построить часы или генератор.

В микроконтроллера 16 семейства есть 3 таймера: TRM0, TRM1 и TRM2. Каждый из них больше подходит для определённого типа работы. Рассмотрим эти таймеры подробнее:

  • 8-битный таймер (считает от 0 до 255)
  • тактируется от системной частоты или от внешнего источника
  • считает по переднему или заднему фронту сигнала
  • 8-битный предделитель
  • прерывание генерируется при переполнении (при переходе от 255 к 0)
  • таймер работает постоянно

Этот таймер можно использовать для генерации импульсов заданной длины или для подсчёта входящих импульсов.

OPTION_REG (OPTION в программе).

  • 16-битный таймер (0..65535)
  • может тактироваться как от внешнего источника сигналов, так и от
  • дополнительного часового кварца
  • максимально предделитель - 1:8
  • таймер считает только передние фронты сигнала
  • таймер может использоваться модулем CCP
  • таймер можно отключать

Применения аналогичные TMR0.

Управление таймером осуществляется регистром T1CON .

  • 8-битный таймер
  • тактируется только от системной частоты
  • предделитель 1:1 , 1:4 , 1:16
  • таймер можно отключать

Этот таймер имеет другой принцип работы. Таймер считает импульсы от нуля до заданного PR2 . После совпадения TRM2 и PR2 сигнал поступает на 4-битный постделитель и генерируется прерывание. Такая система позволяет генерировать частоты с минимальным шагом. Таймер может посылать сигналы на CCP в качестве базы тайминга ШИМа.

Управление таймером осуществляется регистром T2CON .

Пример

Перейдём к коду прошивки. В примере задействованы два счётчика TRM0 для счётчика входных импульсов и TRM1 для мигания 2-мя светодиодами.

Включим таймеры TRM0 для счётчика и TRM1 для мигания 2-мя светодиодами.

INTCON=0b11100000; // Настройка прерываний OPTION=0b00101000; // Настройка TMR0 T1CON =0b00110001; // Настройка TMR1 TMR1IE=1;

В основном коде программы только вывод значения счётчика на дисплей.

Void main() { low_init(); // инициализация МК InitLCD(); // инициализация дисплея TMR0=0; // обнуляем таймер TMR0 LED=0; // обнуляем переменную отвечающею за светодиоды while(1==1) { IntToLCD(0,0,TMR0); // вывести на дисплей содержимое таймера delay(1000); // задержка } }

Основное же действие разворачивается в обработчике прерываний.

Void interrupt isr(void) { if(T0IF) // при переполнение TMR0 { T0IF=0; // сбрасываем флаг о его переполнение } if(TMR1IF) // при переполнение TMR1 { LED++; // управление светодиодами if(LED>3) { LED=0; } PORTA=LED; TMR1IF=0; // сбрасываем флаг } }

В обработчике первого таймера TRM0: при его переполнение нечего полезного не происходит, только сбрасывается флаг переполнения. При переполнение второго таймера TRM1: светодиоды зажигаются по-новому (на них выводиться двоичный счётчик), и сбрасывается флаг переполнения второго таймера.

Ниже приведены фотография и видео работы таймеров из примера.