Главная » 2014 » Июнь » 16 » Говорящие часы на контроллере АВР
14:17
Говорящие часы на контроллере АВР

Приветствую всех! Так вот, как кто-то говорил, каждый радиолюбитель должен сделать часы, многие делали, а вот кто делал часы, способные говорить? Сейчас быстро это дело поправим! В статье предлагаю рассмотреть не только сами говорящие часы, но и работу с микросхемой RTC PCA/PCF2129 от NXP, которая на данном этапе будет основой часов. Со времен халявы должны быть у всех, а вот информации про нее очень мало.

Схема говорящих часов на AVR-микроконтроллере

Схема говорящих часов представляет собой народный микроконтроллер mega8 как сердце конструкции, ЖК дисплей на базе HD44780, линейный стабилизатор питания 7805 и модуль RTC на базе PCA2129, работающий по I2C с микроконтроллером. Для корректной работы I2C в цепях SCL и SDA не забываем про pull-up резисторы. 

Динамики на 4 Ом можно использовать без усилителя, громкость будет вполне нормальная для тестирования, но для домашнего использования нужен хоть какой-то минимальный усилитель. Заменив светодиод на ключевой элемент, например транзистор или реле, можно управлять тем же усилителем или просто включать свет, на что фантазии хватит. 7805 можно заменить на любой другой стабилизатор напряжения на 5В. Резисторы все СМД типоразмера 1206, можно заменить на любые другие выводные или другого типоразмера СМД. Номиналы электролитов можно варьировать в широких пределах. Керамические конденсаторы СМД типоразмера 1206, заменить можно на любые другие выводные или других типоразмеров СМД. Диоды 1n4148 или любые аналогичные, а вообще еще лучше заменить на стабилизатор 3,3 В и запитать от него всю схему, не забыв про +5В для ЖК дисплея. Контроллер можно использовать как в DIP корпусе, так и в tqfp. Тактовые кнопки абсолютно любые.

Какие функции выполняет устройство:

  • индикация времени на ЖК
  • индикация даты и дня недели на ЖК
  • индикация будильника на ЖК
  • воспроизведение времени при нажатии соответствующей кнопки, причем голоса или треки с временем можно использовать любые, предварительно сконвертировав в Wav формат
  • возможность на будильник поставить любой трек, тоже в Wav (обязательное название для трека "alarm.wav")
  • меню настроек будильника (время и включенность)
  • меню настроек времени
  • меню настроек даты
  • при воспроизведении загорается светодиод (можно использовать для включения усилителя или чего-то другого)

Ниже будет представлено 2 прошивки - для воспроизведения Wav с частотой 32 КГц и с частотой 44 КГц. Как же правильно конвертировать аудио файлы? Все просто - качаем любой аудио конвертер и задаем параметры 8-bit Mono 44 kHz или 8-bit Mono 32 kHz, далее все в корень флешки. Также ниже архив с голосом Алены из "Балаболки", там же и как пример как правильно обзывать файлы в случае, если будете записывать что-то свое. Из фишек можно отметить то, что если с прошивкой 44 кГц использовать аудио 32 кГц, получится на выходе смешной мультяшный голос, слегка ускоренный, и, если наоборот, то чуть замедленный грубый голос. В общем в этом плане можно поиграться с частотой конвертации, главное не слишком увлекаться.

Что касается управления и настроек. В устройстве 5 кнопок. По логическому порядку:

  • S2 - нажимаем и нам воспроизводится текущее время на часах
  • S5 - вход в настройки и перебирание настроек
  • S4 - управление переменными в настройке (все переменные идут по кругу, при нажатии увеличение на 1, при переполнении переход в минимальное значение, при длительном нажатии +1 идет само или автоматически)
  • S1 - при нажатии в любом пункте меню немедленный выход на главную времени и даты, на главной, при звонке будильника нажатие выключает будильник, но тоько по окончании воспроизведения трека (это если любимую пеню поставить)
  • S3 - reset, также вырубает будильник сразу

Часы поддерживают флешки от 16 Mb до 8 Gb (до 32 Gb не проверял, но тоже должно)

Фото меню:

Устройство собиралось на макетной плате

Клубок проводов на первый взгляд) Динамик 3ГДШ-4-4 4Ом, макетка mega8, модули 4 кнопки, RTC и карта памяти (просто и со вкусом к адаптеру подпаяны штырьки), конденсатор чуть поболе 220 мк, но разницы нет особо

А вот модуль RTC, главный виновник устройства, разведен с учетом преобразователя уровней, зачем? чуть ниже, там же и печатная плата

 

По поводу RTC. По данным даташита рабочее напряжение 1,8 - 4,2 В. Соответсвенно и уровни по шине I2C не будут 5 В, поэтому и используется преобразователь уровней PCA9517, работает и без него вроде, но так правильнее, тем более это модуль, который можно будет использовать в любой другой схеме не опасаясь за безопасность, а вообще если просто всю схему запитать от 3,3 В, то убрать можно 100%, но ЖК все рано требует не меньше 5 В по питанию (пожалуй единственный модуль которому в этой схеме нужно 5В). 

Плавно переходим к работе PCA/PCF2129. Между прочим, разница между ними только в количестве n.c. ножек и размере корпуса - функционально клоны. На ПП 2 варианта - для работы по I2C и по SPI. Выбираем I2C, т.к. в планах развития заменить на DS1307, вообще в планах много чего, но об этом позже. 

Итак, заглядываем в даташит, имеется у нас 28 регистров в этой микросхеме, круто это же столько функций! Время, дата, будильник, прерывания, сторожевой таймер, подстройка частоты кварца, тайм-штамп. Одним из самых главных плюсов является встроенный в саму микросхему кварц и его термокомпенсация, производитель обещает небывалую точность хода! Пожалуй только 2 минуса можно найти, хотя, даже один: размер мне, например, не критичен, но упомянуть стоит (корпус и правда здоровенный относительно той же 1307) и ценник.

Рассмотрим работу с RTC, хотя все то обилие функций нам не понадобится, которое имеется на борту. Для начала берем аппаратные или программные функции I2C или TWI (чтение, запись и прочее).

Определяемся как работать с микросхемой, способ чтения и записи (картинка из даташита):

Между прочим, и в даташитах бывают ошибки, поэтому внимательно, несколько раз попадались не правильные адреса и долго думал почему же не работает.

1
2
3
// дефайны адресов микросхемы
#define RTC_adr_write 0b10100010
#define RTC_adr_read  0b10100011

Для записи: посылаем START, адрес записи, потом адрес регистра (если хотим записать время, например, то адрес регистра 03h - это секунды), далее 8 бит информации и STOP.

Для чтения: START, адрес записи, потом адрес регистра и STOP (это для того чтобы установить указатель на нужный для чтения регистр), далее START, адрес чтения и читаем данные, в конце STOP.

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

Думаю, разобраться будет не сложно. Главное, это же что - знания, добытые недюженными усилиями.

Как происходит воспроизведение текущего времени? Все просто. В зависимости от переменных часов и минут выбираются 2 соответствующих файла на флешке и воспроизводятся.

Для воспроизведения wav использовалась библиотека Petit FatFS Chan'a, за что ему большое спасибо.

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

Для программирования МК:

Можно работать  с внутренним RC генератором, как во фьюзах на скрине, а можно и от кварца 8МГц, разницы нет, только изменить SUT_CKSEL

Из минусов схемы: только шумок при воспроизведении аудио, на небольшой громкости вообще не заметно, но все же. Вызвано тем, что wav воспроизводится с самого начала файла, а там в начале НЕполезные данные есть, которые также в динамик пихаются, вызвано это ограниченностью памяти mega8, на другом контроллере этот эффект, думаю, будет полностью убран дополнительной функцией в коде.

Чего ожидать в будущем: если эта схема окажется нужной и популярной, планирую заменить RTC на DS1307, добавить термометр (скорее всего LM75 по I2C), контроллер заменить на mega168 или другой с более чем 8 кб памяти, т.к. воспроизведение wav есть очень много, добавить сценарии озвучки, будет не только воспроизводить время и будильник, но и здороваться с хозяином или что-то подобное, озвучивание каких-либо других статусов, добавить усилитель в схему, в меню добавить коррекцию хода часов, убрать коротенький писк в начале воспроизведения аудио.

Прикрепленные файлы:

Взято с http://cxem.net/

Просмотров: 2725 | Добавил: Дмытрохан | Теги: Sprint-Layout, HD44780, AVR, I2C, микроконтроллер, SD card, LCD, часы, wav | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Яндекс.Метрика
24 log 24 LOG statistick
счетчик посещений
Если вы видите это,
то ваш браузер устарел
и не поддерживает технологий
CSS 3.0