Автор: Шишкин Сергей
Представляемые часы на микроконтроллере AT89C4051 предназначены для контроля времени в шести часовых поясах. Кроме того, в устройстве имеется функция измерения температуры.
Представляемые часы (далее устройство) на микроконтроллере АТ89С4051 для контроля времени в шести часовых поясах включают в себя семь составных частей: плату клавиатуры и шесть электронных часов № 1…№ 6. Электронные часы № 1…№ 6 идентичны по схеме, конструкции и программному обеспечению. Принципиальная схема электронных часов № 1 (далее часов) представлена на рис. 1.
Принципиальная схема платы клавиатуры представлена на рис. 2.
Интуитивно понятный интерфейс устройства приведён на рис. 3.
Позиционные обозначения элементов интерфейса: SA1, S1…S5, HG1…HG6, HL1, HL2 на рис. 3 приведены условно. Они показаны для понимания работы устройства в целом и совпадают с позиционными обозначениями, приведёнными на рис. 1 и 2. Цифровое табло устройства содержит шесть строк. Каждая строка содержит шесть семисегментных индикаторов и две световые полосы. Элементы строки № 1 (HG1…HG6 и световые полосы HL1, HL2) (маркировка строки – МИНСК) установлены на часах № 1. Элементы строки № 2 (маркировка МОСКВА) установлены на часах № 2 и т.д. Соединитель Х1 часов № 1 подключается к соединителю Х2 платы клавиатуры (рис. 2). Соединитель Х1 часов № 2 подключается к соединителю Х3 платы клавиатуры и т.д. Соответственно, соединитель Х1 часов № 6 подключается к соединителю Х7 платы клавиатуры.
Галетный переключатель SА1 и кнопки S1…S5 установлены на плате клавиатуры (рис. 2). SA1 имеет шесть положений (1…6) и шесть направлений и обеспечивает поочередное подключение всей клавиатуры (кнопок S1…S5) к часам № 1…№ 6. Если он установлен в положение «1», то кнопками S1…S5 можно задать параметры для часов № 1. То есть изменить отображаемые значения на индикаторах строки № 1. Если SA1 установлен в положение «2», то кнопками S1…S5 можно задать параметры для часов № 2, то есть изменить отображаемые значения на индикаторах строки № 2 и т.д. На рис. 3 переключатель SA1 установлен в положение «4». Это значит, что кнопками S1…S5 можно задать параметры для часов № 4. То есть изменить отображаемые значения на индикаторах строки № 4.
Рассмотрим работу часов № 1. Они выполнены на базе микроконтроллера фирмы Atmel AT89C4051-24PI и цифровых датчиков температуры DS18S20. В часах два канала измерения температуры, собранных на цифровых датчиках DD3 и DD4, позволяющих контролировать температуру в двух различных точках, например, в комнате и на улице. Погрешность измерения температуры определяется датчиками и составляет порядка ±0,5°С. Десятые доли градуса контролировать не будем, т.е. просто их отбросим. Алгоритм работы с DS18S20 при измерении температуры следующий:
- посылается импульс сброса и принимается ответ термометра;
- посылается команда Skip ROM [CCH];
- посылается команда Convert T [44H];
- формируется задержка минимум 750 мс;
- посылается импульс сброса и принимается ответ термометра;
- посылается команда Skip ROM [CCH];
- посылается команда Read Scratchpad [CCH];
- читаются данные из промежуточного ОЗУ (8 байт) и CRC (контрольная сумма);
- проверяется CRC и, если данные считаны верно, вычисляется температура.
Более подробная информация о работе, в том числе о временны́х интервалах сигналов обмена DS18S20, приведена в [1].
Предусмотрены следующие функции по измерению времени: счёт реального времени, индикация текущего времени в 24-часовом формате с индикацией часов, минут и секунд; установка текущего времени и его корректировка; установка времени включения двух будильников, а также возможность их перепрограммирования. Предусмотрена подача короткого (длительностью 1 с) звукового бип-сигнала в начале каждого часа и включение на 10 с звуковой сигнализации с частотой повторения 1 Гц сразу после подачи напряжения питания на устройство. Если текущее время совпало с установленным временем включения будильника, на 10 с включается звуковая и световая сигнализация с частотой повторения 1 Гц.
Кнопки клавиатуры имеют следующее назначение:
- S1 (Р) – выбор режима работы часов («часы1», «часы2», «температура1», «температура2», «будильник1», «будильник2»), каждое нажатие данной кнопки переводит устройство в следующий режим в замкнутом цикле;
- S2 (Δ) – увеличение на единицу значения каждого разряда при установке времени часов в режиме «часы2», а также при установке времени включения будильника в режиме «будильник1», «будильник2», выключение звукового и светового сигналов при включении будильников;
- S3 (В) – выбор разряда при установке текущего значения времени в режиме «часы2» и установке времени срабатывания будильника в режимах «будильник1», «будильник2», в выбранном разряде включается точка h;
- S4 (Н1) – кнопка включения/выключения нагрузки, подключённой к соединителю Х2 (нагрузка № 1);
- S5 (Н2) – кнопка включения/выключения нагрузки, подключённой к соединителю Х3 (нагрузка № 2).
Разряды индикации интерфейса имеют следующее назначение (справа налево по рис. 1):
- первый разряд (индикатор НG6) отображает цифру 1 в режиме «часы1», 2 в режиме «часы2», 3 в режиме «будильник1», 4 в режиме «будильник2», символ °С в режимах «температура1», «температура2»;
- второй разряд (индикатор НG5) отображает единицы секунд в режимах «часы1», единицы минут в режимах «часы2», «будильник1», «будильник2», единицы градусов в режимах «температура1», «температура2»;
- третий разряд (индикатор НG4) отображает десятки секунд в режимах «часы1», десятки минут в режиме «часы2», «будильник1», «будильник2», десятки градусов в режимах «температура1», «температура2»;
- четвёртый разряд (индикатор НG3) отображает сегмент g с периодом включения 1 с в режиме «часы1» и «часы2», в режимах «будильник1», «будильник2» сегмент g гасится, в режимах «температура1» и «температура2» при положительных температурах сегмент g погашен, при отрицательных температурах сегмент g постоянно включён, формируя знак «–»;
- пятый разряд (индикатор НG2) отображает единицы минут в режимах «часы1» и единицы часов в режимах «часы2», «будильник1», «будильник2», в режимах «температура1» и «температура2» разряд отображает сотни градусов, если же температура меньше 100°С, разряд гасится;
- шестой разряд (индикатор НG1) отображает десятки минут в режимах «часы1» и десятки часов в режимах «часы2», «будильник1», «будильник2», цифру 1 в режиме «температура1» и цифру 2 в режиме «температура2».
То есть в режиме «часы1» устройство работает в режиме минуты–секунды, а в режиме «часы2» устройство работает в режиме часы–минуты.
Сразу после подачи питания устройство переходит в режим работы «часы1», разрешается отсчёт текущего времени, во все разряды порта Р3 микроконтроллера DD2 записывается лог. 1. Реле DA1, DA2 закрыты, нагрузки отключены.
При установке времени в режиме «часы2» запрещается отсчёт текущего времени. В режиме «будильник1», «будильник2» отсчёт текущего времени не запрещается. После установки времени будильника (закончен перебор разрядов кнопкой S1 (В) в режиме «будильник1») зажигается световая полоса HL1. Горящая световая полоса HL1 сигнализирует о том, что установленное время записано в память микроконтроллера. При совпадении текущего времени с установленным временем будильника на 10 с включается прерывистая звуковая ВА1 и световая полоса HL1 – сигнализация с интервалами включения и выключения 0,5 с. После выключения сигнализации световая полоса HL1 гаснет. Аналогичным образом работает будильник № 2, где задействована световая полоса HL2. Включённая световая полоса HL2 говорит о том, что время включения будильника № 2 записано в память. Время будильников можно перепрограммировать.
Например, в режиме «часы2» при первом нажатии на кнопку S3 для установки нужного значения выбирается разряд «единицы минут» (точка h включена у индикатора HG5). Значение разряда устанавливается кнопкой S2. При следующем нажатии на S3 выбирается разряд «десятки минут» (индикатор HG4) и т.д. После установки значения разряда «десятки часов» (индикатор HG1) и при нажатии на S3 разрешается счёт времени, точка в данном разряде гаснет.
Пусть галетный переключатель SA1 на плате клавиатуры установлен в положение «1». Тогда кнопки S1…S5 подключены к часам № 1. Рассмотрим работу устройства в целом. Основой часов № 1 служит микроконтроллер DD2, рабочая частота которого задаётся генератором с внешним резонатором ZQ1 на 10 МГц. Пьезоэлектрический излучатель ВА1 включается с вывода 15 регистра DD1. Сигнал с выхода 7 микроконтроллера через резистор R19 периодически (с периодом 1 с включает сегмент g индикатора HG3 в режимах «часы1», «часы2». Для опроса клавиатуры задействован вывод 8 микроконтроллера DD2. Резисторы 20, R21 – токоограничительные для световых полос HL1 и HL2. Канал управления нагрузкой № 1 собран на твердотельном реле DA1. Нагрузка подключается к соединителю Х2. Реле DA1 включается с вывода 2 микроконтроллера. Канал управления нагрузкой № 2 собран на твердотельном реле DA2, которое включается с вывода 3 микроконтроллера. Динамическая индикация собрана на регистре DD1; транзисторах VT1…VT5; цифровых семисегментных индикаторах HG1…HG6. Коды для включения индикаторов HG1…HG6 при функционировании динамической индикации поступают на порт P1 микроконтроллера DD2. Цифровая часть принципиальной схемы устройства гальванически развязана от сети. Питающее напряжение поступает на плату с соединителя Х1. Конденсаторы С2…С4 фильтруют пульсации в цепи питания +5 В.
Программное обеспечение микроконтроллера DD2 полностью обеспечивает реализацию алгоритма работы электронных часов. Основная задача «часовой части» программы – формирование точных временны́х интервалов длительностью 1 с – решена с помощью прерываний от таймера TF0 и счётчиков на регистрах R4 и R5. Таймер TF0 формирует запрос на прерывание через каждые 80 мкс. Счётчики на данных регистрах подсчитывают количество прерываний, и как только количество прерываний станет равно определённому числу, устанавливается флаг, по которому в основной программе инкрементируется ячейка памяти микроконтроллера, где хранятся единицы секунд. При вышеуказанных параметрах таймера и счётчика реальное время устройства отстаёт за один час на 1 с. Для компенсации этой ошибки корректировка текущего времени происходит каждый час. Счётчик времени на регистре R4 формирует временны́е интервалы, необходимые для отображения разрядов в динамической индикации устройства. Сразу после подачи питания на выводе 1 микроконтроллера DD1 через RC-цепь (резистор R5, конденсатор С1) формируется сигнал системного аппаратного сброса микроконтроллера DD2. Дальше идёт инициализация программы, в которой задаются параметры работы динамической индикации. Далее идёт счёт текущего времени и разрешается работа устройства по приведённому выше алгоритму.
Коротко о программе. Программа состоит из трёх основных частей: процедуры инициализации, основной программы, работающей в замкнутом цикле, и подпрограммы обработки прерывания от таймера TF0. В основной программе происходит счёт текущего времени, коррекция текущего времени, установка времени включения будильников, сравнение текущего времени с временами будильников, включение световых и звуковых сигналов. В памяти данных микроконтроллера с адреса 2ВН по 48Н организован буфер отображения для динамической индикации. По своему функциональному назначению адресное пространство данного буфера можно условно разбить на пять функциональных групп:
- 2ВН…2FH – адреса, где хранится текущее время в минутах и секундах. Эти адреса выводятся на индикацию в режиме «часы1»;
- 30Н…34Н – адреса, где хранится текущее время в часах и минутах. Эти адреса выводятся на индикацию в режиме «часы2»;
- 35Н…39Н – адреса, где хранится значение температуры 1, они выводятся на индикацию в режиме «температура1»;
- 3АН…3ЕН – адреса, где хранится значение температуры 2, они выводятся на индикацию в режиме «температура2»;
- 3FН…43Н – адреса, где хранится время включения будильника № 1. Эти адреса выводятся на индикацию в режиме «будильник1».
- 44Н…48Н – адреса, где хранится время включения будильника № 2. Эти адреса выводятся на индикацию в режиме «будильник2».
Данные адреса загружаются в регистр R0. При каждом обращении к подпрограмме обработки прерывания регистры R0 и R1 инкрементируется. При инициализации в R0 загружается адрес 2BH (режим «часы1»), а в R1 число 1. В памяти данных в ячейке с адресом 20Н находится байт, который управляет разрядами динамической индикации и внешними исполнительными устройствами: пьезоэлектрическим излучателем ВА1 и световыми полосами НL1 и HL2. Данный байт записывается в регистр DD1 сразу после записи перекодированного байта из функциональной группы в порт Р1 микроконтроллера. Данный байт представляет собой код «бегущий нуль» для включения знакомест (разрядов) динамической индикации. Цикл для динамической индикации – порядка 3,328 мс.
Сразу после подачи питания при инициализации во все разряды порта Р3 микроконтроллера DD2 записывается лог. 1. Реле DA1, DA2 закрыты, нагрузки отключены. Каналы управления нагрузками № 1 (реле DA1) и № 2 (реле DA2) работают совершенно одинаково. Рассмотрим работу канала № 1. При каждом нажатии на кнопку S4 состояние вывода 2 микроконтроллера DD2 инвертируется, соответственно нагрузка включается или выключается. Состояние вывода 2 микроконтроллера DD2 также инвертируется при совпадении текущего времени с установленным временем в режиме «будильник1». Так, если необходимо включение нагрузки при совпадении текущего времени с установленным временем в режиме «будильник1», перед установкой времени включения будильника нужно нагрузку отключить кнопкой S4. И наоборот, если необходимо отключение нагрузки при совпадении текущего времени с установленным временем в режиме «будильник1», перед установкой времени включения будильника нужно нагрузку включить кнопкой S4. Совершенно аналогичным образом работает канал управления нагрузкой № 2, который привязан к кнопке S5 и к установленному времени в режиме «будильник2».
Для индикации символа «°С» необходимо развернуть индикатор HG6 «вверх ногами», в результате для чисел и символов в порт Р1 микроконтроллера нужно записывать код для перевёрнутого индикатора, отличный от кода для индикаторов HG1, HG2, HG4, HG5. Код каждой цифры и символа для перевёрнутого семисегментного индикатора, так же как и для других, записан в программе.
В подпрограмму обработки прерывания от таймера TF0 введены процедуры для динамической индикации и опроса цифровых датчиков температуры. Как уже упоминалось выше, для DS18S20 после команды Convert T [44H] (команда запускает процесс измерения датчиком температуры) необходима задержка минимум 750 мс. В программе использована задержка в 1 с (так как такая задержка уже есть в подпрограмме обработки прерывания таймера TF0). Следует отметить, что процедура одна для двух датчиков. Все команды выполняются одновременно для двух датчиков температуры, кроме чтения данных из промежуточного ОЗУ датчиков. В зависимости от того, в каком режиме работы находится устройство («температура1» или «температура2»), данные считываются соответственно из ОЗУ датчика DD3 или DD4. На рис. 4 приведена фотография интерфейса электронных часов № 1.
На рис. 4 часы находятся в режиме «будильник1». Точка h включена у третьего разряда (индикатор НG4).
В устройстве использованы резисторы С2-33Н-0.125, подойдут любые другие с такой же мощностью рассеивания и погрешностью 5%. Конденсаторы С1, С2 типа К50-35, С3, С4 типа К10-17. В дисплее устройства целесообразно выделить разряд, индицирующий режим работы устройства (индикатор HG6) на фоне остальных разрядов интерфейса. Поэтому для данного разряда выбран семисегментный индикатор красного цвета HDSP-F001 (подойдёт HDSP-F151), индикаторы HG1…HG5 зелёного цвета HDSP-F501. Световые полосы HL1, HL2 типа КВ-2300EW красного цвета. Нагрузки, как уже отмечалось выше, подключаются к устройству через соединители (вилки) Х2, Х3 типа МРW-2 (ответная часть – розетки MHU-2). Вставки плавкие FU1, FU2 типа ВП2-1 5 А 250 В. Номинальное значение тока вставок плавких (предохранителей) определяется значением тока в нагрузках, подключаемых к устройству.
В устройстве нет никаких настроек и регулировок, и если монтаж выполнен правильно, оно начинает работать сразу после подачи на него напряжения питания. При проверке каналов управления нагрузками № 1 и № 2 первое включение каждого из каналов лучше сделать при небольшой нагрузке, например, с лампой накаливания мощностью 40…60 Вт.
Литература
© СТА-ПРЕСС, 2025
Статья была опубликована в СЭ 9/2025
Больше интересного – на медиапортале https://www.cta.ru/