![]() |
![]() |
|||||||||||||||||||||||||||
Говорящие часы "BABULYA CLOCK"
Автор: Сергей Козлов Настал момент, когда моя бабуля перестала ориентироваться в показаниях обычных часов. Покупка китайских говорящих часиков не особо спасла ситуацию. Нужны были специальные часы, произносящие время в 12-часовом формате и говорящие время суток(утро-день-вечер-ночь). Но таких же не продают!? К счастью я немножко знаю электронику и программирование микроконтроллеров... Чтобы разработка не получилась слишком узкоспециализированной, решено было встроить несколько различных режимов работы. Я надеюсь, что схема окажется интересной и полезной широкому кругу читателей. Возможности часов: - ориентированы на батарейное питание; - время в 12- и 24-часовом формате; - день недели и время суток; - автоматическое произношение времени каждый час.
Принципиальная схема. Часы реализованы на распространенном микроконтроллере U1 Atmega8. Большее время он находится в глубоком сне, в котором работает лишь часовой генератор на кварце ZQ1 32768Гц и потребляет минимум энергии(20-30мкА). Когда пользователь нажимает на одну из кнопок(например на S2), запускается внутренний генератор на 8Мгц, контроллер просыпается. Затем микроконтроллер открывает транзистор Q1 и на микросхему УНЧ U3 подается питание. Алгоритм работы(описание для программистов). После подачи питания на схему происходит автокалибровка 8МГц RC-генератора по образцовому генератору на часовом кварце. Калибровка необходима т.к. частота RC-генератора сильно зависит от приложенного напряжения питания и температуры микроконтроллера. В моем случае без калибровки частота была около 7,3МГц. Понятно, что при таком отклонении частоты связь с компьютером для загрузки данных невозможна, а голос звучит не очень естественно. Для нахождения калибровочного значения для регистра OSCCAL используется быстрый алгоритм двоичного поиска, хорошо описанный в [1]. При поиске нужного значения он требует всего 8 сравнений. Я немного модифицировал алгоритм для нахождения наиболее близкого значения(ошибка менее 1%).
Каждая звуковая запись в информационной секции занимает по 8 байт. АДРЕС и ДЛИНА – это беззнаковые целые числа с порядком байтов: MSB…LSB. Конструкция и детали. Микроконтроллер ATmega8, 8L или 8A в DIP-корпусе. Можно использовать в корпусе TQFP, но у них нумерация и расположение выводов другое(см. datasheet).
В память микроконтроллера Atmega8 нужно записать программатором управляющую программу. Файл с программой – ‘main.hex’. После прошивки памяти программ нужно выставить и запрограммировать FUSE-биты. Есть 2 варианта FUSE-битов(для CVAVR):
Слева показан скрин конфигурации с отключенным супервизором питания, энергопотребление минимально и схема работоспособна при снижении питания где-то до 2,5В. Недостаток – возможно зависание микроконтроллера при сильном падении напряжения(например, батарейка разрядилась) или порча содержимого памяти EN25T80. У меня один раз так слетела прошивка флешки 25T80. Сейчас я использую этот вариант.
Внимание! При программировании FUSE-битов будьте осторожны. Неправильно установленная конфигурация может блокировать контроллер. В тяжелых случаях для “реанимации“ контроллера потребуется параллельный программатор или устройство Fuse Bit Doctor. Прошивка чипа FLASH-памяти. Чтобы часики заговорили нам нужно еще прошить микросхему памяти EN25T80. Это можно сделать специальным программатором. Но если его нет? Без паники:). Программа микроконтроллера уже содержит загрузчик данных в память. Для этого нам будет нужен преобразователь уровней на микросхеме MAX232(для обладателей компьютера с COM-портом), либо преобразователь интерфейса USB-UART типа FT232(CP2101, PL2303). Правильное соединение сигналов: Rx-Tx, Tx-Rx(т.е. крест-накрест). Будем считать, что он у вас уже есть и вы правильно подключились к разъему программирования J2 PROGRAM.
Если ничего не произошло или вылетела ошибка – сделали что-то не так. Ищем ошибку и пробуем снова. Режимы работы и настройка. Нужный режим работы часов выбирается перемычками JP1-JP3 до подачи питания или сброса микроконтроллера.
Время суток в режиме BABULYA: - Утро: 07:00 – 11:59 Для настройки текущего времени нажмите кнопку “CHANGE“ примерно на 1 секунду, часы скажут: “Настройка“. Мы попали в меню.
Если не нажимать кнопки 15 секунд, то часы сохраняют изменения и выходят из меню настроек. Запись голоса. Не нравится голос часов? Запишите свой! Лучше здесь конечно обратить внимание на серьезные звуковые редакторы, они предоставляют богатый инструментарий. Лично мне по душе пришелся Sound Forge.
На одном дыхании пишем голос. Далее эквалайзер(EQ) и Noise Gate добавить по вкусу. Потом выровнять громкость(Process->Normalize). На заключительном этапе обработки делаем ресэмплинг в 16КГц(Process->Resample) и сохраняем слова в отдельные файлы. Сохранять надо в файлы WAV с атрибутами PCM 16KHz, 8 bit, Mono.
Нажимаем кнопочку ‘Start’ и готово. Теперь мы можем залить новоиспеченную прошивку ‘out.bin’ в чип памяти, как это было указано выше. Некоторые идеи на будущее: - Использовать микроконтроллер ATmega48. У него порог супервизора BOD значительно ниже чем у ATmega8.
Слева показан скрин конфигурации с отключенным супервизором питания, энергопотребление минимально и схема работоспособна при снижении питания где-то до 2,5В. Недостаток – возможно зависание микроконтроллера при сильном падении напряжения(например, батарейка разрядилась) или порча содержимого памяти EN25T80. У меня один раз так слетела прошивка флешки 25T80. Сейчас я использую этот вариант. Справа скрин с включенным супервизором BOD. Микроконтроллер будет сбрасываться если напряжение упадет ниже 2,7В, потребление тока на 15мкА больше. Микроконтроллер не сможет повиснуть и испортить флешку, но потребление чуть больше и для работы требуются свежие батарейки. Решать вам какой вариант выбрать. Скрин для AVR Studio(супервизор BOD включен):
Файлы: Все вопросы в Форум.
|
|
|||||||||||||||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |