Сделать бинарные часы мечта всех ботаников в мире, не правда ли? (... или, может быть использовать синий лазер для светового меча:)). Я задумал эту идею, когда учился последний год в школе, а позже решил спроектировать и построить бинарные наручные часы.

В данный момент я только изучаю микроконтроллеры, поэтому для этого проекта выбрал популярный PIC16F628.

Для индикации времени в часах используются 4 светодиода для отображения часов и 6 светодиодов для отображения минут.

Также для индикации часов можно использовать зеленые светодиоды, а для минут - красные:

Как повысить точность отсчета времени?

Чтобы увеличить точность хода часов я использовал Таймер 1(TMR1), который работает в асинхронном режиме, идея заключается в следующем:
чтобы продлить работу от батареи микроконтроллер находится в спящем режиме, когда не отображается время, а светодиоды будут гореть только в течение нескольких секунд после нажатия одной из двух кнопок. В спящем режиме отключены почти все функции микроконтроллера, но таймер/счетчик TMR1 продолжает работать в асинхронном режиме, так что можно отсчитывать время, пока PIC16F628 спит.

Когда 16-разрядный регистр TMR1 зарегистрирует переполнение, сигнал от прерывания заставит проснуться микроконтроллер, в данном случае счетчик секунд обновится и микроконтроллер снова уйдет в режим сна.

Для использования в асинхронном режиме TMR1 нужно задать источник тактирования, это делается путем подключения 32.768 Гц кварцевого резонатора между контактами RB7 и RB6.

Как показать время?

Время отображается при нажатии на одну из двух кнопок. Теперь вопрос: как можно определить сосотояние кнопки, если микроконтроллер находится в спящем режиме? Ну конечно, я использовал прерывание по изменению уровня на выводах RB4 и RB5, когда состояние этих контактов изменится контроллер проснется. При нажатии кнопки в таймер TMR0 загрузится значение, которое используется для измерения времени индикации, и активируются прерывания, при переполнении TMR0, все светодиоды погаснут и микроконтроллер возвратится в спящий режим.

Алгоритм работы часов:

- Старт программы (инициализация);
- Переход в спящий режим.

Если произошло переполнение TMR1
- Пробуждение;
- Время на обновление;
- Переход в спящий режим.

Если произошло внешнее прерывание
- Пробуждение;
- Индикация времени с помощью светодиодов;
- Ждем переполнения TMR0;
- Выключение светодиодов;
- Переход в спящий режим.

Как установить время?

В данном случае время устанавливается кнопками и только при первом включении часов.

Схема часов

Бинарные наручные часы на PIC16F628 - схема

Корпус выполнен из пластика, батарейный отсек для аккумулятора типа CR2032 был вырезан с помощью станка ЧПУ. Ремешок просто приклеен к нижней части корпуса.

При программировании микроконтроллера выставить биты конфигурации, что показаны на рисунке ниже:

Биты конфигурации


Архив для статьи "Бинарные наручные часы на PIC16F628"
Описание: Исходный код программы(Ассемблер)
Размер файла: 33.9 KB Количество загрузок: 694 Скачать