Часы с кукушкой » Программирование устройств на PIC микроконтроллерах


Логин:
Пароль:
О сайте:

Pic.Rkniga.ru - Сайт как для начинающих, так и для опытных радиолюбителей, разрабатывающих свои устройства на популярных PIC микроконтроллерах.
Здесь можно обмениваться сообщениями на форуме, а также добавлять на сайт статьи и схемы своих устройств.

Меню сайта
Главная Форум по PIC микроконтроллерам Форум Статьи по PIC микроконтроллерам Статьи Справочная информаци по PIC микроконтроллерам Справочник Литература по PIC микроконтроллерам Литература Схемотехника Схемотехника устройств на PIC микроконтроллерах Микроконтроллеры Программаторы Все по программированию PIC микроконтроллеров Программы, Софт Программы Ссылки
Опрос

Какими микроконтроллерами вы чаще всего пользуетесь


PIC10
PIC12
PIC16
PIC18
PIC24
PIC32
Другими


Последние материалы
  • Тестовая плата для отладки программ на микроконтроллере PIC18F4550
  • Кнопка On/OFF на PIC12F629.
  • Часы с синхронизацией от китайского будильника
  • ШИМ регулятор на PIC16F628A.
  • Счетчики прямого и обратного счета на PIC16F628A.
  • Таймер отключения питания для мультиметра и не только.
  • Измеритель напряжения и тока
  • Маршрутный компьютер для электровелосипеда
  • Простой двухканальный термометр на PIC16F690 и датчиках DS18B20
  • Электронная "Незабудка" для забывчивых
  • Популярные материалы
    Случайная книга
    Часы с кукушкой
    Автор публикации: alex Просмотров: 7661 Добавлен: 10-08-2012, 08:22 Комментарии: 0

         Предлагаемое устройство, по словам автора, — попытка создать простой и дешевый прибор счета времени, удовлетворяющий всем его потребностям и снабженный большим числом сервисных функций. Насколько она удалась — судить читателям.
         Чтобы с понятием "часы" не возникала путаница, это слово используется в данной статье только для обозначения соответствующей единицы измерения времени и элементов, имеющих отношение к отсчету времени в этих единицах. Например, "разряд единиц часов" на индикаторе, "счетчик часов" — регистр микроконтроллера, содержимое которого соответствует текущему времени в часах Весь набор регистров микроконтроллера, в которых хранится текущее время (от половин секунды до дней недели), назван счетчиком времени. Предлагаемое устройство в целом далее называется просто устройством или прибором.
         В обычном режиме на индикаторе устройства отображается текущее время в 24-часовом формате с гашением незначащего нуля в разряд десятков часов. Ведется также счет дней недели, но эта информация на индикатор обычно не выводится. Однако при необходимости ее можно просмотреть. Точка разряда единиц часов мигает с периодом 1 с. Точки разрядов единиц и десятков минут сигнализируют о включении и выключении будильника и о его режиме. Может быть, включен режим "кукушка" — подача звукового сигнала в начале каждого часа, а также заданы часы, в которые этот режим автоматически отменяется. Кроме того, программа может автоматически, по расписанию, аналогичному расписанию "кукушки", снижать яркость индикатора.
         Основой устройства, схема которого изображена на рис. 1, служит микроконтроллер PIC16F628A. Линии его портов RA0—RA4, RA6, RA7, RB4 настроены на вывод, на них формируются сигналы, подаваемые на катоды элементов светодиодного индикатора HG1. На линии портов RB0—RB3 выводятся сигналы управления динамической индикацией (через транзисторы VT1—VT4 они поступают на общие аноды разрядов индикатора) и опроса состояния кнопок SB1—SB4.
         Для подачи звукового сигнала "кукушки" на линии RB5 микроконтроллера на 0,5 с устанавливается высокий уровень напряжения. При срабатывании будильника импульсы высокого уровня не этой линии следуют с периодом 1 с в течение минуты.
         При наличии аккумуляторной бета-реи GB1 счетчик времени продолжает работать даже при отключенном основном питании. Напряжение, подаваемое на линию RA5 микроконтроллера, в этой ситуации становится низким, что служит для программы сигналом отключить индикацию и перевести микроконтроллер в экономичный режим SLEEP (сон). Он "пробуждается" только для обновления текущего времени в соответствующих регистрах.
    Часы с кукушкой

         Подбирая номинал резистора R4, устанавливают необходимый ток подзарядки аккумулятора GB1 во время работы прибора от сети. Если вместо аккумулятора используется не допускающая подзарядки батарея гальванических элементов, резистор R4 необходимо исключить.
         Практически асе основные операции программа выполняет, обслуживая запросы прерывания, генерируемые таймерами TMR0 и TMR1 микроконтроллера. По прерываниям от TMR0 организованы динамическая индикация, опрос состояния кнопок SB1—SB4 и реакция на их нажатие. Поскольку эти операции не требуют высокой точности отсчета времени, тактирование таймера TMRO и процессорного ядра микроконтроллера производится от внутреннего RC-генератора. Таймер TMR1 работает от собственного генератора, стабилизированного кварцевым резонатором ZQ1. Он генерирует запросы прерывания с периодом 0,5 с. Их подсчет микроконтроллер ведет программно.
         Для компенсации возможного отклонения частоты резонатора ZQ1 от номинала предусмотрена автоматическая ежечасная корректировка счетчика времени. Поправка вводится при переходе от 58-й к 59-й минуте часа. Во избежание накопления погрешности устанавливать точное время вручную рекомендуется в интервале между началом последней минуты одного часа и окончанием первой минуты следующего. Такой алгоритм удобен для установки времени по радиосигналам.
         Поскольку напряжение резервного питания отличается от основного, с переходом на него немного изменяется частота кварцевого генератора таймера TMR1. По этой причине предусмотрена раздельная коррекция счетчика времени при основном и резервном питании.
         Для формирования звуковых сигналов "кукушки" и будильника в устройстве использована микросхема музыкального синтезатора УМС8 (DD2). Диоды VD12— VD14 уменьшают амплитуду управляющего синтезатором сигнала до приемлемого значения. Звуковой сигнал, усиленный транзистором VT5, поступает на подключенную к разъему Х3 динамическую головку мощностью 0,5 Вт от компьютере.
         С помощью кнопок SB5 и SB6, подключаемых через разъем Х2, можно выбрать для сигнализации любую мелодию из числа имеющихся в памяти синтезатора и прослушать ее. Однако после перерыва в питании устройства от сети синтезатор всегда переключается на первую из имеющихся мелодий. Это позволяет узнать о факте временного отключения питания. Если в этом нет необходимости, переключения на первую мелодию можно избежать, соединив левый (по схеме) вывод резистора R6 не с выводом 3 интегрального стабилизатора DA1, а с точкой соединения резистора R4, диода VD9 и вывода 14 микроконтроллера DD1. Это, однако, увеличивает расход энергии резервной батареи GB1.
         Если применение в устройстве двух кварцевых резонатороа по какой-либо причине нежелательно, можно тактировать микросхему синтезатора от кварцевого генератора таймере микроконтроллера. В этом случае вывод 3 синтезатора отключают от выводов 2 и 4, соединяют его с выводами 5 и 9, а также подключают резистор R20 и диод VD18, как показано в верхнем правом углу рис. 1. Резонатор ZQ2 не устанавливают.
         Размеры и форма печатной платы устройстве, изображенной на рис. 2, выбраны исходя из ее размещения в корпусе трехпрограммного трансляционного приемника "Электроника-203". Для индикатора HG1 в корпусе вырезано окно. Часть деталей расположена на плате под индикатором. В варианте с кварцевым резонатором ZQ2 (он изображен розовым цветом) со стороны печатных проводников припаивают перемычку, также изображенную розовой. Если решено обойтись без этого резонатора, монтируют детали и перемычку, изображенные голубым цветом.
         Выводы конденсатора С1 и батареи GB1 припаяны к соответствующим контактным площадкам платы, причем для положительного вывода батареи предусмотрены две площадки, используемые в зависимости от ее конструкции. Однако сами эти детали, благодаря большой длине выводов, находятся вне платы. Это позволило уместить устройство в ограниченном объеме корпуса громкоговорителя. С этой же целью оставлены длинными и изогнуты выводы стабилизатора DA1. Переменное напряжение 6 В поступает на разъем Х1 от понижающего трансформатора ТПП-2, также находящегося вне платы.
    Часы с кукушкой

         Кроме основного режима — счета и индикации текущего времени — в устройстве предусмотрены два режима просмотра и изменения различных параметров: "Основные установки” и "Дополнительные установки".
         Вход в режим "Основные установки" и перебор просматриваемых и изменяемых параметров выполняются нажатиями на кнопку SB1. Подлежащий изменению разряд параметра выбирают с помощью кнопки SB2 (он начинает мигать), а каждое нажатие на кнопку SB3 увеличивает цифру в этом разряде на единицу (за 9 следует 0). Во всех случаях, когда значение параметра задается в часах, случайный или преднамеренный ввод значения, превышающего 23, игнорируется, и оно принимается равным 23. Выходят из режиме "Основные установки" нажатием на кнопку SB4 или автоматически по истечении примерно 20 с после последнего нажатия на любую кнопку.
         Первый при входе в режим "Основные установки" параметр — время срабатывания будильника. После второго нажатия на кнопку SB1 устанавливают режим работы будильника. На индикаторе он отображается буквой Р с цифрой: Р1 — будильник срабатывает в заданное время каждые сутки (мигает точка в разряде единиц минут); Р2 — будильник срабатывает в заданное время с понедельника по пятницу (устанавливается по умолчанию, точка в разряде единиц минут включена постоянно); Р3 — будильник срабатывает только в заданный день недели (постоянно включена точка в разряде десятков минут). Включают и выключают будильник нажатиями на кнопку SB4 в основном режиме индикации времени.
         После третьего нажатия на кнопку SB1 выбирают день недели, в который будет срабатывать будильник в режиме Р? На индикатор выводится буква А с номером дня недели (понедельник — А1, воскресенье — А7), по умолчанию — А1.
         После четвертого нажатия на кнопку SB1 включают или выключают "кукушку". F1 на индикаторе означает, что она включена, F0 — выключена.
         После пятого нажатия на кнопку SB1 задают время (в часах) автоматического выключения "кукушки" (по умолчанию — 21 час), а после шестого — время ее автоматического включения (по умолчанию — 10 часов). Если задать одинаковое время включения и выключения, "кукушка” работать не будет.
         После седьмого нажатия на кнопку SB1 на индикаторе устанавливают точное время. При изменении значения любого разряда в этом режиме происходит и обнуление счетчика секунд. Во всех других режимах счет времени не нарушается.
         После восьмого нажатия на кнопку SB1 на индикатор выводится буква Н с цифрой — номером дня недели, которую можно изменить с помощью кнопки SB3. Дальнейшие нажатия на кнопку SB1 вызывают по кругу те же самые режимы.
         Для входа в режим "Дополнительные установки" необходимо отключить прибор от сети и вновь включить его, удерживая кнопку SB1 нажатой. Управление и выход из этого режима не отличаются от используемых в режиме "Основные установки".
         Первой на индикаторе появляется буква L с цифрой, характеризующей степень снижения яркости индикатора. Яркость уменьшается а число раз, на единицу большее этой цифры. По умолчанию установлен режим L1.
         После второго нажатия на кнопку SB1 задают время автоматического включения пониженной яркости (по умолчанию — 22 часа), а после третьего — время его выключения (по умолчанию — 7 чвсов). При задании одинакового времени включения и выключения яркость индикатора будет пониженной асе время.
         Четвертое нажатие на кнопку SB1 выводит не индикатор букву b и переводит устройство в режим установки продолжительности звучания сигнала будильника в минутах (от 1 до 9, по умолчанию — 1). Уместно упомянуть, что включение сигнала будильника имеет приоритет над его отключением. Если, например, задать время включения, совпадающее с текущим, то в момент выхода из этого режима будильник подаст сигнал, продолжительность которого будет равна заданной описанным выше способом. Если же на момент входа в режим установки времени подачи сигнала будильник уже сработал, то при выходе из этого режима звучание продолжится заданное время, даже если время срабатывания было изменено и отличается от текущего. Будильник можно выключить только кнопкой SB4.
         После пятого нажатия на кнопку SB1 корректируют ежечасную поправку, обеспечивающую точный счет времени при работе от сети. Ее значение может находиться в пределах от +127 до -128, каждая единица соответствует изменению длительности часа на 1/256 долю секунды. В отличие от режимов установки всех других параметров нажатие на кнопку SB3 увеличивает поправку на единицу, а нажатие на кнопку SB2 на столько же уменьшает ее.
         Пример. Предположим, при нулевой поправке счетчик времени за неделю (24x7 = 168 час) отстает на 15 с. Необходима ежечасная поправка не 15/168 = 0,089 с или на 0,089x256=22,78 единицы. Принимаем округленное значение 23. Если счетчик не отстает, а спешит, значение поправки будет отрицательным.
         После шестого нажатия на кнопку SB1 задают значение ежечасной поправки при работе счетчика времени от резервного источника питания (по умолчанию — минус 7 единиц). Эта операция ничем не отличается от описанной выше установки значения основной поправки.
         Дальнейшие нажатия на кнопку SB1 приводят к смене по кругу режимов просмотра и изменения перечисленных параметров.
         В программе микроконтроллера предусмотрена обработка некоторых исключительных ситуаций, которые могут возникать при работе устройства Например, после десяти неудачных попыток записать измененное значение ежечасной поправки в энергонезависимую память (EEPROM) микроконтроллера работа таймера TMR1 будет прекращена, а на индикатор выведено сообщение "Еrrоr". При автоматическом (по истечении времени) или с помощью кнопки SB4 выходе из режима установок работа таймера возобновится, о чем засвидетельствует мигание точки в разряде единиц часов, а сообщение на индикаторе станет немного другим — "Е3ог". Теперь можно обычным образом войти в режим "Основных установок" и установить правильные значения часов и минут. Если в течение минуты этого не сделать, счет времени продолжится с нуля часов и нуля минут. Сообщение об ошибке будет выведено и при обработке "случайного", не связанного с таймерами TMR0 и TMR, запроса прерывания.
         Нужно сказать, что описанные аварийные ситуации моделировались при отработке программы, но в реальности ни разу не возникали.
    Материал взят из: Журнала Радио 2008 №8

    В архиве разводка печатной платы, исходный код на ассемблере и прошивка

    timerandkuku.rar [36,61 Kb] (cкачиваний: 353)

    Категория: Часы-Таймеры, PIC16
    « Назад
    Комментарии