Представленное устройство не слишком рентабельно для серийного производства, но представляет собою весьма неплохой пример «плотного» использования микроконтроллера. Идея родилась после того как в автомагнитоле украли морду. Захотелось использовать встроенное радио и микросхему регулировок громкости и тембра TDA7407. К сожалению, оживить радио от Kenwood KDC-2092 не удалось, тогда было решено использовать плату радио-тюнера от компьютера (отпилив ненужное).

1. Радио – управление по 3 проводам (DATA, Clock, Write Enable), плюс вывод моно/стерео (система команд и прочее в PDF от TEA5757H), учитывать надо только то, что для ввода в тюнер надо использовать «реальную частоту» +10,7 МГц.
2. Регулятор громкости и тембра TDA7407D – управление по шине I2C (система команд и прочее в PDF)
3. Термометры DALLAS. Поддерживается до 8 термометров (отобразить показания можно только двух).

Для вывода изображений на графический индикатор используется микросхема FLASH памяти AMD29F010B можно использовать и AT29C512 с вдвое меньшим объемом памяти. Программирование осуществлялось программатором WillemProg.
По адресу 0000-00FF расположены все команды необходимые для работы индикатора. По остальным адресам необходимые изображения.

Был использован графический индикатор Powertip PE12864URT-003-IY1 со встроенным контроллером ST7565. Знаки на экране организованы следующим образом: 128 колонок на 8 страниц ("больших" строк), каждая страница 8 точек в высоту, группа из 8 точек в одной колонке описывается восьмизначным двоичным числом. Итого: 8*128=1024 числа требуется для формирования одного экрана. Все графические изображения, текст, и цифры были нарисованы собственноручно в Adobe PhotoShop 7.0 и «оцифрованы» вручную (тяжелая работа, но, к огромному сожалению, так и не нашел программы способной это сделать), затем превращены в прошивку для микросхемы Flash-памяти.

Программа для микроконтроллера написана на AVR Assembler (в AVR Studio 4.12). И имеет нижеприведенную блочную структуру.

Основной переменной является счетчик нажатия кнопки «Select» (Butt0, прерывание INT0). В зависимости от этого числа программа преступает к выполнению соответствующей подпрограммы.

Управление часами осуществляется при помощи трех кнопок: «Select» и «+»/«-». Кнопкой «Select» выбирают необходимы режим, кнопки +/- меняют соответствующий параметр (Selector12).
Режимы работы устройства следующие (цикл):

1. Часы
2. Регулировка громкости, низких, средних, высоких частот.
3. Фиксированные настройки тюнера (6 шт.), поиск станции. (запоминание новой станции осуществляется в выбранный номер настройки при выходе из этого меню)
4. Установки часов, будильника, яркости свечения индикатора, вкл./выкл. Будильника.
5. Полное отключение дисплея с сохранением работы остальных частей устройства.
6. В режиме часов при нажатии +/- отображаются состояния двух термометров.

То что будильник взведен отображается на экране тонкой полоской под цифрами часов. После срабатывания будильника громкость плавно нарастает. Нажатие кнопки «Select» в это время приводит к выключению радио. Будильник при этом переводится на 7 минут вперед. Через 7 мин он опять включается. Выключить его можно последовательно нажав кнопки: «Select» - «+» - «-» - «Select». На следующий день он опять сработает в тоже время (изначальное, без учета +7 мин, даже если их было несколько). Выключить его можно окончательно только через меню.

Все основные параметры (будильники и константы работы с различными устройствами) хранятся в EEPROM микроконтроллера. Так что выключение питание не вызовет серьезного сбоя. После пропадания питания (RESET) – показания будильника грузятся из EEPROM – а показания часов приравниваются к показаниям будильника, что вызывает срабатывание будильника и радио.
Предусмотрена поддержка работоспособности при отсутствии питания. Микроконтроллер регулярно проверяет напряжение на выводе PB7 (контролируется супервизором питания DD10), если там единица, то все ОК, при обнаружении 0, микроконтроллер переходит в режим работы без индикатора, все периферия отключается. Питание для микроконтроллера берется от батарейки (или аккумулятора). Вариант с использованием батарейки не был опробован автором.

