Сделать бинарные часы мечта всех ботаников в мире, не правда ли? (... или, может быть использовать синий лазер для светового меча:)). Я задумал эту идею, когда учился последний год в школе, а позже решил спроектировать и построить бинарные наручные часы.
В данный момент я только изучаю микроконтроллеры, поэтому для этого проекта выбрал популярный PIC16F628.
Для индикации времени в часах используются 4 светодиода для отображения часов и 6 светодиодов для отображения минут.
Также для индикации часов можно использовать зеленые светодиоды, а для минут - красные:
Как повысить точность отсчета времени?
Чтобы увеличить точность хода часов я использовал Таймер 1(TMR1), который работает в асинхронном режиме, идея заключается в следующем:
чтобы продлить работу от батареи микроконтроллер находится в спящем режиме, когда не отображается время, а светодиоды будут гореть только в течение нескольких секунд после нажатия одной из двух кнопок. В спящем режиме отключены почти все функции микроконтроллера, но таймер/счетчик TMR1 продолжает работать в асинхронном режиме, так что можно отсчитывать время, пока PIC16F628 спит.
Когда 16-разрядный регистр TMR1 зарегистрирует переполнение, сигнал от прерывания заставит проснуться микроконтроллер, в данном случае счетчик секунд обновится и микроконтроллер снова уйдет в режим сна.
Для использования в асинхронном режиме TMR1 нужно задать источник тактирования, это делается путем подключения 32.768 Гц кварцевого резонатора между контактами RB7 и RB6.
Как показать время?
Время отображается при нажатии на одну из двух кнопок. Теперь вопрос: как можно определить сосотояние кнопки, если микроконтроллер находится в спящем режиме? Ну конечно, я использовал прерывание по изменению уровня на выводах RB4 и RB5, когда состояние этих контактов изменится контроллер проснется. При нажатии кнопки в таймер TMR0 загрузится значение, которое используется для измерения времени индикации, и активируются прерывания, при переполнении TMR0, все светодиоды погаснут и микроконтроллер возвратится в спящий режим.
Алгоритм работы часов:
- Старт программы (инициализация);
- Переход в спящий режим.
Если произошло переполнение TMR1
- Пробуждение;
- Время на обновление;
- Переход в спящий режим.
Если произошло внешнее прерывание
- Пробуждение;
- Индикация времени с помощью светодиодов;
- Ждем переполнения TMR0;
- Выключение светодиодов;
- Переход в спящий режим.
Как установить время?
В данном случае время устанавливается кнопками и только при первом включении часов.
Схема часов
Корпус выполнен из пластика, батарейный отсек для аккумулятора типа CR2032 был вырезан с помощью станка ЧПУ. Ремешок просто приклеен к нижней части корпуса.
При программировании микроконтроллера выставить биты конфигурации, что показаны на рисунке ниже:
Архив для статьи "Бинарные наручные часы на PIC16F628" | |
Описание: Исходный код программы(Ассемблер) | |
Размер файла: 33.9 KB Количество загрузок: 702 | Скачать |
Комментарии
Прошивать этим файлом binary_clock_pi c16f628.HEX
Не нашел такой программы, биты на скриншоте показаны