Реле времени на микроконтроллере AVR ATtiny2313 с индикатором фирмы Data Vision
Схема и описание самодельного реле времени на AVR микроконтроллере ATtiny2313 с индикатором фирмы Data Vision. Реле времени (таймеры), пожалуй, одна из самых массовых разработок конструкторов электронных техники.
Автор предлагает вариант 4-х канального реле времени, разработанного на базе микроконтроллера семейства AVR и жидкокристаллического индикатора фирмы Data Vision.
Принципиальная схема
Принципиальная схема реле времени (далее устройства) приведена на рис. 1, его интерфейс управления приведен на рис. 2.
Рис.1. Принципиальная схема реле времени на микроконтроллере AVR с индикатором.
Устройство разработано на базе микроконтроллера AVR ATTINY2313-20PU и двухстрочного, знакосинтезирующего жидкокристаллического индикатора DV-16232 FBLY- H/R фирмы Data Vision с встроенным микроконтроллером.
ЖК-индикаторы, как функциональные узлы отображения информации очень информативны и позволяют оператору контролировать несколько десятков параметров одновременно.
К достоинствам подобных индикаторов следует отнести:
- возможность подключения к восьми или четырех разрядному микроконтроллеру;
- встроенный знакогенератор позволяет отображать 192 типа букв, цифр, символов и специальных знаков;
- другие символы можно получить с помощью генератора символов;
- программно доступные команды: очистка индикатора, сдвиг изображения, курсор в начало, сдвиг курсора. Вкл /Выкл курсора, чтение/запись данных индикатора, мигание символа и др;
- компактная конструкция позволяет встраивать индикатор в любые устройства и приборы;
- единственный источник питания +5В,
- низкое энергопотребление;
- широкий диапазон рабочих температур;
- встроенные фонты (англ. или англ /русск.);
- встроенный микроконтроллер (HD44780, KS0076 или аналоги).
В устройстве предусмотрены следующие функции - счет реального времени, индикации текущего времени в 24-часовом формате в режиме часы-минуты-секунды, установка текущего времени и его корректировка; установка четырех интервалов времени, в которых нагрузки, подключенные к соединителю Х1 управляются в соответствии с заранее запрограммированным алгоритмом.
В устройстве имеется четыре независимых канала №1 - №4. Соответственно, количество подключаемых(управляемых) нагрузок -четыре.
Сигнал управления по каждому каналу (лог 1 или лог 0) определяется в каждом конкретном случае, конкретным типом силового ключа (транзистор, симистор, твердотельное реле и пр.) или даже конкретной нагрузкой.
Поэтому условно примем, что при инициализации в выходной регистр во все каналы загружается лог.1. А далее пользователь устанавливает нужную конфигурацию.
Окончание любого интервала является началом следующего. Границы интервалов в рамках 24-часового формата так же программируются.
Проще говоря, в устройстве можно запрограммировать 3 будильника в момент срабатывания которых, включаются (или выключаются) четыре нагрузки, подключенные к устройству.
Время включения каждого будильника может быть установлено любое, в 24-часовом формате в режиме часы-минуты. То есть можно в данном формате установить любое время каждого будильника или границы трех интервалов. Например, интервал №1 00:00 - 6:00; интервал №2 6:00 - 12:00; интервал №3 12:00-24:00.
На дисплее ЖК-индикатора HG1 можно одновременно наблюдать текущее время и границы одного из трех интервалов (начало интервала и его окончание), а так же состояние четырех нагрузок (лог. 1 или лог 0.) в данном интервале.
Если текущее время совпало с началом какого-либо интервала - на 60 с включается звуковая сигнализация, с частотой повторения 2 Гц. и в регистр DD2 загружается байт управления нагрузками для данного интервала времени.
Устройство может быть применено в тех случаях когда необходимо получить эффект присутствия - включать и выключать электроприборы в отсутствии хозяев в квартире, или просто включить бытовой электроприбор на какой-то определенный интервал времени, а так же для управления электроотопительными и электроосветительными приборами.
В интерфейс устройства (рис. 2) входит клавиатура (кнопки S1...S5), световая полоса HL1, и ЖК-индикатор HG1.
Рис. 2. Интерфейс управления реле времени.
Три программируемых интервалов фактически определяют три режима работы “интервал 1”, "интервал 2", “интервал 3". Управление осуществляется с помощью клавиатуры, кнопки которой (по схеме S1. . .S5), имеют следующее назначение:
- S1 (Р) - выбор режима работы устройства в замкнутом цикле (“интервал 1”, “ интервал 2 ", “ интервал 3 ") после подачи питания устройство сразу переходит в режим “ интервал 1 ”, каждое нажатие данной кнопки переводит устройство в следующий режим, режимы работ переключаются в порядке возрастания, после “интервал 3”. следует “интервал 1 ";
- S2 ( ^) - увеличение на единицу (инкремент) значение каждого разряда при установки текущего времени часов и временных интервалов. а так же принудительное выключение звукового и светового сигнала в начале каждого интервала. Инкремент происходит в разрядах временных значений, в разрядах отображения состояния нагрузок происходит изменения состояния -"лог. Г - “лог. О" и наоборот;
- 53 (< ) - выбор разряда, при установки значений во всех вышеуказанных режимах, у выбранного разряда устанавливается курсор, при каждом нажатии на данную кнопку курсор сдвигается справа налево на один разряд;
- 54 (>) - выбор разряда, при установки значений, во всех вышеуказанных режимах, у выбранного разряда устанавливается курсор, при каждом нажатии на данную кнопку курсор сдвигается слева направо на один разряд
- S (Общ выкл) - экстренное выключение всех нагрузок подключенных к устройству, установка сигналов уровня лог. 1 во всех каналах.
В каждой строке ЖК-индикатора HG1 отображается 16 символов. Разряды дисплея индикатора HG1 имеют следующее назначение (слева направо по рис. 2). Номера разрядов на рис. 2 сверху отмечены цифрами.
Первая строка:
- 1 разряд отображает "десятки часов" текущего времени,
- 2 разряд отображает "единицы часов" текущего времени;
- 3 разряд отображает символ “ : " с периодом включения 1 сек. во всех режимах, во время корректировки или установки текущего времени, символ “ : ” включен постоянно;
- 4 разряд отображает "десятки минут” текущего времени;
- 5 разряд отображает "единицы минут” текущего времени;
- 6 разряд отображает символ " : ” с периодом включения 1 сек. во всех режимах , во время корректировки или установки текущего времени, символ “ : ” включен постоянно;
- 7 разряд отображает "десятки секунд" текущего времени;
- 8 разряд отображает "единицы секунд" текущего времени;
- 9, 10, 11, 12 разряды отображает пробел (space);
- 13... 16 разряды отображает состояние нагрузок 1...4 в текущем выбранном режиме, если разряд отображает "Г - соответствующая нагрузка включена (или будет включена, когда текущее время, будет в границах отображаемого интервала), если разряд отображает "0” - соответствующая нагрузка отключена;
Вторая строка:
- 1 разряд отображает текущий режим работы устройства, если устройство работает в режиме “интервал Г в данном разряде индицируется “1", "интервал 2" -"2"; "интервал 3” - “3”;
- 2 разряд отображает пробел (space);
- 3.. .7 разряды отображают в часах-минутах (через символ “:”) начало интервала в отображаемом режиме работы устройства;
- 8 разряд отображает пробел (space);
- 9.. . 13 разряды отображают в часах-минутах (через символ ":”) конец интервала в отображаемом режиме работы устройства,
- 14 разряд отображает пробел (space);
- 15 разряд отображает флаг RAZ. разрешающий включение нагрузок во всех запрограммированных интервалах.
- 16 разряд отображает курсор (во всех режимах сразу после подачи напряжения питания).
После подачи питания устройство переходит в режим "интервал 1” (в первом разряде второй строки дисплея индицируется “1”). Только в данном режиме устанавливается или корректируется текущее время.
Для этого необходимо кнопками S3 или S4, подвести курсор к изменяемым разрядам текущего времени и кнопкой S2 изменить значение разряда. Для установки начального и конечного значений интервалов необходимо проделать точно таки же операции. Текущее время и флаг RAZ отображается во всех режимах.
Для программирования подключаемых нагрузок, необходимо подвести курсор к нужному разряду и кнопкой S2 изменить его значение. Каждое нажатие кнопки S2 в данном случае инвертирует предыдущее состояние разряда, было "О" - будет “Г и наоборот. После подачи питания при инициализации во все разряды 10.15 первой строки заносится "Г (нагрузки отключены).
Для разрешения управления нагрузками необходимо флаг RAZ (отображаемый в 15 разряде второй строки на дисплее индикатора) установить в единицу.
Для этого нужно подвести кнопками S3 или S4 курсор к данному разряду и кнопкой S2 установить единицу. Каждое нажатие кнопки S2 в данном случае, инвертирует предыдущее состояние данного разряда. Изменения режима работы (перебор программируемых интервалов времени), как уже упоминалось выше, осуществляется кнопкой S1
Таким образом, устанавливая показания каждого разряда индикатора, можно оперативно выставить требуемое текущее время, границы интервалов и каналы управления нагрузками в данных интервалов.
Изменить флаг RAZ можно только в режиме "интервал 1". Границы интервалов можно перепрограммировать В приведенном примере на рис 2 дисплей индикатора отображает: текущее время 12 часов.
43 минуты 56 секунд, в режиме работы "интервал 3" запрограммировано включение нагрузок 3, 4. Но нагрузки включены не будут, так как флаг RAZ не установлен. Алгоритм управления устройства получился достаточно простым и понятным и удобным.
Рассмотрим основные, функциональные узлы принципиальной схемы. Основой устройства служит микроконтроллер DD1. рабочая частота которого задается генератором с внешним резонатором ZQ1 на 10 МГц. Пьезоэлектрический излучатель ВА1 включается с вывода 7 микроконтроллера DD3.
Сигнал с выхода 3 микроконтроллера DD3 через резистор R4 периодически (с периодом 1 сек. включает световую полосу HL1. С порта РВ микроконтроллер DD3 управляет ЖК-индика-тором HG1 и клавиатурой (кнопки S1...S5) через регистор DD1. Для функционирования клавиатуры так же задействован вывод 6 микроконтроллера DD3.
Резистор R4 - токоограничительный, для световой полосы HL1. Состояние выходных сигналов определяет регистр DD2. Питающее напряжение поступает на плату с соединителя Х4 Конденсаторы С4...С6 фильтрует пульсации в цепи питания +5 В.
ЖК-индикатор работает в режиме 4-х разрядной шины данных. Для передачи данных в ЖК-индикатор HG1 задействована старшая тетрада байта пересылаемого микроконтроллером в порт Р1. С вывода 8 микроконтроллера DD1 поступает сигнал, информирующий индикатор о типе передаваемых данных (RS=1- данные, RS=0 - сигнал).
С вывода 9 микроконтроллера DD3 поступает строб-сигнал, по перепаду которого из 1 в 0 осуществляется запись данных в индикатор. Читать данные из индикатора не будем, поэтому вывод 5 (R/W) подключаем к общему проводнику. С переменного резистора R8 на вывод 3 индикатора поступает напряжение, уровень которого регулирует контраст формируемого индикатором изображения.
В двухстрочном дисплее курсор автоматически сдвигается с первой на вторую строку, после достижения сорокового знакоместа. Если дисплей содержит в строке 16 символов, то для перехода на вторую строку необходимо снова устанавливать адрес ячейки видеопамяти индикатора (DD RAM). Система команд индикатора HG1 приведена в табл 1.
Автор не будет приводить подробное описание инструкций, а так же таблицу знакогенератора индикатора (таблицу фонтов). Эту информацию можно найти в интернете, или в каталогах фирмы-производителя.
Следует отметить, что подобные индикаторы со встроенным микроконтроллером - очень гибкие изделия, позволяющий оптимизировать схемотехнический узел: базовый микроконтроллер - индикатор, и организовать различные режимы ввода в них информации. А вывод информации из базового микроконтроллера в индикатор легко оформить в виде процедуры. Как видно из схемы для подключения индикатора задействовано шесть линий порта Р1.).
Коротко о программе. Программное обеспечение микроконтроллера полностью обеспечивает реализацию алгоритма работы электронных часов. Задача "часовой части" программы - формирование точных временных интервалов длительностью 1 с, решена с помощью прерываний от таймера Т/С1 и счетчика на регистре R25 (sek1).
Счетчик на регистр R25, подсчитывает количество прерывании Когда количество прерываний станет равным определенному значению, то текущее время увеличивается на секунду.
Таблица 1
Инструкция | Код | Время исполнения |
|||||||||
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | ||
Очистка дисплея | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 82мкс-1.64 мс | |
Возврат в начало | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | * | 40мкс-1,64 мс |
Установка режима ввода | 0 | 0 | 0 | 0 | 0 | С | 0 | 1 | I/D) | S | 40 мкс |
Дисплей включить/выключить |
0 | 0 | 0 | 0 | 0 | 0 | 1 | п | С | B | 40 мкс |
Сдвиг курсора и дисплея | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | 40 мкс | ||
Установка функций | 0 | 0 | 0 | 0 | 1 | DL | N | F | * | * | 40 мкс |
Установка адреса GG RAM | 0 | 0 | 0 | 1 | Аса | 40 мкс | |||||
0 | 0 | 1 | Acq | 40 мкс | |||||||
Чтение флага BF и счетчика АС |
0 | 1 | BF | АС | 1 мкс | ||||||
Запись данных GG или DD RAM |
1 | 0 | Записываемые данные | 40 мкс | |||||||
Чтение данных GG или DD RAM |
1 | 1 | Читаемые данные | 40 мкс | |||||||
В памяти данных микроконтроллера с адреса $2 по $F. организован буфер отображения для вывода информации на дисплей индикатора.
Адресное пространство память данных контроллера разбито на следующие функциональные группы.
- $2 $7 - адреса, где хранится текущее время в минутах и в секундах (регистры R2...R7). Эти адреса выводятся на индикатор во всех режимах $80 .$83 - адреса, где хранится в часах и в минутах начало первого интервала (или окончание третьего интервала). Эти адреса выводятся на индикатор в режимах "интервал Г “интервал 3".
- $84 $87 - адреса, где хранится в часах и в минутах начало второго интервала. Эти адреса выводятся на индикатор в режимах "интервал Г "интервал 2”.
- $88. $8В - адреса, где хранится в часах и в минутах начало третьего интервала. Эти адреса выводятся на индикатор в режиме "интервал 2” “интервал 3”.
Сразу после подачи питания на выводе 1 микроконтроллера DD1 через RC-цепь (резистор R2. конденсатор C3) формируется сигнал системного аппаратного сброса микроконтроллера DD3. Дальше идет инициализация программы, в которой настраивается индикатор HG1.
При этом происходит очистка его буфера, разрешается отображение курсора Для уменьшения числа линий ввода, требуемых для записи информации в индикатор, размер шины устанавливается равным 4 битам В регистр DD2 записываются сигналы уровня лог. “Г (нагрузки выкл ). Сразу после инициализации индикатора HG1 на нем индицируется следующая информация:
Рис. 0. Инициализации индикатора HG1.
Далее идет счет текущего времени и разрешается работа устройства по приведенному выше алгоритму Каждый байт из функциональной группы буфера отображения. в подпрограмме обработки прерывания таймера выводится в порт РВ микроконтроллера DD3.
Номер группы или режим работы записан в регистре R16 (regim). В процессе обработке подпрограммы прерывания происходит опрос клавиатуры. Старшая тетрада выводимого при этом в регистр DD1 байта для клавиатуры представляет собой код "бегущий ноль".
После записи данного байта в регистр DD1, микроконтроллер DD3 анализирует сигнал на входе 6 (PD2) В рамках вышеуказанной подпрограммы, при любой нажатой кнопки на входе 6 микроконтроллера присутствует лог 0. Таким образом, каждая кнопка клавиатуры "привязана" к “своему” биту в старшей тетраде байта данных для клавиатуры
Нажатием кнопки S1 инкрементируется регистр R16, и тем самым задается один из вышеуказанных девяти режимов работ. На регистре R21 (KURSOR) реализован счетчик. который определяет сдвиг курсора на дисплее индикатора HG1 в этой же подпрограмме. Нажатием на кнопку S3 счетчик инкрементируется, курсор сдвигается на дисплее индикатора на разряд влево.
Нажатием на кнопку S4 счетчик декрементируется, курсор сдвигается на дисплее индикатора на разряд вправо. При нажатии на кнопку S2 устанавливается флаг, разрешающий инкрементировать разряд, выбранный кнопками S2, S3.
В основной программе происходит счет текущего времени, установка времени включения будильников, сравнение текущего времени с временами будильников. включение световых и звуковых сигналов, задание значений текущего времени, будильников и байта нагрузок.
Разработанная программа на ассемблере занимает порядка 2 Кбайт памяти программ микроконтроллера DD3, нетрудно заметить, что его аппаратная часть и память программ использованы почти полностью.
Детали
В устройстве использованы резисторы С2-ЗЗН-0.125, подойдут любые другие с такой же мощностью рассеивания и погрешностью 5 %. Резистор R3 типа СП5-2ВА Подойдет любой другой такого же номинала.
Конденсаторы С7 типа К50-35 Остальные конденсаторы типа К10-17 Движковый переключатель SB1 для отключения подсветки индикатора расположен на печатной плате устройства Конденсаторы С4 С6 расположены у корпусов микросхем DD1...DD3 и между цепью +5V и общим проводником.
Световая полоса HL1 - KB-2300EW красного цвета. Можно подобрать любую другую, или заменить ее светодиодом. В устройстве нет никаких настроек и регулировок, кроме регулировки контрастности индикатора HG1 переменным резистором R3 и если монтаж выполнен правильно, то оно начинает работать сразу после подачи на него напряжения питания. Движком переменного резистора R3 выставляется приемлемый контраст изображения индикатора HG1.
Программа и прошивка для МК ATtiny2313 - Скачать.
Шишкин С. РК-04-2019.
Schischckin.sergei2014@yandex.ru.
Литература:
- Шишкин С. Часы-термометр. - Схемотехника. 2002 № 9 с. 40 - 43.
- Вакуленко А. Простые часы-будильник на PIC16F84. - Радио. 2004 № 3 с. 29 - 31.