На микросхеме DD7 собрано устройство подавления дребезга кнопок. Сделано это было для максимального уменьшения времени выполнения прерываний INT1,INT2, чтобы не ухудшать точность хода часов. При желании борьбу с дребезгом можно передать микроконтроллеру и убрать DD7.  
Для предотвращения сбоев и экономного использования процессора в течение каждого  секундного цикла работы он примерно 50% времени находится в спящем режиме. Для блокировки/разрешения работы усилителя и микросхем термометров используются ключи (VT2, DD6 соответственно) на которые непрерывно должно подаваться управляющее напряжение. А в спящем режиме все выводы Atmega8515 переводятся в состояние Z. Для устранения этого эффекта используется триггер DD5, который «помнит» состояние соответствующего входа независимо от перехода микроконтроллера в состояние Z.

Продвинутые радио-часы/будильник с термометрами на графическом LCD - схема устройства

И, наконец, фотографии работающего устройства в разных режимах:

Автор: Владислав Шаповалов


Архив для статьи "Продвинутые радио-часы/будильник с термометрами на графическом LCD"
Описание: Файлы прошивок для микроконтроллера и Flash памяти
Размер файла: 16.38 KB Количество загрузок: 1 195 Скачать

Комментарии  

0 #1 GHERUB 03.01.2019 20:08
Хорошая схема.
Вопрос: фьюзы для мк какие устанавливать надо?
Сообщить модератору
+1 #2 AntonChip 05.01.2019 08:47
Цитирую GHERUB:
Хорошая схема.
Вопрос: фьюзы для мк какие устанавливать надо?

Low: 0xED, High: 0xD9
Сообщить модератору
0 #3 Biker 19.06.2020 19:03
Здравствуйте.
Mega8515L можно использовать с этой прошивкой? И фьюзы для 8515L?
СПАСИБО! :-)
Сообщить модератору
0 #4 Biker 19.06.2020 21:44
Вопрос по DD5: скорее всего нужна CD4013(A) для этой цепи т.к. в этой микре есть C1 и C2. Т.е. clock1 и clock2. Используется два триггера?
По DD6: чем заменить? Может полевой тр-р с логическим упр-м.
Спасибо! :-)
Сообщить модератору
0 #5 AntonChip 20.06.2020 07:39
Цитирую Biker:
Здравствуйте.
Mega8515L можно использовать с этой прошивкой? И фьюзы для 8515L?
СПАСИБО! :-)

Приветствую. Можно, фьюзы такие же Low: 0xED, High: 0xD9
Сообщить модератору
0 #6 AntonChip 20.06.2020 07:53
Цитирую Biker:

По DD6: чем заменить? Может полевой тр-р с логическим упр-м.
Спасибо! :-)

Не знаю почему автор использовал твердотельное реле DD6, а не обычный ключ на транзисторе. Аналоги реле DD6: PRAC37S, KAQW212S, AQW212S
Сообщить модератору
0 #7 Biker 21.06.2020 15:27
Здравствуйте AntonChip.
Благодарю за ответы!
Если возможно в посте #1 отредактировать ник на CHERUB, там опечатка.
Спасибо.
Сообщить модератору
0 #8 Biker 10.11.2020 10:18
Здравствуйте!
Вопрос по распайке DD9 и DD10:
-DD9 на "/RES" МК?
-DD10 на "(RB) РВ7" МК и "/RES" ЖКИ?
Спасибо!
Сообщить модератору
0 #9 AntonChip 12.11.2020 12:45
Цитирую Biker:
Здравствуйте!
Вопрос по распайке DD9 и DD10:
-DD9 на "/RES" МК?
-DD10 на "(RB) РВ7" МК и "/RES" ЖКИ?
Спасибо!

Здравствуйте.
DD10(R)-DD1(PB7)-LCD(Res),
DD9(R)-DD1(Res)
Сообщить модератору
0 #10 Biker 17.11.2020 17:55
Здравствуйте AntonChip.
Благодарю за ответ. По сути адресация та же, что и содержится в вопросе.
По DD5: микросхема д.б. типа CD4013A (561ТМ2). Вывод C2 в таком триггере не может быть жёстко на "0". Первый D-триггер работает, т.к. там C1 подтянут на "1". Необходимо УТОЧНЕНИЕ схемы !!!
Спасибо.
Сообщить модератору
0 #11 Biker 17.11.2020 19:25
Предполагаю по DD5: у микросхемы CD4042A вывод "С" вход синхронизации. "P"- вход выбора полярности. Итак, "С" это "С1" на схеме, а "P" это "С2" соответственно. Тогда нужно поправить в схеме обозначения пинов.
Сообщить модератору