РадиоКот :: Глупые часы с календарем
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Бытовая техника >

Теги статьи: ЧасыКалендарьLCDДобавить тег

Глупые часы с календарем

Автор: GoldenAndy
Опубликовано 24.12.2018
Создано при помощи КотоРед.

Так сложилось, что иногда на рабочем столе не хватает часов с календариком на текущий месяц.... Не с текущей датой, а с возможностью одним взглядом окинуть весь месяц. И пролистать месяц-другой вперед/назад. Да, скажут уважаемые котоводы, у нас под рукой всегда есть ПК, где в правом нижнем углу экрана есть часики, если мышкой ткнуть - появится календарь....

Но мы, коты, существа ленивые до жути.... Это еще лапой тянуться за какой то мышкой.... И вообще, мышек положено кушать, а не возить ими по столу.... Так и появилась идея-мысль автономных часиков с календарем. Ну и парой-тройкой будильников. 

Характеристики того, что получилось:

  • Часы
  • Календарь на месяц
  • Возможность перелистывания календаря вперед/назад помесячно
  • Ежечасный сигнал в период с 7 до 22 часов, отключаемый
  • 5 будильников с индивидуальной настройкой - разовый, по дням недели. Три мелодии будильника на выбор, 7 уровней громкости
  • Отображение показаний температуры с двух датчиков DS18B20
  • Выбор языка интерфейса из трех - Русский, Украинский, Английский
  • Выбор одной из нескольких цветовых схем, возможность автоматического переключения цветовых схем случайным образом.

 

 

Как все начиналось.

Сначала мысль толкнулась в сторону монохромного дисплея 128*64 (их в запасе пара штук была).... Но... разрешение для красивой отрисовки времени и календаря оказалось маловатым.... Можно все уместить, но это было бы некрасиво.... Не по кошачьи... Да и пришлось бы лепить какие то кнопки или энкодер для управления....

В результате взор упал на цветные дисплеи с тач-скрином. Прикидка в растровом редакторе показала, что разрешение 240*320 вполне подходит для наших котячих целей. Это разрешение достаточное для красивой отрисовки информации и при этом скорость вывода информации остается на приемлемом уровне.

Делать часы было решено на базе старой доброй Atmel MEGA32A.... (Их тоже в котокладовке лежит несколько)... Поскольку пикселей у дисплея много, да каждый пиксель аж 16-битный - было принято решение использовать дисплей с параллельным интерфейсом. Ибо мега, хоть и с кварцем на 16 МГц - по последовательному интерфейсу будет отрисовывать картинку ужжжжасно медленно.... Как раз у 32й меги портов целых 4, хватит на дисплей, да еще и на остальную периферию останется. А что бы не забыть время, пока коты спят - в качестве часов был применен чип DS3231.

После недолгих поисков на просторах АлиЭкспресса в Surenoo Store был найден дисплей 2,4" с графическим чипом ILI9341 и контроллером тач-панели XPT2046.

Вот такой : 2.4 inch 240*320 TFT LCD Module Display Screen with Touch Panel Drive IC ILI9341 XPT2046 PCB Adpater Parallel Interface

С таким же разрешением были доступны дисплеи от 2 и до 3.2 дюймов.... 2.4" был выбран как компромисс между диагональю и жадностью хозяина. (После сборки и упаковывания в корпус оказалось, что картинка на 2.8" дисплее смотрелась бы более красиво... )

Выбор был сделан, посылка из Китая вылетела в страну назначения. Настала пора прорабатывать схемное решение. 

Схема.

К сожалению, конфигурация альтернативных функций портов Меги не позволила шину данных дисплея повесить на 2 порта.... Пришлось разбросать шину данных между портами А, В и С так, что бы можно было выплюнуть 2 байта в дисплей минимальным количеством операций. Ведь от этого напрямую зависит скорость отрисовки информации.

После раскидывания всей периферии остались свободными 2 бита порта D - это Rx и Tx последовательного порта. Была мысль закинуть на плату еще и какой нибудь USB-UART преобразователь, но.... Полезность связи простых часов с ПК - очень сомнительна. В результате данные биты были выведены на разъемы с перспективой подключения к ним пары термометров DS18B20.... 

После всех мыслей родилась вот такая схемка.

 

Питать часы хотелось от 5 вольт, как от наиболее доступного варианта питания (USB-порт, зарядка от телефона и т.д.). Соответственно, в качестве разъема питания было применено микро-USB гнездо.

Чип дисплея ILI9341 - хитрый. По питанию он переваривает 5 вольт, но.... Интерфейс у него исключительно 3.3 вольта. И на пятивольтовые сигналы контроллер не реагирует.

Что бы не городить 20 преобразователей уровня, запитаем всю конструкцию от 3,3 вольт. Что бы их получить из 5 вольт - применим AMS1117-3.3 - LDO-стабилизатор с небольшим полигоном в качестве теплоотвода.

В качестве фильтрующих емкостей вокруг AMS-ки пристроились два танталовых конденсатора на 22 мкф 10 вольт...

Тактирование Меги - от кварца в 16 МГц. Кварц применен исключительно для увеличения скорости обмена данными с дисплеем.

Мега32А на трех вольтах прекрасно работает с кварцем 16 МГц. По идее, можно поставить и 20 МГц - но это уже оверклокинг и не все Меги на 3 вольтах могут завестись с таким кварцем.

Пьезопищалка повешена на ШИМ-выход 16-битного таймера 1, это позволило будильникам не просто пищать, а играть "противным звуком часов Montana" простые мелодии. И с некоторыми ухищрениями еще и выбирать громкость воспроизведения мелодий.

Подсветка дисплея управляется логическим уровнем (на плате дисплея стоит свой транзистор, управляющий светодиодами подсветки), соответственно, ШИМ-выход таймера 2 прекрасно справится с регулировкой яркости подсветки дисплея.

Контроллер тач-панели XPT2046 в плане питания более всеяден - от 2,8 до 5,5 вольт питания, логические уровни интерфейса - аналогично. Но раз хозяин сказал - 3,3 вольта, значит 3,3 вольта везде. Контроллер подключен к "железному" SPI нашей Меги. Сигнал CS тач-контроллера подтянут к 5 вольтам резистором, что бы не мешал нам программировать Мегу по этому же SPI-интерфейсу.

Сигнал TOUCH_PEN от контроллера тач-панели заведен на вход INT2 Меги. Это позволило реализовать конечный автомат обмена данными с контроллером тача полностью асинхронным, исключительно на прерываниях, включая усреднение координат точки касания "скользящим" окном.

Часы реального времени DS3231 подключены к "железному" I2C нашей Меги. Включение DS-ки типовое, в качестве резервного источника применена батарейка CR2032. Выход тактовой частоты DS3231 при включении часов программируется на частоту 1024 Гц, этот выход заведен на вход прерывания INT0 нашего контроллера и используется в качестве системного тактового сигнала. От него отсчитываются все временные задержки. 

Остальные управляющие сигналы "раскиданы" по оставшимся портам исходя из удобства трассировки.

Печатная плата.

Печатная плата - двухсторонняя, разводилась под ЛУТ-технологию.

На плате достаточно большое количество переходных отверстий - это дань технологии. 

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

Плата рассчитывалась таким образом, что бы полностью поместиться под дисплеем.

Почти все элементы - SMD. Все резисторы - типоразмера 0805. Емкости при кварце - тоже 0805. Блокировочные емкости 0,1 мкф - 1206. Танталы - типоразмер B (SMC-B).

Плата:

 

На отдельный коннектор выведен SPI-интерфейс для программирования нашего контроллера.

Дисплей.

Дисплей подключается тремя шлейфами - интерфейс контроллера дисплея, шлейф тач-панели и шлейф подсветки. Но для облегчения нашей работы китайцы дисплей уже прицепили на переходную плату. На которой поставили еще контроллер тач-панели, предусмотрели место под флеш-память и прикрутили кардридер для полноразмерных SD-карт. В выбранном экземпляре дисплея параллельный интерфейс контроллера дисплея выведен на отдельные пины разъема, а посадочное место под флеш, контроллер тача и кардридер - выведены на один общий SPI с индивидуальными сигналами CS.

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

Приблизительная линия реза:

Тут главное - не переусердствовать и не резануть шлейфы.

И вот настает торжественный момент - плата собрана, дисплей в разъем вставлен.... Ах, да, надо еще прошивку залить. Прошивка - в приложенном архиве.

А что б все работало как надо, нужно лапками слегка подправить фьюзы. Вот так: High = 0xD1, Low = 0xBF.

Вставляем дисплей, подключаем питание (тут, кстати, видно, до какого уровня обрезан дисплей):

После упаковки в корпус получилось вот такое изделие. 

 

Как это все работает.

Примененный дисплей имеет одну маленькую особенность. Координаты нажатия, которые отдает контроллер тач-панели, ни каким образом не соответствуют координатам пикселей. Поскольку по сути примененный дисплей - это 3-в-1: дисплей, тач и кардридер.

Соответственно, в часах предусмотрена калибровка тач-панели.

При включении питания часы переходят в основной режим отображения времени и календаря. Либо предлагают выполнить калибровку.

Калибровка при включении питания предлагается в следующих случаях:

  • Калибровка еще ни разу не выполнялась - в EEPROM-е Меги нет сохраненных данных о калибровке
  • Текущее время-дата в часах реального времени - 2000 год, 1 января, 0 часов, минуты - менее 5 мин. (сделано для того, что бы можно было добраться до калибровки экрана при любых ситуациях, просто вынув батарейку часов)

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

При этом крестики перекрашиваются в зеленый цвет.

Настройки калибровки сохраняются только после нажатия на четвертый крестик. Так что при ошибке можно выключить часы и снова их включить - и попасть опять в режим калибровки.

После калибровки часы переходят в основной режим.

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

Если подключен один датчик - отображается одна температура. Если два датчика - отображаются две температуры, одна под другой, они будут подписаны - Т1 и Т2. Т1 - датчик, подключенный к PORTD0, Т2 - к PORTD1.

Управление часами осуществляется нажатиями лапы в определенные области экрана:

В правом верхнем углу находится кнопка перехода в общее меню часов.

Нажатие на иконки состояния будильника и ежечасного сигнала вызывает переход в меню настройки звуковых сигналов.

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

Если в течении 30 секунд не было нажатий на экран - часы вернутся в основной режим.

Область часов.

В режиме просмотра других месяцев принудительно возвращает на экран отображение текущего месяца.

В основном режиме, если включено автоматическое переключение цветовых схем, длительное нажатие принудительно переключает цветовую схему на следующую.

 

Режим настроек.

Содержит 4 кнопки - перехода в настройку звуковых сигналов, настройки даты и времени и перехода в настройки экрана.

В левом верхнем углу находится кнопка "Назад" - выхода из режима настроек.

Если в течении 30 секунд не было нажатий на экран - часы вернутся в основной режим.

Меню настройки звуковых сигналов.

В данное меню можно попасть как через основное меню, так и напрямую, нажав на область иконок будильника/ежечасного звукового сигнала.

В левом верхнем углу находится кнопка "Назад" - выхода из режима настроек звуковых сигналов.

Нажатие на прямоугольник ежечасного сигнал включает и выключает звуковой сигнал каждый час, с 7 утра до 22 вечера, при включенном ежечасном сигнале внутри прямоугольника отображается галочка.

5 кнопок будильников приводят кота в настройки этих 5 будильников. Справа от каждой кнопки будильника, если он включен, отображается галочка.

Если в течении 30 секунд не было нажатий на экран - часы вернутся в основной режим.

Меню настройки будильника.

В левом верхнем углу находится кнопка "Назад" - выхода из режима настройки будильника без сохранения изменений.

Кнопками "+" и "-" выставляется время срабатывания будильника. Длительное удержание кнопок приводит к ускоренному изменению значений.

Кнопки "Выкл", "Разовый" и кнопки выбора дней недели отвечают за режим срабатывания будильника - один раз или по определенным дням недели. Выбранный режим отображается кнопкой другого цвета.

Ниже находятся кнопки выбора мелодии будильника и ее громкости.

При выборе громкости звучит короткий звуковой сигнал для оценки громкости.

В нижней части экрана находится кнопка сохранения настроек текущего будильника.

Если в течении 30 секунд не было нажатий на экран - часы вернутся в основной режим без сохранения изменений.

Настройка даты и времени.

В левом верхнем углу находится кнопка "Назад" - выхода из режима настроек даты или времени без сохранения изменений.

Кнопками "+" и "-" настраивается время или дата. Длительное удержание кнопок приводит к ускоренному изменению значений.

Кнопка "Сохранить" записывает установленные показания в микросхему часов реального времени.

Если в течении 30 секунд не было нажатий на экран - часы вернутся в основной режим без сохранения изменений.

 

Настройки дисплея.

В левом верхнем углу находится кнопка "Назад" - выхода из режима настроек дисплея.

Кнопка яркости меняет яркость подсветки, уровень яркости от 1 до 7 отображается на самой кнопке.

Кнопка "Цветовая схема" циклически переключает цветовые схемы, при этом сразу происходит переключение цветовой схемы. Справа от кнопки отображается иконка предпросмотра, схематически повторяющая основной экран часов, иконка позволяет оценить выбранную цветовую схему. После перебора всех доступных цветовых схем иконка предпросмотра меняется на символ автоматического переключения цветовых схем - иконку часиков со стрелкой по кругу. В этом режиме цветовая схема переключается автоматически, в случайный период от 15 до 90 минут на новую, выбранную случайным же образом.

Кнопка "Калибровка" вызывает меню калибровки экрана (Если вдруг это понадобится и получится добраться нажатиями до этого меню. Если же калибровка слетела - то см.выше - вынуть батарейку, что бы сбросилось время/дата). Автовыход из режима калибровки - через 10 секунд, если не было нажатий на экран.

Если в течении 30 секунд не было нажатий на экран - часы вернутся в основной режим.

 

В приложенном архиве - прошивка, схема, фотографии, изображения, проект Eagle 7

___________________

П.С. И дико прошу прощения за качество фотографий.... У меня же лапки....


Файлы:
прошивка, схема, фотографии, изображения, проект Eagle 7


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

70 2 0
2 0 0

Эти статьи вам тоже могут пригодиться: