Как-то раз я перепутал учебные университетские недели, и из-за этого сильно опоздал на лабораторную. Потом я её сдал, но с тех пор захотел сделать напоминалку, которая бы показывала день недели и её номер. Ну а раз день недели, то почему бы и не дату со временем?
Изначально я хотел сделать эти часы не идеально точными, а скорее простыми в настройке, и в плане дальнейшего функционирования, поэтому имеющим опыт в области микроконтроллеров нижеприведённое, возможно, покажется сильно неоптимизированным. Что ж, опыта у меня меньше года...
Итак, схема.
В моём распоряжении находился только PIC18F452, поэтому в схеме использован он. Частота МК - 40 МГц (включен режим PLL). Временные отсчёты тактируются отдельным генератором с часовым кварцем, построенным на логике. Шесть кнопок разведены на порт D, к порту B подключен самый обычный дисплей от Winstar, 2х16 символов. Всё это дело вполне может работать от аккумулятора из сотового телефона, и если схему доработать, то можно сделать энергонезависимые часы с подзарядкой от сети. Но на этом я не концентрировался.
Несколько пояснений по меню. Собственно меню вызывается по нажатию на кнопку "Меню/Отмена". Нужный пункт меню вызываются нажатием "ОК/Выбор". Чтобы вернуться назад без сохранения изменений, после редактирования параметров нужно нажать "Меню/Отмена". Для сохранения параметров - соответственно "ОК/Выбор". Навигация при редактировании интуитивно понятна. Кнопки "<-" и "->" осуществляют перемещение курсора по разрядам редактируемого параметра, а "+" и "-" служат для изменения значения.
Плюсы:
- Редактирование отсчётных секундных интервалов до герца. Для регулировки хода часов не требуется менять прошивку. Установленное значение сохраняется в EEPROM микроконтроллера и не теряется даже при полном отсутствии питания.
- Автоматическое определение дня недели по формуле Зеллера. Достаточно установить дату, а остальное сделает МК.
- Определение високосного года, автоматическая корректировка количества дней в месяце, как при редактировании, так и в ходе работы (на длительном периоде не тестировалось, могут быть баги).
- Поразрядное редактирование всех числовых параметров.
Минусы:
-Хоть частота ЦП и относительно большая, но выполнение команд тоже занимает какое-то время, из-за этого секундная задержка становится меньше, чем 32768 Гц, остальное время отнимают вывод на дисплей и всякое редактирование.
Эмпирически установленная задержка равна 31847 тактов часового генератора. Прошивку я не пытался особо локализовывать, поэтому пункты меню написаны на английском.
Фото устройства на макетной плате:
Дисплей в разных состояниях:
Файлы:
Проект Proteus.
Проект microC.
Прошивка МК.