[Из песочницы] Мой вариант DIY часов с NTP клиентом
Поскольку в предыдущих публикациях дело так и не дошло до готового изделия, предлагаю свой вариант. Железо — не моя специализация, поэтому прошу не судить строго.
Итак, по порядку. Когда моя любовь к часам и точному времени достигла терминальной стадии, было решено воплотить мечту в жизнь. Начался поиск доступных плат для разработки с Ethernet на борту. Rapsberry с линуксом показались «пушкой по воробьям», поэтому кинул вопрос на форум Netduino, ибо сейчас крепко сижу на C# и было интересно запустить байткод на микроконтроллере. Но увы, единственный модератор форума, видимо, уехал на отдых, и ему потребовалось несколько недель, чтобы одобрить и опубликовать мое первое сообщение. Not good, not good… На aliexpress была заказана плата Arch Pro и прочий недостающий обвес. Тогда это было самое доступное решение. На самой плате установлен микроконтроллер LPC1768 от NXP (ядро Cortex-M3), плюс LPC11U35 (Cortex-M0) для облегчения коммуникации с их софтом. Сам производитель предоставляет online IDE, компиляция тоже на их сервере, прошивка скачивается и закидывается на плату как файл на флешку, дебаггера нет, поэтому разработку проекта начал в Keil uVision, пробной версии, конечно же. Для прошивки и отладки микроконтроллера требуется только кабель micro-USB.
В качестве часов реального времени была выбрана ИС DS3231, которая приехала ко мне в виде готового модуля, общающегося по I2C:
Загадочный модуль почему-то работал только при подключенном и запитанном логическом анализаторе (пользуюсь Logic-U ISL от ребят из Харькова):
По даташиту между сигнальными линиями и V+ должны быть резисторы 10К, прозвон модуля показал мегаомы. Что это за муляж вместо резисторной сборки и светодиода, который никогда не загорался, я не понял. Напаянные резисторы модуль оживили, но порог колхоза перешагнул некую черту, поэтому была разработана плата по типу ардуиновского «щита»:
Схема:
В качестве индикатора был взят сегментный дисплей — такого размера (0.8″ в высоту) был только с белыми светодиодами, из всей документации на него китаец предоставил только джипег с распиновкой, некоторые нечитаемые символы пришлось угадывать методом исключения. Контроллер к нему был взят всем известный MAX7219, общающийся по SPI.
Корпус… В новогодние праздники под рукой конечно нет ни 3D-принтера, ни лазерной резки. Самостоятельно напилил завалявшийся 8 мм плексиглас.
Момент безысходности на финальном этапе:
Конечный вид изделия:
Часы получают IP-адрес по DHCP (у меня их раздает роутер). Сервер NTP выбирается случайно. Время запрашивается каждые 25 часов (мой провайдер разрывает соединение с интернетом в одно и то же время вечером, поэтому не хотелось бы попасть на этот промежуток времени). Из-за постоянно меняющегося законодательства с часовыми поясами, решил не реализовывать переход на летнее и зимнее время, две кнопки просто уменьшают или увеличивают на час смещение от UTC. Смещение записывается в EEPROM микроконтроллера. Ход часов дополнительно резервируется литиевой батарейкой 3V, поэтому пропадание питания и интернета не проблема. Четыре цветных светодиода на плате служат для индикации проблем с интернетом, железом или ошибок в рантайме.
Исходные коды прошивки на ГитХабе:
https://github.com/sapozhnikov/eclock