Сайт радиолюбителей Республики Коми.

: главная: странички:

Часы с “говорящим” будильником на PIC-контроллере 16F84A.

Основным недостатком всех выпускаемых в настоящее время конструкций является способ ввода информации с помощью нескольких кнопок. В лучшем случае интерфейс с пользователем позволяет изменять каждый разряд по отдельности, но чаще всего — только часы или минуты. В результате для набора, скажем, 45 мин, если раньше стояло 50 мин, приходится проходить все 55 значений по кругу. Редкие исключения встречаются, если часы-будильник совмещен с каким-либо другим устройством, например, телефоном. В таком случае пользователь имеет возможность вводить время или значение будильника поразрядно, что гораздо удобнее.

Учитывая, что одним и тем же будильником пользуется несколько человек в разное время, общепринятым стало наличие нескольких времен срабатывания и нескольких звуковых сигналов. Кроме того, учитывая выходные дни, добавляют возможность ставить будильник только на выборочные дни недели. Иногда бывает удобным будильник, срабатывающий только один раз и отключающийся.

В качестве сигнала могут быть звуки либо нескольких тональностей, либо музыкальная мелодия.

Поставив задачу разработать удобный в использовании будильник после перебора всех вариантов автор разработал конструкцию со следующими возможностями:

• ввод данных и выбор режимов осуществляется с помощью клавиатуры из 12-ти кнопок, например, от телефонного аппарата. Это позволяет нажатием одной кнопки выбирать требуемую функцию, а также быстро и удобно вводить данные;

• часы показывают время и текущий день недели;

• реализована возможность задания десяти независимых будильников, каждый из которых может быть активен в любой день недели. Будильник может быть разовым, при этом после срабатывания в очередной день недели этот день недели становится для него неактивным;

• в качестве звуковой сигнализации используются чередующиеся предварительно записанное голосовое сообщение и любой звук, например тональный сигнал. Звук применяется как более “будящий”, чем голосовое сообщение, а сообщение — для пояснения, по какому поводу сработал будильник;

• реализован таймер с обратным отсчетом, время которого задается в минутах, часах-минутах или часах-минутах-секундах. Такая последовательность выбрана из-за того, что задавать интервал в секундах приходится реже всего;

• в качестве дополнительной возможности имеется голосовая “записная книжка” на одно сообщение, что позволяет оставить голосовое сообщение другим членам семьи вместо того, чтобы писать его на бумаге;

• питание осуществляется от сети, но имеется резервный источник питания на случай пропадания сетевого напряжения.

Рис.1.

Принципиальная схема будильника приведена на рис. 1. Все основные функции реализованы на микроконтроллере PIC16F84A, в его же энергонезависимой памяти данных хранятся настройки будильников.

В качестве индикатора используется ЖКИ модуль фирмы “Мэлт” МТ10Т7-7, имеющий 10 семисегментных знакомест с точками. Это позволяет выводить на индикацию не только текущее время, но и день недели.

Для записи и воспроизведения звука применена специализированная микросхема ISD1420.

В качестве клавиатуры применена матрица клавиш 3x4, которая может быть собрана из отдельных кнопок или использована готовая от любого телефона.

Питание устройства осуществляется от сетевого источника напряжением 9В или батареи “Крона” через стабилизатор 78L05.

Такой способ стабилизации выбран из-за микросхемы ISD1420, так как при понижении питания на 0,5В заметно снижается громкость звука, а при уменьшении напряжения на 1В микросхема перестает корректно функционировать, в то время как остальные элементы схемы остаются работоспособными при напряжениях до 2 В.

Точность хода часов обеспечивает тактирование микроконтроллера часовым кварцевым резонатором с частотой 32768 Гц. Если точность хода неудовлетворительна, можно в небольших пределах корректировать частоту конденсаторами С1 и С2, однако на практике из десятка собранных конструкций ни в одной не потребовалось изменять эти конденсаторы. Уход часов составляет самое большее одну минуту в месяц.

