Часы с термометром и барометром на микроконтроллере ATmega8

Технические характеристики этого прибора соответствуют параметрам примененной в нем микросхемы часов реального времени (RTC — real time clock) PCF8583 [1], аналогового датчика давления МРХ4115 [2], цифровых датчиков температуры DS1621 [3]. Управление производится с помощью шести кнопок и двух выключателей. Предусмотрены сервисные функции для установки точного времени, выдержки времени таймером и момента срабатывания будильника. ЖКИ прибора снабжен отключаемой подсветкой.

На рис. 1 приведена схема устройства. Его главный компонент — микроконтроллер DD2. Он связан с однострочным 16-символьным ЖКИ HG1, отображающим всю необходимую информацию, микросхемой RTC DD1, датчиком атмосферного давления В1 и через разъем Х1 — с двумя датчиками температуры, подключенными по схеме, показанной на рис. 2.

Вывод РС0 микроконтроллера, к которому подключен выход датчика В1, настроен на работу в качестве входа встроенного в микроконтроллер АЦП. RTC и датчики температуры связаны с микроконтроллером по интерфейсу TWI, аналогичному известному I2C: PC4 — линия SDA, PC5 — линия SCL. У датчика B2 соединены с общим проводом все три адресных входа (А0—А2), у датчика B3 — только два из них, а младший вход А0 соединен с плюсом питания. В результате адреса, по которым микроконтроллер обращается к одинаковым датчикам, отличаются на единицу, что позволяет программно различать их.

Формируемый на выводе РВ5 сигнал срабатывания будильника поступает на электромагнитный звуковой сигнализатор НА1 через усилитель на транзисторе VT1. Кнопки управления SB1—SB5 подключены к порту В микроконтроллера. Нажатием на кнопку SB6 приводят микроконтроллер в исходное состояние. Выключателем SA1 включают и выключают будильник, выключателем SA2 — подсветку индикатора. Подстроечным резистором R6 устанавливают оптимальную контрастность изображения.

Узел питания прибора состоит из мостового выпрямителя VD1 и интегрального стабилизатора DA1 с необходимыми сглаживающими и блокировочными конденсаторами. Напряжение питания аналоговых узлов микроконтроллера подано на него через фильтр L1C14.

Переменное напряжение 9 В поступает от не показанного на схеме трансформатора питания с приблизительно таким напряжением на вторичной обмотке при токе нагрузки 250 мА. Можно применить и источник постоянного напряжения 9…12 В, например, сетевой адаптер от какого-либо прибора. Благодаря наличию диодного моста VD1 полярность подаваемого постоянного напряжения безразлична.

Поскольку микросхема PCF8583 (DD1) не имеет специального вывода для подключения резервного источника питания, литиевая батарея G1 и основной источник питания подключены к ней через развязывающие диоды Шотки VD2 и VD3. Подстроечный конденсатор С7 — регулятор хода часов.

Чертеж печатной платы устройства, разработанной с помощью программы DipTrace, показан на рис. 3. Она предназначена для установки в стандартный корпус BOX-FB04 размерами 130x85x40 мм. Все детали, в том числе резисторы и конденсаторы для поверхностного монтажа, смонтированы на одной стороне платы, как показано на рис. 4.

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

ЖКИ, кнопки и выключатели расположены на передней панели корпуса (для них там сделаны отверстия) и соединены с соответствующими контактными площадками на плате отдельными гибкими проводами. Плоский кабель для присоединения индикатора не применялся. Это позволило упростить печатный монтаж, располагая контактные площадки на плате свободно, не соблюдая порядка расположения выводов индикатора. Разъем для подключения датчиков температуры закреплен на одной из боковых стенок корпуса.

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

В основном режиме работы прибора на табло его ЖКИ поочередно выводятся текущее время, дата и день недели, температура в помещении (показания датчика В2) и вне его (показания датчика ВЗ), атмосферное давление. Продолжительность отображения каждого параметра — 5с.

