Сайт радиолюбителей Республики Коми.

: главная: странички:

Многофункциональный таймер на микроконтроллере PIC16F84A.

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

Будильники имеют следующие режимы звонков:

• “непрерывный режим” — непрерывное звучание будильника (т. е. работа устройства) от одного запрограммированного времени до следующего, затем пауза до следующего установленного времени и т. д.;

• режим “1 минута” — звучание будильника 1 мин;

• режим “5 секунд” — звучание будильника 5 с;

• режим “1 секунда” — звучание будильника 1 с.

Имеется возможность устанавливать ограничения работы будильников по дням:

• работа будильников все дни;

• работа все дни, кроме 6 и 7-го дня;

• работа все дни, кроме 7-го дня;

• отключение всех будильников. Кроме этого, в таймере имеются следующие режимы работы:

• обнуление всех установок будильников;

• коррекция хода часов за неделю в пределах ± 4 с;

• ручная коррекция хода часов по сигналам точного времени;

• ежедневная автоматическая коррекция хода часов по сигналам точного времени в диапазоне ± 10 с от полуночи;

• установка и индикация дней недели;

• работа индикации в попеременном режиме: индикация текущего времени — 10 с, затем индикация значения запрограммированного времени будильника, следующего за сработавшим — 2 с.

Рис.1.

Естественно, цифровые значения можно легко изменить в программе под конкретные требования.

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

Рассмотрим укрупненный алгоритм работы программы, который представлен на рис. 1.

После пуска и выполнения всех предварительных установок включается предделитель с коэффициентом деления, равным 16.

По переполнению таймера TMRO, имеющего коэффициент деления 256, происходит прерывание и инкрементируется регистр делителя на 250.

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

Таким образом, с учетом машинного цикла общий коэффициент деления составляет 4x16x256x250 = 4096000, и регистр секунд инкрементируется с частотой 1 Гц.

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

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

После отработки прерывания вся процедура повторяется со следующим разрядом. После последнего, пятого, разряда программа возвращается к индикации нулевого разряда. Таким образом, индикация каждого разряда длится 4 мс. За это время можно выполнить 4096 команд.

Чтобы не загружать таймер выполнением всех функций после, одного разряда, они распределены следующим образом:

• при индикации нулевого разряда происходит сравнение установленных значений будильников с текущим временем;

• при индикации первого разряда проверяется запрет будильников по дням;

• при индикации второго разряда проверяется значение часов для коррекции по сигналам точного времени в полночь;

• при индикации третьего разряда проверяется состояние кнопок, и выполняются установки по нажатым кнопкам;

• в четвертом разряде происходит смена индикации при изменении режима работы.

Каждую из перечисленных функций можно проиллюстрировать своим алгоритмом работы, но ничего интересного они представлять не будут. Единственное, на что можно обратить внимание, это запись в память 64-х регистров информации из регистров, которые по числу превышают Flash-память в два раза. Поскольку во всех регистрах записи занято только четыре разряда из восьми, то при записи в память старшие четыре разряда занимают десятки (минут, часов), а в младшие четыре разряда записывается значение единиц.

Сравнение записанных значений времени с текущими производится в том же формате, что значительно экономит ресурсы при проверке всей Flash-памяти. Чтобы не возникало путаницы при считывании и записи, значения минут записываются в память с номером от 0 до 31, а адрес часов увеличен на 32. Сначала проверяется совпадение минут, затем, если произошло совпадение, проверяется адрес, увеличенный на 32, на совпадение часов.

Рис.2.

Принципиальная схема таймера показана на рис. 2. Как видно, она мало отличается от схемы в [1] и, если вы уже сделали часы, то минимальные доработки позволят вам сделать таймер.

В том и преимущество микроконтроллеров, что изменив программу, можно придать устройству совершенно новые потребительские свойства.

Эта схема оставлена из-за своей универсальности, т. е. возможности установки различных семисегментных индикаторов.

Для этого необходимо только заменить микросхемы дешифраторов, как это хорошо описано в различной литературе [2].

