Предлагаемое устройство представляет собой часы-будильник с расширенными функциями, основными особенностями которых является:
Ввод данных и выбор режимов осуществляется с помощью клавиатуры на 12 кнопок, например, от телефонного аппарата. Это позволяет нажатием одной кнопки выбирать требуемую функцию, а также быстро и удобно вводить данные.
Часы показывают время и текущий день недели.
Реализована возможность задания десяти независимых будильников, каждый из которых может быть активен или не активен в любой день недели. Будильник может быть разовым, при этом после срабатывания в очередной день недели этот день недели становится для него неактивным.
В качестве звуковой сигнализации используются чередующиеся предварительно записанное голосовое сообщение и любой звук, например тональный. Звук применяется как более "будящий" чем голосовое сообщение, а сообщение - для пояснения, по какому поводу сработал будильник.
Реализован таймер с обратным отсчетом, время которого задается в минутах, часах-минутах или часах-минутах-секундах. Такая последовательность выбрана из-за того, что задавать интервал в секундах приходится реже всего.
В качестве дополнительной возможности имеется голосовая "записная книжка" на одно сообщение, что позволяет оставить голосовое сообщение другим членам семьи вместо того, чтобы писать его на бумаге.
Питание осуществляется от сети, но имеется резервный источник питания на случай пропадания сетевого напряжения.
Все основные функции реализованы на микроконтроллере PIC16F84A, в его же энергонезависимой памяти данных хранятся настройки будильников. В качестве индикатора используется ЖКИ модуль фирмы МЭЛТ МТ10Т7-7, имеющий 10 семисегментных разрядов с точками. Это позволяет выводить на индикацию не только текущее время, но и день недели. Для записи и воспроизведения звука используется специализированная микросхема ISD1420. В качестве клавиатуры используется матрица клавиш 3х4, которая может быть собрана из отдельных кнопок, или использована готовая матрица от любого телефона. Питание схемы осуществляется от сетевого источника напряжением 9 вольт или батареи "Крона", через стабилизатор 78L05. Такой способ формирования напряжения питания выбран из-за микросхемы ISD1420, так как при понижении питания на 0.5 вольта заметно снижается громкость звука, а при уменьшении напряжения менее 4 вольт микросхема перестает корректно функционировать, в то время как остальные элементы схемы остаются работоспособными при напряжениях до 2-х вольт.
Точность хода часов обеспечивает тактирование микроконтроллера часовым кварцем с частотой 32768Гц. Если точность хода неудовлетворительна, можно в небольших пределах корректировать частоту конденсаторами C1 и C2, однако на практике из десятка собранных конструкций ни в одной не потребовалось изменять эти конденсаторы, уход часов составляет самое большее одну минуту в месяц.
Порты ввода-вывода микроконтроллера распределены таким образом:
PORTA - входы опроса клавиатуры, выход запуска записи и выход светодиода индикации наличия сообщения VD1.
PORTB[0] - вход светодиода записи микросхемы ISD1420. Позволяет определять окончание воспроизведения, в данной программе не используется.
PORTB[1] - выход запуска воспроизведения по фронту.
PORTB[2,3] - выходы управления ЖК модулем.
PORTB[4..7] - выходы шины данных устройства, подключенной к ЖК модулю, адресным входам микросхемы ISD1420 и диодам строк клавиатуры.
Подобное распределение выбрано не столько из-за удобства программирования, сколько связано с разводкой печатной платы.
Протокол работы с ЖК модулем можно найти на сайте производителя melt.aha.ru. При предложенном подключении используется вход разрешения записи по единичному уровню. Из-за выбранного способа подключения программное обеспечение при изменении состояния шины данных должно сохранять младшие биты регистра неизменными, иначе будут сбои в работе с индикатором и возможны самостоятельные запуски воспроизведения сообщений.
Опрос клавиатуры происходит в отдельно описанной процедуре, в момент опроса на шине данных генерируется "бегущая единица" и считываются значения с порта PORTA. Так как частота генератора мала, нет необходимости выдерживать паузу между выдачей нового состояния и считыванием состояния порта.
Микросхема ISD1420 позволяет записывать и воспроизводить сообщения с любого из 160 блоков, длительностью по 125мс каждый. Для задания блока используются адресные входы А0..А7. Если на входы подается число, более 159, т.е. A7=A6=1, микросхема переходит в специальный режим, позволяющий выполнять расширенные операции, поэтому необходимо формировать адреса, меньшие 159. Так как требуется формировать всего несколько адресов, а количество выводов микроконтроллера ограничено, младшие три адресных входа подключены к земле, т.е. всегда равны нулю, а старшие пять подключены к шине данных и выводу выбора адреса ЖК индикатора PORTB[2]. Разбиение памяти микросхемы на блоки, применяемое в программе, приведено в таблице 1.
N
Назначение
Адрес
Длительность
1
"Записная книжка"
00000000b
10.875C
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 секунд памяти микросхемы, предварительно необходимо записать туда какой-либо сигнал. Для этого плату собирается без контроллера, на адресные входы микросхемы перемычками подается соответствующий адрес (10011000b), подается питание и замыкается на землю вывод "REC" микросхемы ISD1420. При этом с микрофона записывается требуемый сигнал, запись прерывается автоматически по достижении границы памяти.
В рабочем режиме микроконтроллер управляет микросхемой следующим образом:
Для воспроизведения после выставления адреса на шину данных на вывод PORTB[2], т.е. линию PLE, подается короткий нулевой импульс, а для записи подается уровень логического нуля на линию REC. Время записи контролируется по внутренним часам, для предотвращения затирания следующего сообщения, но возможна остановка и по нажатию клавиши. Воспроизведение повторяется через определенное время, адреса начала воспроизведения чередуются - выбранное сообщение, затем основной звук будильника, опять выбранное сообщение и т.д. до тех пор, пока не будет нажата клавиша "ESC" или "Enter".
Для воспроизведения звука по документации на микросхему ISD1420 требуется применять шестнадцатиомный динамик, однако из-за отсутствия таких в продаже использовались любые восьмиомные одноваттные динамики. Применяется электретный микрофон, использовались как микрофоны нашего производства, так и различные иностранные микрофоны. Располагать микрофон желательно не на той же плате, что и кнопки, а еще лучше - обернуть микрофон поролоном или резиной, не допуская его механического соприкосновения с деталями корпуса. В противном случае в конце сообщения, прерванного нажатием кнопки, будет заметен звук нажатия - щелчок.
В качестве светодиода индикации наличия сообщения применен голубой светодиод, так как он имеет наибольшую яркость и привлекает внимание. Это заставляет применять резистор R1 меньшего номинала, чем резистор R10 красного светодиода индикации записи.
Ниже приведен чертеж печатной платы. Клавиатура выполнена за единое целое, однако может быть отделена от платы и закреплена отдельно, либо заменена на стандартную клавиатуру.