Интернет-журнал дачника. Сад и огород своими руками

Простой таймер на PIC16F628A. Схема и описание. Простой таймер для кухни на PIC16F628A Таймер для кухни на pic16f628a

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

В микроконтроллера 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: светодиоды зажигаются по-новому (на них выводиться двоичный счётчик), и сбрасывается флаг переполнения второго таймера.

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


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

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


Коррекция показаний, выведенных на индикатор включается при нажатии на кнопку "Коррекция". При этом кратковременная подсказка выводится на 1/4 секунды, после чего корректируемое значение начинает мигать с частотой 2 Гц. Корректируются показания кнопками "плюс" и "минус". При длительном нажатии на кнопку, включается режим автоповтора, с заданной частотой. Частоты автоповтора нажатия кнопки составляют: для часов, месяцев и дня недели - 4 Гц; для минут, года и яркости индикатора - 10 Гц; для корректирующего значения - 100 Гц.
Все откорректированные значения, кроме часов, минут и секунд, записываются в EEPROM и восстанавливаются после выключения - включении питания. Секунды при коррекции обнуляются. Из всех режимов, кроме часы-минуты, минуты-секунды и LoFF организован автоматический возврат. Если в течение 10 секунд ни одна из кнопок не нажата, то часы переходят в режим отображения часов - минут.
Нажатием на кнопку "Вкл/Выкл буд." включается/выключается будильник. Включение будильника подтверждается коротким двухтональным звуком. При включенном будильнике светится точка в младшем разряде индикатора.
В режиме "Corr" на индикатор выведена корректирующая константа, начальное значение которой 5000 микросекунд в секунду. При отставании часов константу увеличиваем на величину отставания, вычисленное в микросекундах за одну секунду. Если часы спешат, то константу уменьшаем по тому же принципу.


Фото счётчика

"Реверсивный счётчик, который я предлагаю для повторения, собран на микроконтроллере PIC16F628A. Он имеет два входа управления «+1» и «-1», а также кнопку «Reset» (четвёртая кнопка зарезервирована и пока не используется). Мой предыдущий счётчик импульсов имел недоработку в нём была всего одна кнопка «+1» и при её длительном удержании счёт продолжался. Мой новый счётчик избавлен от этой недоделки. Как бы долго или коротко не была нажата кнопка входа, счёт продолжится только при её очередном нажатии. Максимальное количество поступивших импульсов 9999. При воздействии на вход «-1» счёт ведётся в обратном порядке до значения 0000. Показания счётчика сохраняются в памяти контроллера и при отключении питания. Сброс показаний счётчика и состояния памяти в 0 осуществляется при нажатии кнопки «Reset». Тех, кто решит повторить мою схему, пусть не пугает то, что при первом включении на индикаторе может высветиться непредсказуемая информация. При первом же нажатии на любую из кнопок всё станет на свои места и «мусора» больше не будет. Где и как можно использовать эту схему я пока ещё не придумал, но надеюсь, что она кому-нибудь принесёт пользу. И последнее если у кого-то под рукой не окажется нужного индикатора, а будет какой-нибудь другой (или даже 4 отдельных одинаковых индикатора), я готов помочь перерисовать печатку и переделать прошивку. Прикрепляю в архиве схему, плату и прошивки под индикаторы с общим анодом и общим катодом. Желаю всем удачи!"

Вместо индикатора GNQ-5641Ax-Bx можно применить любой другой индикатор с аналогичной распиновкой.


Схема, прошивки для индикаторов с общим анодом или катодом и печатная плата, скачать 66 кб.

Есть дополнение, которое позволяет сделать из устройства счётчик для намоточного станка. При этом, схема и печатная плата не изменяются. Отличие в назначении кнопок и в программе микронтроллера. Вход у счётчика один, кнопки "+" и "-" определяют направления счёта (инкремент и декремент). При инкременте горит правая точка, при декременте самая левая точка индикатора. Результат, а также направление счёта сохраняются в памяти МК. При включении питания настройки и счёт восстановливаются. Кнопкой "Reset" можно обнулить счёт. Скачать дополнение 20 кб.

Случилось так, что в связи с болезнью пришлось оставить домик в поселке без присмотра. Нужен таймер, который в течении 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

Этот простой таймер на PIC16F628A можно использовать на кухни, да и не только на кухне, а везде где необходимо отсчитать промежуток времени от 1 до 99 минут. Основой является микроконтроллер PIC16F628A – достаточно популярный и не дорогой. В предыдущих статьях были рассмотрены различные конструкции на данном микроконтроллере, к примеру, .

Органами управления таймера являются одна кнопка и валкодер. По завершению отсчета времени раздается прерывистый акустический сигнал.

Описание работы простого таймера на PIC16F628A

После подачи питания на схему таймера на светодиодных индикаторах высвечивается установленное время, светодиод не светится. Путем вращения ручки валкодера возможно поменять установку времени от 1 до 99 минут.

Схема таймера — индикаторы с общим катодом

Схема таймера — индикаторы с общим анодом

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

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

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

Похожие публикации