Выходы RAO—RA2 микроконтроллера управляют дешифратором DD3 индицируемого номера разряда, а выходы RBI—RB4 — преобразователем DD1 двоичного кода в семисегментный. Выход RB5 запрограммирован для управления запятой. Выход RB6 управляет исполнительным устройством.

Выходы RB7, RA3, RA4 используются как входы включения записи, разряда и установки соответственно. Вывод установки ALA используется для включения будильника. Выход RBO, который в часах использовался для гашения, имеет постоянный уровень лог.0 для разрешения работы микросхемы мультиплексора DD3. Гашение в программе не используется, но выход оставлен для преемственности. В связи с увеличением числа команд в схему введен высокочастотный кварцевый резонатор на частоту 4,096 МГц, при этом скорректированы значения конденсаторов С1 иС2.

Для подключения сильноточной нагрузки через промежуточное реле установлен транзистор VT7, работающий в ключевом режиме. Для контроля включения нагрузки или в качестве будильника установлен звуковой излучатель НСМ1206х с частотой излучения около 2 кГц. Резервное питание осуществляется от батареи G1 из двух элементов А10—А12 или ААА.

Работа с таймером

Кнопка “Разряд” перемещает запятую для выбора разряда установки.

Кнопка “Установка” прибавляет единицу в выбранный разряд.

Кнопка “Запись” фиксирует установленный режим работы, производит запись в память значений будильников и производит автоматическую коррекцию часов в полночь.

Режимы работы таймера устанавливаются следующими числами в двух младших разрядах:

40 — режим часов;

41 — попеременный режим;

42 — установка часов;

43 — установка дней;

45 — звонок звучит непрерывно;

46 — звонок звучит 1 мин;

47 — звонок звучит 5 с;

48 — звонок звучит 1 с;

49 — звонок отключен;

50 — звонок звучит все дни, кроме 6 и 7-го;

51 — звонок звучит все дни, кроме 7-го;

52 — звонок звучит все дни;

53 — установка коррекции;

54 — обнуление всех будильников;

55 — обнуление минут и секунд часов.

Все режимы установки начинают работать после фиксации их нажатием кнопки “Запись”. Индикация произведенной записи выполняется сменой положения запятой. Если запятая находилась в любом разряде, кроме шестого и первого, то при выполнении фиксации режима запятая переместится в первый разряд. Это относится к режимам 45—52. При установке режимов работы 41, 42 и 55 запятая перемещается в шестой разряд, и индикатор высвечивает значение часов. Индикация установки режима 54 производится нулями во всех разрядах.

Кнопку “Запись” не нужно нажимать при установках дней, коррекции и часов. Нельзя установить два взаимоисключающих режима таких, как 45 и 49, 50 и 52, будет работать только последний установленный режим. После установки значений часов необходима обязательная установка режима 40 или 41. После выполнения всех необходимых установок запятая выводится в шестой фиктивный разряд (выводится за пределы индикатора) и таймер переходит в режим индикации значений часов с секундами.

Если установлен попеременный режим, то, как указывалось выше, время индицируется Юс, затем индицируется время будильника по адресу, следующему за уже сработавшим. Если будильник еще не сработал, высвечивается время будильника по первому адресу. Если необходимо переместить запятую с первого разряда в нулевой, то делать это надо, не отрывая пальца от кнопки “Разряд”, чтобы проскочить шестой разряд, иначе установка не будет выполнена.

Установка будильников производится установкой чисел в младших разрядах от 0 до 31. При установке значения от 32 до 39 индикатор сбрасывается в ноль. Это может произойти при установке режимов, если сначала установлено значение в нулевом разряде, а затем производится установка в первом разряде с переходом через тройку, поэтому сначала лучше устанавливать значение первого разряда. Значения будильников могут устанавливаться с дискретностью в 1 мин. Если вы предусматриваете работу таймера в попеременном режиме индикации, то желательно программировать значения будильников по возрастающей.

Рис.3.

При работе в непрерывном режиме первое значение от текущего времени будет включать исполнительное устройство, а следующее — выключать его. Нулевые значения установок игнорируются программой, поэтому если необходимо срабатывание будильника в полночь, нужно выставить значение 23 ч 59 мин или 00 ч 01 мин. Если необходимо отключить выбранный будильник, достаточно установить фиктивное значение часов, например, 25. Если вы не предусматриваете работу в попеременном режиме, то будильники можно программировать в любой последовательности, поскольку сравнение на совпадение производится по всему массиву памяти.

После установки адреса и значения будильника запись в память производится нажатием кнопки “Запись”. Индикация выполнения записи производится перемещением запятой в нулевой разряд. Это сделано для упрощения установки адреса следующего будильника. Поскольку запись в память выполняется в третьем разряде индикации, то при удержании кнопки “Запись” яркость этого разряда увеличивается.

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

Рис.4.

При выборе режима 53 (установка коррекции) на табло индицируется: с0-с0-53 . Во втором разряде высвечивается устанавливаемое значение коррекции, а в четвертом разряде — значение знака коррекции. Величина коррекции не может быть более четырех. Знак коррекции положительный, если в четвертом разряде ноль, и отрицательный (часы спешат), если единица. Практика показала, что ежедневное введение коррекции нецелесообразно. При обычном резонаторе суточный ход часов лежит в пределах ± 0,5 с. Поэтому коррекцию лучше вводить один раз в неделю. Коррекция вводится автоматически в 00-00-05 часов при переходе из седьмого дня в первый.

Если вы будете пользоваться автоматической коррекцией по сигналам точного времени, то вводить значение этого режима нет необходимости. Этот режим включается автоматически в пределах ± 10 с. от полуночи. Импульс установки положительной полярности в уровнях ТТЛ должен быть подан на вывод RB7 (REC). Поскольку цикл индикации всех разрядов равен 4x6 = 24 мс, то длительность импульса установки не должна быть меньше этого значения. Естественно, при использовании автоматической коррекции устанавливаемое значение коррекции (режим 53) должно быть нулевым.

Режим 55 (обнуление минут и секунд) используется для ручной установки часов при нажатии кнопки “Запись”. При индикации часов кнопка “Запись” не реагирует на нажатие. Кнопка “Установка” соединена параллельно с кнопкой с фиксатором “Вкл. будильника”.

Рис.5

Непрерывный режим будильника предназначен для периодического включения и выключения сильноточной нагрузки при помощи промежуточного реле. Использовано реле РЭС49 (паспорт PC.569.426), хотя это может быть любое другое на соответствующее напряжение и ток. Промежуточный каскад может быть выполнен и на оптопарах, и на симисторе.

Режим звучания будильника “1 минута” можно использовать как обычный будильник. Режим “5 секунд” предназначен для подачи звонков в учебном заведении. Режим звучания “1 секунда” может выполняться в начале каждого часа (кукушка) или использоваться для включения мелодии, например, имитации боя курантов. Если установить таймер в учительской на попеременном режиме, то будет видно время, оставшееся до окончания перемены или урока.

Топология печатных плат и расположение элементов даны на рис. 3—5. Тонкими линиями обозначены проводники со стороны установки элементов. В табл. 1 представлен hex-файл программы таймера.

Скачать файл прошивки микроконтроллера PIC16F84A.

Н. Заец

Литература:

  1. Н. Заец. Часы на PIC-контроллере. — Схемотехника, 2002, № 8, с. 46, 47.
  2. С. Бирюков. Цифровые устройства на МОП-интегральных микросхемах. — М.: Радио и связь, 1990.
  3. М. Предко. Справочник по РIC-микроконтроллерам. — М.: ДМК Пресс, Додэка-ХХ1, 2002.

Материал подготовил Ю. Погребан (UA9XEX).

Rambler's Top100
Rambler's Top100
Copyright © Russian HamRadio

Hosted by uCoz