Нажатием на кнопку SB1 можно перейти из основного режима в режим установки времени, хранящегося в микросхеме RTC (DD1). О переходе в него сигнализирует сообщение «Mode Clock», a отсчет времени часами прекращается. Нажатиями на кнопки SB2 и SB3 выбирают регистр микросхемы. На табло отображаются значение хранящегося в нем параметра и название регистра. Нажимая на кнопки SB4 и SB5, значение, выведенное на табло, можно изменять. Чтобы записать новое значение в регистр, необходимо нажать на кнопку SB1 Запись сопровождается выводом сообщения «Write Data».

Значения часов, минут и секунд, с которых по выходе из режима установки начнется счет времени, записывают в соответствующие регистры в двоично-десятичном формате. Например, десятичному числу 1 соответствует шестнадцатеричное 01, а десятичное 35 совпадает с шестнадцатеричным 35.


Определенные сложности при записи информации в регистры Weekday/ Month и Year/Date создает формат этих регистров. Шестнадцатеричные значения, которые могут быть в них записаны, приведены соответственно в табл. 1 и табл. 2. Например, во вторник 12 июня 2009 г. в регистр Weekday/Month следует записать 26, а в регистр Year/Date — 52.

Перед выходом из режима установки необходимо обязательно занести в регистр Status микросхемы RTC код, задающий режим ее работы. Вот некоторые из возможных шестнадцатеричных значений этого кода:
80 — счет времени остановлен;
0В — счет времени идет, сигналы будильника и таймера запрещены;
0D — счет времени идет, разрешен сигнал будильника;
0Е — счет времени идет, работает таймер.

Более подробно о микросхеме PCF8583 и особенностях ее работы и структуре регистров можно прочитать в ее описании [1].

Нажав на кнопку SB3 в основном режиме работы устройства, можно прекратить смену параметров на табло ЖКИ и увидеть непрерывное изменение текущего времени и установленное время срабатывания будильника. Последовательными нажатиями на кнопку SB4 просматривают значения, записанные в регистры RTC Status, Timer, Alarm control, Alarm timer.

Нажатие на кнопку SB5 переводит устройство в режим настройки таймера с выводом сообщения «Mode Timer». Операции и функции кнопок здесь такие же, как и при установке часов. О пуске таймера одновременным нажатием на кнопки SB4 и SB5 информируют сообщение «Start of timer» и короткий звуковой сигнал. По окончании отсчета заданной выдержки выводится сообщение «ALARM!» и также звучит сигнал. После этого устройство возвращается в основной режим работы.

Учтите, поскольку начало отсчета выдержки не синхронизировано с генерируемыми внутри микросхемы минутными импульсами, ее первая минута получается, как правило, короче 60 с. Этот дефект частично устранен программно: отсчет выдержки фактически начинается, и звуковой сигнал подается не при нажатии на кнопки SB4 и SB5, а с первого после него минутного импульса. Между этими событиями возможна заметная пауза.

Досрочно прекратить отсчет времени таймером можно нажатием на кнопку SB5. В течение 3 с после этого на ЖКИ выводится фактически прошедшее с момента пуска таймера время.

При совпадении заданного времени срабатывания будильника с текущим (при этом может учитываться день недели) звучит сигнал, а на ЖКИ выводится сообщение «ALARM!». Проверяется исправность звукового сигнализатора нажатием на кнопку SB2 в основном режиме работы прибора.

Программа микроконтроллера начинает свою работу с инициализации портов ввода/вывода, затем инициализируются ЖКИ и цифровые датчики температуры. В регистры управления RTC записываются коды, задающие «базовую» конфигурацию.

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

Однотипны и подпрограммы вывода информации на ЖКИ. Двоично-десятичные значения из регистров RTC выводятся без преобразования. Значения температуры предварительно преобразуются в такой же формат подпрограммами HexBCD (целая часть) и XBruchD (дробная часть).

Подпрограмма CalcPress преобразует результат работы АЦП, преобразующего выходное напряжение датчика давления В1 в двоичный код, привычные миллиметры ртутного столба (торы). В начальном фрагменте этой подпрограммы (табл. 3) задан коэффициент преобразования 9150 ($23ВЕ).

