В нашей деревне, особенно зимой, часто отключается электричество, а меня задолбало каждый раз настраивать часы, поэтому:
За основу взяты бескнопочные часы на esp8266: https://geektimes.ru/post/267718/
Плата использована лужёная макетная, ибо ЛУТ на приемлемом уровне я ещё не освоил, но и на макетке получилось достаточно красиво. При двустороннем монтаже макетки нужно иметь в виду такую особенность: при пайке контакта с обратной стороны от припаянного конца провода, он может отвалиться от втулки вместе с лепёшкой припоя, если был припаян с прижимом и больше нигде не зафиксирован. Знание этой особенности может сэкономить пару часов отлова непонятных багов.
Монтаж произведён витухой и лакированным проводом из первого разобранного трансформатора. Сегменты — самого большого размера, найденные на ali, hc595 в dip корпусе, esp-01, остальная мелочь — из мусора под ногами, консолька — из ардуины uno с замкнутым reset пином. Блок питания — китайский регулируемый для регулировки яркости LED.
Изменения делались в процессе компоновки и сборки исходной схемы, поэтому кое-где навесом:
1) data и clock ноги esp сменены местами для удобства монтажа;
2) сегменты все расположены прямо, все точки снизу используются для отображения 12-секундных интервалов;
3) вместо биполярного транзистора для инвертирования clock использован полевой;
4) устранено перемаргивание сегментов во время обновления.
Автор исходной статьи поленился применить схему устранения перемаргивания, но у меня обновление индикаторов происходит раз в 12 секунд, что делает эти моргания сильно заметными. За защёлкивание выходов hc595 отвечает вход st_cp, который в даташите описан недостаточно наглядно, но в статье http://www.embedded.com/design/other/4009901/Logarithmic-LED-panel-display-has-72-dB-range рассказано, как работает этот вход: информация на выходе обновляется по фронту на этой ноге:
Кстати, в этой статье описаны ещё пара интересных формирователей импульсов.
Нужный фронт сформирован RC-цепью:
Важно подобрать параметры цепи такими, чтобы разрядный ток не превышал допустимый для ноги микроконтроллера. Его можно найти на форуме разработчика: http://bbs.espressif.com/viewtopic.php?t=139, в даташите он не указан. Подробнее о входах/выходах можно почитать по запросу microcontroller pin power. Временные интервалы примерно оценить можно из осциллограммы в сообщениях на эту тему: http://www.esp8266.com/viewtopic.php?f=24&t=1486:
Параметры подбираются калькулятором заряда/разряда конденсатора, у меня получились следующие: C=1мкф, R+=120КОм, R-=360Ом, Iразряда<9мА, время зарядки — около 120мс, разрядки — 0.36 мс. Как видно из видео, этого вполне достаточно для нормальной работы:
Для генерации таблицы символов использовал самодельный лист Excel: все ноги индикаторов подключены не по исходной схеме, точка ставится при отправке символа +1 бит. Заодно понял, что Excel ни разу не приспособлен для использования побитовых операций.
В прошивку также залит скрипт прерывания загрузки — решил его использовать потому что когда баловался с эффектами, умудрился wait loop-ом повесить контроллер до отказа консольки =) с этим же скриптом можно баловаться как угодно — всегда можно прервать загрузку init.lua.
Вид почти собранных бескнопочных часов:
прошка и chargen, пароль loess.ru
использованная литература:
https://geektimes.ru/post/267718/ (pdf)
http://www.embedded.com/design/other/4009901/Logarithmic-LED-panel-display-has-72-dB-range (pdf)
http://bbs.espressif.com/viewtopic.php?t=139
https://cdn-shop.adafruit.com/product-files/2471/0A-ESP8266__Datasheet__EN_v4.3.pdf
http://www.esp8266.com/viewtopic.php?f=24&t=1486
http://planetcalc.ru/1980/
https://bigdanzblog.wordpress.com/2015/04/24/esp8266-nodemcu-interrupting-init-lua-during-boot/ (pdf)
http://hexaxis.ru/wiseclock_rus.html
https://www.instructables.com/ESP8266-Desktop-Clock-WiFi-Synchronised/
https://www.instructables.com/ESP8266-Internet-Clock-With-Weather-Update-Many-Mo/
https://habr.com/ru/post/485696/