Порты ввода/вывода микроконтроллера распределены таким образом:

  • PORTA — входы опроса клавиатуры, выход запуска записи и выход светодиода индикации наличия сообщения VD1;
  • PORTB[0] — вход светодиода записи микросхемы ISD1420, позволяет определять окончание воспроизведения, в данной программе не используется;
  • PORTB[1] — выход запуска воспроизведения по фронту;
  • PORTB[2, 3] — выходы управления ЖК модулем;
  • PORTB[4—7] — выходы шины данных, подключенной к ЖК модулю, адресным входам микросхемы ISD1420 и диодам строк клавиатуры.

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

Протокол работы с ЖК модулем можно найти на сайте производителя [1] При предложенном подключении используется вход разрешения записи по единичному уровню. Из-за выбранного способа программное обеспечение при изменении состояния шины данных должно сохранять младшие биты регистра неизменными, иначе будут сбои в работе с индикатором и возможны самостоятельные запуски воспроизведения сообщений.

Опрос клавиатуры происходит в отдельно описанной процедуре, в момент опроса на шине данных генерируется “бегущая единица” и считываются значения с порта PORTA. Так как частота генератора мала, нет необходимости выдерживать паузу между выдачей нового состояния и считыванием состояния порта.

Микросхема ISD1420 позволяет записывать и воспроизводить сообщения с любого из 160 блоков длительностью по 125 мс каждый. Для задания блока используются адресные входы А0 — А7. Если на входы подается число более 159, т. е. А7 = А6 = 1, микросхема переходит в специальный режим, позволяющий выполнять расширенные операции, поэтому необходимо формировать адреса, меньшие 159. Так как требуется формировать всего несколько адресов, а число выводов микроконтроллера ограничено, младшие три адресных входа подключены к общему приводу, т. е. всегда равны нулю, а старшие пять — к шине данных и выводу выбора адреса ЖК индикатора PORTB[2]. Разбиение памяти микросхемы на блоки, применяемое в программе, приведено в табл. 1.

Назначение

Адрес

Длит. , с.

1

"Записная книжка"

00000000b

10,875

2

Первый будильник

01011000b

1,875

3

Второй будильник

01101000b

1,875

4

Третий будильник

01111000b

1,875

5

Четвертый будильник

10001000b

1,875

6

Звук будильника

10011000b

0,875

Таблица 1. Разбиение памяти микросхемы ISD1420.

Разбиение выбрано именно таким, поскольку оставляет достаточно места и для голосового сообщения и позволяет записать в каждое сообщение будильника приблизительно 4-5 слов. Разбиение можно легко изменить, корректируя одну процедуру в программе, ответственную за выдачу адреса сообщений.

Так как в качестве тонового сигнала воспроизводятся последние 0,875 с памяти микросхемы, предварительно необходимо записать туда какой-либо сигнал. Для этого плату собирают без контроллера, на адресные входы микросхемы перемычками подают соответствующий адрес (10011000Ь), включают питание и замыкают на общий провод вывод REC микросхемы ISD1420. При этом с микрофона записывается требуемый сигнал, запись прерывается автоматически при достижении границы памяти.

В рабочем режиме микроконтроллер управляет микросхемой следующим образом.

После выставления адреса на шину данных для воспроизведения на вывод PORTB[2], т. е. линию PLE, подается короткий нулевой импульс отрицательной полярности, а для записи - уровень лог. 0 на линию REC. Время записи контролируется по внутренним часам для предотвращения искажения следующего сообщения, но возможна остановка и по нажатию клавиши. Воспроизведение повторяется через определенное время, адреса начала воспроизведения чередуются — выбранное сообщение, затем основной звук будильника, опять выбранное сообщение и т. д. до тех пор, пока не будет нажата клавиша “ESC” или “Enter”.

Для воспроизведения звука по документации на микросхему ISD1420 требуется применять динамическую головку сопротивлением 16 Ом, однако из-за отсутствия таких в продаже использовались любые восьмиомные одноваттные. Применялся электретный микрофон, использовались как микрофоны нашего производства, так и различные зарубежные. Располагать микрофон желательно не на той же плате, что и кнопки, а еще лучше — обернуть микрофон поролоном или резиной, не допуская его механического соприкосновения с деталями корпуса. В противном случае в конце сообщения, прерванного нажатием кнопки, будет заметен щелчок.

Для индикации наличия сообщения применен голубой светодиод, так как он имеет наибольшую яркость и привлекает внимание. Это заставляет применять резистор R1 меньшего номинала, чем резистор R10 красного светодиода индикации записи. Прошивка микроконтроллера в формате Intel HEX приведена в табл. 2.

Листинги программ, схемы, вариант печатной платы и инструкцию по эксплуатации можно найти здесь [2]. Далее приведено краткое описание режимов работы и возможностей, реализованных в данной версии программы будильника.

Основной режим.

Основной режим работы часов — отображение текущего времени. В этом режиме на индикаторе отображается текущее время и день недели. Режим характерен миганием черточек между разрядами часов.

В этом режиме часы могут выполнять следующие функции:

  • Кнопка “1” запускает запись основного голосового сообщения. Нажатие на эту кнопку приводит к запуску записи голосового сообщения и включению индикатора “СООБ”, индицирующего его наличие. Если сообщение уже было записано и не было прослушано, т. е. горит индикатор “СООБ”, вместо записи включается прослушивание сообщения.
  • Кнопка “2” позволяет восстановить или сбросить состояние индикатора “СООБ” по желанию пользователя. Например, это может потребоваться для повторной пометки важного сообщения после его прослушивания.
  • Кнопка “3” запускает прослушивание сообщения и сбрасывает индикатор “СООБ”.
  • Кнопка “6” переводит часы в режим ввода времени таймера, см. “Режим таймера”.
  • Кнопка “8” переводит часы в режим настроек, см. пункт “Режим настроек”.
  • Кнопка “9” переводит часы в режим просмотра и редактирования будильников, см. пункт “Режим будильников”.

Активный будильник.

В этот режим часы переходят в момент срабатывания одного из будильников. На индикацию при этом выводится время срабатывания и номер будильника. Одновременно поочередно включается основной и выбранный звуки будильника. Для отключения будильника необходимо нажать одну из кнопок “Отмена” или “Ввод”. Будильник возвращается в предыдущий режим работы.

Режим настроек.

Режим настроек позволяет прослушать и установить сообщения голосовых будильников и текущее время. На индикаторе при входе в режим выводится слово “SEttinG”.

Для прослушивания и подготовки к установке голосового будильника необходимо нажать на кнопку с его номером, т. е. на одну из кнопок “1”—“4”. Текущее сообщение будильника будет воспроизведено, а на индикатор будет выведено сообщение “SEL.” и номер будильника. После этого нажатием на кнопку “Ввод” можно запустить запись сообщения. О записи сообщения говорит горящий индикатор “REC”. Нажатие на кнопку “7” вызывает процедуру установки текущего времени.

В режиме установки текущего времени нажатие на цифровые кнопки вызывает установку текущего разряда часов, указанного курсором “_”. Вводить время следует в порядке часы—минуты— день недели. Если необходимо ввести значение часов или минут, меньшее десяти, требуется вводить полностью две цифры, т. е. правильно будет 09 часов 00 минут. При ошибочном вводе нажатие на клавишу “Отмена” удаляет предыдущую введенную цифру. Нажатие на клавишу “Отмена” при крайнем левом положении курсора приводит к отказу от установки времени. После ввода времени и дня недели для подтверждения следует нажать на клавишу “Ввод”, часы сразу перейдут в основной режим работы. Счетчик секунд сбрасывается при нажатии кнопки “Ввод”, что позволяет устанавливать часы по сигналам точного времени.

Режим будильников.

Режим позволяет просмотреть текущие установки будильников и отредактировать их. После входа в режим на индикатор выводится сообщение “SEL.AL”. Нажатие на кнопки от нуля до девяти вызывает на индикатор информацию о соответствующем будильнике и выбирает его для редактирования. Информация о будильнике выводится в следующем виде рис.2.

Рис.2.

Время будильника, номер сообщения от 0 до 5, программа на неделю, начиная с понедельника. Каждая полная черта отмечает выбранный день недели, каждая неполная — пропускаемый. Черта внизу обозначает циклический будильник, отсутствие ее — разовый, сбрасывающий текущий день после срабатывания будильника.

В приведенном примере первая строчка соответствует будильнику, срабатывающему в 9 часов утра с понедельника по пятницу каждую неделю, в качестве сообщения выбирается первый сигнал. Вторая строчка соответствует будильнику, срабатывающему в шесть утра в субботу и воскресенье, причем после срабатывания текущий день недели убирается, т. е. после срабатывания будильника в субботу и воскресенье будильник будет отключен. В качестве сообщения будет воспроизводится третий сигнал.

Выбрав будильник, его можно отредактировать нажатием на кнопку “Ввод”. При этом происходит переход в режим ввода времени будильника. Этот режим похож на режим ввода текущего времени, однако вместо дня недели вводится номер сообщения от 0 до 5, номера от 1 до 4 соответствуют определяемым будильникам, пятерка соответствует предустановленному будильнику, а ноль — основному сообщению. Кроме того, если сразу после входа в режим нажать

“Ввод”, данные будильника будут полностью сброшены, а будильник отключен. После ввода времени будильника и номера сообщения и подтверждения ввода, данных нажатием кнопки “Ввод” выбирается режим выбора дней недели текущего будильника. В этом режиме на индикатор выдается текущее состояние дней недели будильника. Полная черта означает выбранный день, маленькая черта — пропускаемый. Наличие внизу черты говорит о включенном циклическом будильнике, отсутствие — о разовом будильнике.

Нажатие на кнопки от 1 до 7 позволяет изменить состояние соответствующего дня недели. Нажатие кнопки “8” позволяет установить все дни недели и циклический режим, а нажатие кнопки “9” позволяет сбросить все дни недели и установить разовый режим. Кнопка “0” позволяет переключаться между разовым и циклическим режимами. Нажатие кнопки “Отмена” отменяет редактирование и переводит часы в основной режим, а нажатие кнопки “Ввод” устанавливает данные будильника и возвращает часы в режим просмотра будильников.

Режим таймера.

Сразу после входа в этот режим часы переходят в состояние ввода значения задержки. Для ввода значения необходимо ввести время в одном из разрешенных форматов:

Два разряда часов, два разряда минут, два разряда секунд — полное время, с точностью до секунды. Позволяет задавать интервалы менее минуты, для чего необходимо ввести часы и минуты как “00”. Если необходимо ввести значение часов или минут менее 10, требуется вводить число с нулем в старшем разряде.

Два разряда часов и два разряда минут — если значение секундных разрядов не задано, то считается, что они равны нулям.

Два разряда минут, — так как наиболее применяемыми являются задержки в диапазоне от одной минуты до одного часа, можно ввести только две цифры, тогда введенное значение будет считаться значением задержки в минутах. Вводить значения более 60 минут не рекомендуется, так как значение в процессе отсчета будет округлено.

Если требуется ввести значение, меньшее 10, необходимо ввести ноль в старшем разряде, например, 05 — пятиминутный таймер. После ввода значения задержки в одном из этих форматов и нажатия клавиши “Ввод” часы переходят в режим таймера с обратным отсчетом. Сбросить таймер можно нажатием кнопок “Отмена” или “Ввод”.

Скачать прошивку микроконтроллера PIC16F84A.

А. Брякин

Литература:

1.http://melt.aha.ru

2. http://electronics.crowd.ru

Материал подготовил А. Кищин (UA9XJK).

Rambler's Top100
Rambler's Top100
Copyright © Russian HamRadio

Hosted by uCoz