Скорее всего, вновь изготовленный прибор будет показывать атмосферное давление, отличающееся от измеренного образцовым барометром, найденного в Интернете или полученного с ближайшей метеостанции. Совпадения можно добиться, изменив коэффициент в подпрограмме CalcPress обратно пропорционально вычисленной по возможно большему числу отсчетов давления относительной погрешности.

Еще один способ откалибровать барометр заключается в записи в подпрограмму CalcPress коэффициента 10000 ($2710) или полном удалении этой подпрограммы вместе с ее вызовом. Постоянный резистор R3 в этом случае следует заменить подстроечным (движок — к входу РСО микроконтроллера) и с его помощью установить нужный масштаб.

Для хранения последнего измеренного значения давления программа использует ячейки ОЗУ микроконтроллера. Подпрограмма Monitor переписывает в них результат измерения, а подпрограмма PressLCD копирует их содержимое в регистры для вывода на ЖКИ.

Подпрограмма установки часов InsClock в начале своей работы вызывает сервисную подпрограмму OutWHCM. Далее она останавливает часы, инициализирует таймер Т1 микроконтроллера и «зацикливается» на метке REP, ожидая одновременного нажатия на кнопки SB4 иSВ5.

Подпрограмма Timer_int, обрабатывающая запросы прерывания от таймера Т1, обслуживает кнопки SB2—SB5 в режиме установки часов. Подпрограмма обработки прерывания от таймера Т2 Timer_lnt2 — кнопки SB2—SB5 в режиме программирования таймера.

Подпрограмма ALARM при выполнении соответствующих условий формирует на выходе РВ5 импульсный сигнал частотой 1000 Гц. В регистре Stime задается его продолжительность. При выходе из подпрограммы ALARM флаг запроса прерывания по сигналу будильника в RTC снимается и вновь устанавливается.

Поскольку запросы прерывания от таймера и от будильника в микросхеме RTC не разделены, определения источника запроса выполняет подпрограмма Check. Общий запрос прерывания накладывает ограничения на установку времени подачи сигнала будильника: в регистре минуты его срабатывания нельзя устанавливать нулевое значение. Для правильного отображения даты и дня недели подпрограмма ReadPCFW изменяет флаг маски чтения регистров 05 и 06 RTC. Для предотвращения «зависания» программы в ее основном цикле предусмотрена очистка регистра управления TWCR модуля TWI микроконтроллера после аналого-цифрового преобразования. Подпрограммы работы с модулем TWI не предусматривают проверку регистра статуса этого интерфейса, поскольку практика показала его безошибочную работу и без такой проверки.

Все подпрограммы снабжены в исходном тексте программы подробными комментариями.
Необходимо отметить, что примененный в приборе «однострочный» ЖКИ WH1601A с точки зрения программиста имеет две строки — левую и правую половины единственной, видимой на табло. Это необходимо учитывать при выводе информации. Вывод всех сообщений на английском языке объясняется тем, что была использована нерусифицированная версия подпрограммы OutText.

Автор использовал среду разработки и отладки программ AVR Studio 4. Программирование микроконтроллера, проверка и отладка устройства производились с помощью отладочного модуля STK500.

Прилагаемые файлы: File1

Н. САЛИМОВ, г. Ревда Свердловской обл.
«Радио» №10 2010г.

ЛИТЕРАТУРА
1. PCF8583 Clock/calendar with 24048-bit RAM. — <www.nxp.com/documents/data_sheet/PCF8583.pdf>.
2. Altimeter/Barometer   Pressure   Sensor On-Chip   Signal   Conditioned,   Temperature Compensated and Calibrated.   — <www.cache.freescale.com/files/sensors/doc/data_sheet/MPX4115.pdf?fsrch=1 >.
3. DS1621 Digital      Thermometer      and Thermostat. — <www.datasheets.maxim-ic.com/en/ds/DS1621.pdf>.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *