Глупые часы с календарем
Автор: GoldenAndy Так сложилось, что иногда на рабочем столе не хватает часов с календариком на текущий месяц.... Не с текущей датой, а с возможностью одним взглядом окинуть весь месяц. И пролистать месяц-другой вперед/назад. Да, скажут уважаемые котоводы, у нас под рукой всегда есть ПК, где в правом нижнем углу экрана есть часики, если мышкой ткнуть - появится календарь.... Но мы, коты, существа ленивые до жути.... Это еще лапой тянуться за какой то мышкой.... И вообще, мышек положено кушать, а не возить ими по столу.... Так и появилась идея-мысль автономных часиков с календарем. Ну и парой-тройкой будильников. Характеристики того, что получилось:
Как все начиналось. Сначала мысль толкнулась в сторону монохромного дисплея 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: дисплей, тач и кардридер. Соответственно, в часах предусмотрена калибровка тач-панели. При включении питания часы переходят в основной режим отображения времени и календаря. Либо предлагают выполнить калибровку. Калибровка при включении питания предлагается в следующих случаях:
Необходимо аккуратно тонким неострым предметом (или идущим в комплекте с дисплеем стилусом) нажимать на красные крестики, появляющиеся в четырех углах дисплея. При этом крестики перекрашиваются в зеленый цвет. Настройки калибровки сохраняются только после нажатия на четвертый крестик. Так что при ошибке можно выключить часы и снова их включить - и попасть опять в режим калибровки. После калибровки часы переходят в основной режим. На дисплее отображается текущее время, текущий месяц и год, символы состояния будильников и ежечасного сигнала, кнопка входа в меню и температура (в случае подключенного датчика/датчиков). Если подключен один датчик - отображается одна температура. Если два датчика - отображаются две температуры, одна под другой, они будут подписаны - Т1 и Т2. Т1 - датчик, подключенный к PORTD0, Т2 - к PORTD1. Управление часами осуществляется нажатиями лапы в определенные области экрана:
В приложенном архиве - прошивка, схема, фотографии, изображения, проект Eagle 7 ___________________ П.С. И дико прошу прощения за качество фотографий.... У меня же лапки....
Файлы: Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться: |
|
|||||||||||||||||||||||||||||||||||||||
|
||||