РадиоКот :: Говорящие часы "BABULYA CLOCK"
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Бытовая техника >

Теги статьи: Добавить тег

Говорящие часы "BABULYA CLOCK"

Автор: Сергей Козлов
Опубликовано 21.02.2012
Создано при помощи КотоРед.

Настал момент, когда моя бабуля перестала ориентироваться в показаниях обычных  часов. Покупка китайских говорящих часиков не особо спасла ситуацию. Нужны были специальные часы, произносящие время в 12-часовом формате и говорящие время суток(утро-день-вечер-ночь). Но таких же не продают!? К счастью я немножко знаю электронику и программирование микроконтроллеров...

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

Возможности часов:

- ориентированы на батарейное питание;

- время в 12- и 24-часовом формате;

- день недели и время суток;

- автоматическое произношение времени каждый час.

Принципиальная схема.

Часы реализованы на распространенном микроконтроллере U1 Atmega8. Большее время он находится в глубоком сне, в котором работает лишь часовой генератор на кварце ZQ1 32768Гц и потребляет минимум энергии(20-30мкА). Когда пользователь нажимает на одну из кнопок(например на S2), запускается внутренний генератор на 8Мгц, контроллер просыпается. Затем микроконтроллер открывает транзистор Q1 и на микросхему УНЧ U3 подается питание.
Звук с ШИМ снимается с вывода 15 U1. Сигнал проходит через ФНЧ на элементах R3,R4,C2,C3 , на выходе которого образуется огибающая, пригодная для дальнейшего усиления. Потенциометр RV1 устанавливает уровень(громкость) звука. Микросхема памяти U2 содержит записанные звуки времени. После проговаривания времени отключается УНЧ, память переводится в микромощный режим и микроконтроллер снова уходит в режим сна.
УНЧ U3 имеет отдельный специальный вход CD для отключения и перевода схемы в малопотребляющий режим. Однако в данном режиме через микросхему протекает целых 100мкА. Разумеется, что для батарейного варианта питания это слишком много. Поэтому для полного отключения УНЧ используется  транзистор Q1.
Перемычками JP1, JP2 и JP3 выставляется требуемый режим работы до подачи питания(или сброса).
К разъему J2 подключается преобразователь интерфейсов RS232-UART на MAX232(или USB-UART на FT232) для прошивки памяти U2.
К разъему J1 подключается батарея на 3 вольта, а к J3 - на 6 вольт. Наличие двух источников питания обусловлено тем, что микросхема памяти работает от 3-х вольт, а УНЧ при низком напряжении уже не дает такого громкого и чистого звучания. Кроме того, УНЧ при громких звуках потребляет 100-150мА, при одной подсевшей батарее это просто приводило бы к сбросу контроллера.

Алгоритм работы(описание для программистов).

После подачи питания на схему происходит автокалибровка 8МГц RC-генератора по образцовому генератору на часовом кварце. Калибровка необходима т.к. частота RC-генератора сильно зависит от приложенного напряжения питания и температуры микроконтроллера. В моем случае без калибровки частота была около 7,3МГц. Понятно, что при таком отклонении частоты связь с компьютером для загрузки данных невозможна, а голос звучит не очень естественно. Для нахождения калибровочного значения для регистра OSCCAL используется быстрый алгоритм двоичного поиска, хорошо описанный в [1]. При поиске нужного значения он требует всего 8 сравнений. Я немного модифицировал алгоритм для нахождения наиболее близкого значения(ошибка менее 1%).
Когда калибровка заканчивается, программа считывает состояние перемычек(JP1-JP3) и переходит в режим сна POWER SAVE(программирование отключено) или просто режим ожидания(программирование включено). Если пользователь нажмет на кнопку “TALK“, сработает прерывание по низкому уровню, контроллер выйдет из сна, скажет время(в момент проговаривания тоже по максимуму используется сон IDLE, чтобы снизить потребление тока ) и потом снова уйдет в сон POWER SAVE. Чип FLASH памяти также получает команду “DEEP POWER DOWN“ чтобы минимизировать энергопотребление.
Если режим программирования разрешен и по UART приходит команда, то контроллер входит в режим программирования. FLASH-память стирается и принимаемые данные пишутся 256-байтными страницами. После окончания процесса программирования происходит сброс микроконтроллера.
FLASH-память 25T80 содержит звуки из которых строятся фразы. Вначале памяти идет информация о звуках(информационная секция), далее – сами звуки(секция данных).

Каждая звуковая запись в информационной секции занимает по 8 байт. АДРЕС и ДЛИНА – это беззнаковые целые числа с порядком байтов:  MSB…LSB.

Конструкция и детали.

Микроконтроллер ATmega8, 8L или 8A в DIP-корпусе. Можно использовать в корпусе TQFP, но у них нумерация и расположение выводов другое(см. datasheet).
Динамик LS1 должен быть сравнительно высокоомным(8 и более Ом), он был найден в старом китайском радио.
Вместо УНЧ MC34119 можно попробовать использовать TDA2822M или что-нибудь аналогичное с низким напряжением питания и соответствующей доработкой принципиальной схемы.
Q1 – можно поставить IRLML2402 или любой другой N-канальный полевик с логическим управлением на ток более 200-300мА. Для получения большего тока транзисторы допускается соединять параллельно.
Схема была собрана на куске макетки. В качестве корпуса была выбрана прочная полиэтиленовая емкость с крышкой. На верхней стенке установлена тактовая кнопка «TALK», кнопка настройки «CHANGE» спрятана внутрь, чтобы пользователь не смог случайно сменить время. 


Прошивка микроконтроллера.

В память микроконтроллера Atmega8 нужно записать программатором  управляющую программу.  Файл с программой – ‘main.hex’. После прошивки памяти программ нужно выставить и запрограммировать FUSE-биты. Есть 2 варианта FUSE-битов(для CVAVR):

Слева показан скрин конфигурации с отключенным супервизором питания, энергопотребление минимально и схема работоспособна при снижении питания где-то до 2,5В. Недостаток – возможно зависание микроконтроллера при сильном падении напряжения(например, батарейка разрядилась) или порча содержимого памяти EN25T80. У меня один раз так слетела прошивка флешки 25T80. Сейчас  я использую этот вариант.
Справа скрин с включенным супервизором BOD. Микроконтроллер будет сбрасываться если напряжение упадет ниже 2,7В, потребление тока на 15мкА больше. Микроконтроллер не сможет  повиснуть и испортить флешку, но потребление  чуть больше и для работы требуются свежие батарейки. Решать вам какой вариант выбрать.
Скрин для AVR Studio(супервизор BOD включен):

Внимание! При программировании FUSE-битов будьте осторожны. Неправильно установленная конфигурация может блокировать контроллер. В тяжелых случаях для “реанимации“ контроллера потребуется параллельный программатор или устройство Fuse Bit Doctor.

Прошивка чипа FLASH-памяти.

Чтобы часики заговорили нам нужно еще прошить микросхему памяти EN25T80. Это можно сделать специальным программатором. Но если его нет? Без паники:).  Программа микроконтроллера уже  содержит загрузчик данных в память. Для этого нам будет нужен преобразователь уровней на микросхеме MAX232(для обладателей компьютера с COM-портом), либо преобразователь интерфейса USB-UART типа FT232(CP2101, PL2303). Правильное соединение сигналов: Rx-Tx, Tx-Rx(т.е. крест-накрест). Будем считать, что он у вас уже есть и вы правильно подключились к разъему программирования J2 PROGRAM.
Замыкаем перемычку JP2 PROGRAM, даем питание на схему.  Запускаем утилиту Sound Loader, выбираем файл ‘out.bin’, выставляем нужный COM-порт(куда подключена наша железка) и жмем на кнопку ‘Load’. Если все было сделано правильно, то в поле ‘Status’ будет выведено ‘Chip erasing’. Секунд через 10 побегут цифры –запись пошла.

Если ничего не произошло или вылетела ошибка – сделали что-то не так. Ищем ошибку и пробуем снова.
После прошивки памяти обязательно уберите перемычку JP2 и перезагрузите контроллер(снять-подать питание).  Если этого не сделать, то схема не уйдет в сон и будет кушать от батарейки несколько миллиампер вместо микроампер.

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

Нужный режим работы часов выбирается перемычками JP1-JP3 до подачи питания или сброса микроконтроллера.

Перемычка

Замкнута

Разомкнута

JP1 BABULYA

Режим =BABULYA CLOCK=, 12-часовой формат времени.

После нажатия на кнопку “TALK”, время произносится без минут: “Одиннадцать часов ночи”. Повторное нажатие в течение 15 секунд – день недели: Сегодня понедельник.

24-часовой формат времени.

После нажатия на “TALK” часы издадут сигнал и скажут текущее время: “Двадцать три часа тридцать пять минут”. Время суток и день недели не произносится.

JP2 PROGRAM

Часы готовы к программированию FLASH-памяти. Часы не уходят в сон и потребляют много энергии.

Часы не готовы к обмену данными с компьютером и потребляют минимум энергии.

JP3 AUTOTALK

Каждый час, с 8:00 и до 21:00 часы будут автоматически проговаривать текущее время.

Часы не будут автоматически проговаривать текущее время.

Время суток в режиме BABULYA:

- Утро:  07:00 – 11:59
- День: 12:00 – 16:59
- Вечер: 17:00 – 20:59
- Ночь: 21:00 – 06:59.

Для настройки текущего времени нажмите кнопку “CHANGE“ примерно на 1 секунду, часы скажут: “Настройка“. Мы попали в меню. 
Для передвижения между пунктами меню нажимайте кнопку “TALK“, для смены значения выбранного пункта – кнопку “CHANGE“.

Если не нажимать кнопки 15 секунд, то часы сохраняют изменения и выходят из меню настроек. 

Запись голоса.

Не нравится голос часов? Запишите свой! Лучше здесь конечно обратить внимание на серьезные звуковые редакторы, они предоставляют богатый инструментарий. Лично мне по душе пришелся Sound Forge.

На одном дыхании пишем голос. Далее эквалайзер(EQ) и Noise Gate добавить по вкусу. Потом выровнять громкость(Process->Normalize). На заключительном этапе обработки делаем ресэмплинг в 16КГц(Process->Resample) и сохраняем слова в отдельные файлы. Сохранять надо в файлы WAV с атрибутами PCM 16KHz, 8 bit, Mono.
Теперь запустим программу Sound Prepare utility и укажем ей текстовый файл со списком звуковых файлов. В моем случае этот файл называется ‘sound_project.txt’. Важно, чтобы список находился в одном каталоге вместе со звуковыми файлами. Туда же будет помещен итоговый файл прошивки ‘out.bin’.

Нажимаем кнопочку ‘Start’ и готово. Теперь мы можем залить новоиспеченную прошивку ‘out.bin’ в чип памяти, как это было указано выше.

Некоторые идеи на будущее:

- Использовать микроконтроллер ATmega48. У него порог супервизора BOD значительно ниже чем у ATmega8.
- При включении и отключении динамик издает щелчок. Подобрать бы УНЧ с «мягким» стартом.
- Добавить информирование о том, что батарея разрядилась.
- Встроить алгоритм коррекции времени для компенсации отклонений частоты у разных часовых кварцев.

Использованные ресурсы:
1.    Х.М. Дейтел. «Как программировать на С++», стр.288.
2.    AVR053: Calibration of the internal RC oscillator
3.    Rtc - Real talking clock - говорящие часы https://svalka-spb.narod.ru/rtc/
4.    Говорящие часы  https://www.graycatsoft.com/      

Слева показан скрин конфигурации с отключенным супервизором питания, энергопотребление минимально и схема работоспособна при снижении питания где-то до 2,5В. Недостаток – возможно зависание микроконтроллера при сильном падении напряжения(например, батарейка разрядилась) или порча содержимого памяти EN25T80. У меня один раз так слетела прошивка флешки 25T80. Сейчас  я использую этот вариант.

Справа скрин с включенным супервизором BOD. Микроконтроллер будет сбрасываться если напряжение упадет ниже 2,7В, потребление тока на 15мкА больше. Микроконтроллер не сможет  повиснуть и испортить флешку, но потребление  чуть больше и для работы требуются свежие батарейки. Решать вам какой вариант выбрать.

Скрин для AVR Studio(супервизор BOD включен):

Файлы:
Прошивка МК и исходники
Софт для ПК


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

91 0 0
3 0 0