Просматривая просторы Интернет, обнаружил два замечательных проекта – «необычные часы» и «синтезатор речи для озвучивания времени», захотелось внести что–то свое, тем более, что качество синтезируемых звуков не слишком устраивало меня. Да и сам процесс подготовки содержимого SPI Flash нельзя назвать быстрым. Предпринятый поиск быстро вывел на модуль на основе чипа WTV020 (datasheet).
Модуль работает с SD – картами, отформатированными в FAT16 объемом не более 1 ГБ и воспроизводит в любой последовательности звуковые фрагменты в формате .ad4. Предусмотрено питание внутренних цепей модуля от встроенного стабилизатора на 3,3В, что очень удобно, поскольку на сам модуль тогда можно подавать 5 В (для этого надо только замкнуть площадку 5V со средней площадкой на плате модуля, предварительно, разомкнув перемычку из припоя с площадкой 3,3 V – это все хорошо видно на фотографии модуля). К выводам модуля 4 и 5 можно подключить динамик, а можно подключить и усилитель, но для этого следует использовать вывод 2 модуля. Очень удобно прямо на плате модуля подключить последовательно цепочку из SMD светодиода и резистора 910 Ом между выводом питания (16) и выводом Busy (15). Тогда хорошо видно как контроллер обменивается с модулем. В качестве излучателя звука я использовал китайскую мини – колонку. Строго говоря, в сети имеется много материалов по этому модулю, но приводимые циклограммы его работы различаются, поэтому пришлось подвергнуть сомнениям и данные datasheet’а и положится на полученные мною результаты.
Теперь немного о подготовке звуковых фрагментов для SD – карты. Исходным материалом для этих фрагментов служат wav – файлы, которые можно записать с помощью микрофона, пользуясь стандартными ресурсами Windows. Просто начитываем перед микрофоном время, например, говорим «ноль часов», делаем паузу 2 секунду (потом станет ясно, зачем пауза), далее – «один час», и так до 23 – х, в результате получаем файл и сохраняем его с расширением wav. После чего используем звуковой редактор, например, Sound Forge и в редакторе, при этом паузы служат как метки, режем этот файл на куски, которых должно быть 24 штуки. Каждый из полученных файлов снова загружаем в редактор и уменьшаем громкость на – 6дБ. Последнее очень важно, иначе звук будет искажаться! Запускаем программу USB Recording Notebook и конвертируем файлы в формат ad4.
Далее файлы формата ad4 необходимо переименовать в согласии с требованиями datasheet’а на модуль, т.е. 0000.ad4, 0001.ad4 и так далее до 0023.ad4, так будут записаны звуковые фрагменты для часов, соответственно, для минут нумерация начинается с 0100 до 0159. После этого записываем получившиеся файлы на карту. Подобным же образом обрабатываем и звуковые фрагменты, соответствующие минутам, температуре или чему Вы сами захотите. Кажется, что это сложно, но это совсем не так. Пример содержимого SD – карты находится в папке «voice».
Что касается самих часов – я довольно долго осваивал TFT дисплеи, поэтому решил использовать не такой редкий сейчас дисплей на контроллере iLi9325, а выпущенный ему на замену дисплей с контроллером S6D1121. Отличительной особенностью этого дисплея служит надпись 2,4’TFT 240x320 sod44pin справа на плате, на которой он установлен. Совсем непросто было понять, какой контроллер дисплея использовался, тем более, что китайский продавец на eBay клялся, что это – iLi9325, что, конечно же, оказалось совсем не так. Собственно говоря, главное при работе с TFT дисплеем это знать расположение и назначение выводов дисплея на плате, на которой он установлен (или распайку шлейфа дисплея), тип контроллера и последовательность его инициализации. В некоторых случаях, если известно расположение и назначение выводов дисплея подобного типа, то тип контроллера, можно установить, считывая нулевой регистр дисплея, Для этого мною было собрано устройство, разрядность шины которого переключалась вручную, а результат чтения нулевого регистра передавался в терминальную программу, но это уже другая тема.
Все эти знания у меня были, осталось только написать программу, что я и сделал (спасибо авторам форума MCS Electronics и авторам русского варианта «необычных часов» – смотрим ссылки выше), добавив в функционал часов еще и будильник. Код немного оптимизирован, в частности, вместо прорисовки линий для «кнопок» меню, выводились сразу прямоугольники, что позволило сэкономить около 6% программной памяти. Главным командой для работы со звуковым модулем является команда SHIFTOUT. Вид дисплея часов и меню приведен на фотографиях ниже.
На экране часов снизу справа желтым указано установленное время срабатывания будильника. Звукового фрагмента для будильника я не записывал, кто захочет, сможет это сделать сам. Для проверки в момент срабатывания будильника, слева от надписи 11:02 на дисплее появляется небольшой рисунок с колокольчиком, демонстрируя заодно вывод графических файлов в формате BGC. Там есть определенные тонкости…
В качестве часов реального времени использовался модуль, купленный на eBay (также как дисплей и сам звуковой модуль), с DS1307 на борту. Кстати, точность хода часов просто замечательная. Для согласования уровней (дисплей и звуковой модуль работают с уровнями 3,3 В) я использовал самодельные платки с делителями на SMD – резисторах. Дисплей можно применить и с другим контроллером, например SSD1289, обычно на таких контроллерах дисплеи имеют размер от 3 дюймов, в нашем случае это всего 2, 4 дюйма. Однако следует учитывать, что инициализация этого дисплея будет совершенно другой. Печатная плата для этого устройства не разрабатывалась (может быть, кто – нибудь отважится сам на это?), а применялся модуль Arduino на ATMega1280, прошивка заливалась прямо из среды Bascom. Какие есть нюансы? В связи с тем, что шина передачи данных примененного дисплея всего лишь 8 – ми разрядная, прорисовка символов происходит относительно медленно. Проводил эксперименты с кварцем на 24 МГц, что дало заметный прирост в скорости обновления информации на дисплее, однако по предыдущим моим конструкциям, наибольший прирост (XMega не рассматриваем) дает увеличение разрядности шины до 16 бит. Вот где уже наблюдаются ограничения по скорости семейства ATMega.
Теперь о дальнейшем развитии проекта - поскольку использовано меньше 50% памяти программ, и совсем немного емкости карты, открываются большие возможности для расширения функционала этого устройства – визуальные и голосовые меню с сообщениями о правильности ввода данных или предложения дальнейшего порядка действий. В общем, придумать можно все, что угодно, вплоть до интерактивного общения устройства с человеком. К тому же, выводов на контроллере хватает, можно добавить еще одну SD – карту, надо только организовать цепь выбора CS для этой дополнительной карты.
Код программы достаточно велик, поэтому комментариев немного, но разобраться можно. К сожалению, мне не удалось разделить его на несколько подключаемых файлов, кроме выделения файла с определениями "declarations.inc". На самом деле, процесс компиляции программы, состоящей из отдельных файлов, завершался успешно, но устройство после прошивки не работало. Этому факту я объяснения не нашел. Буду признателен, если кто – то сообщит, что ему удалось решить эту проблему.
Самым сложным, как ни странно, оказалось записать тот звук, который «произносит» это устройство (файл внизу). Видимо мой микрофон (ему лет 30) не в состоянии этого сделать с приличным качеством. На самом деле в железе все звучит намного приятней...
Материал большой, поэтому не исключаю недочеты, но у меня это устройство работает не меньше месяца на столе, впрочем, это просто демонстрация возможностей любимого Bascom’а!
Семпл записи
Небольшое видео работы
Исходные коды программы
Звуковые файлы
П рограмма USB Recording Notebook
Документация на WTV020
Материалы для статьи любезно предоставил давний друг сайта, Сергей aka Forter.
|