Главная » Статьи » Проекты

Часы-будильник по мотивам "необычных часов"
  Просматривая просторы Интернет, обнаружил два замечательных проекта – «необычные часы»   и «синтезатор речи для озвучивания времени»,  захотелось внести что–то свое, тем более, что качество синтезируемых звуков  не слишком устраивало меня. Да и сам процесс подготовки содержимого 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.
 
Категория: Проекты | Добавлено: 09.11.2013
Просмотров: 39072 | Комментарии: 29 | Теги: S6D1121, iLi9325, дисплей, WTV020 | Рейтинг: 5.0/8
Всего комментариев: 29
29 Scorpushka   (22.10.2014 20:57) [Материал]
запустил такой дисплей, не совсем понятно, откуда берутся координаты от сенсора, кто в теме-стукните в личку. спасибо

+1   Спам
28 forter   (18.01.2014 17:47) [Материал]
To Valera18!
Вывод контроллера RD позволяет читать содержимое некоторых регистров дисплея.
Я писал, что чтение нулевого регистра, в большинстве случаев (к сожалению, именно - в большинстве) позволяет узнать тип контроллера. Как запись, так и чтение из контроллера дисплея происходит по переходу (фронту) из 0 в 1 (поэтому соединение его с общим или питанием не играет особой роли). Вообще, однозначно рекомендую этот вывод через резистор в несколько килоом подключать к шине питания. Были случаи, когда дисплеи работали нестабильно, если вывод болтался в воздухе.

27 max   (18.01.2014 15:21) [Материал]
Ясно.

26 kestrel   (18.01.2014 13:49) [Материал]
S6D1121, мне ещё потом дисплей пришёл 3,2' там уже ssd1289 тот завелся сразу (в 16 битном режиме + sd карточка) в 16 битном режиме работает заметно пошустрее

25 max   (18.01.2014 11:52) [Материал]
Не вопрос. Какой контроллер у дисплея в итоге?

24 kestrel   (17.01.2014 23:48) [Материал]
я нашел то, что искал! Запустил дисплей, спасибо max за ссылки на этом, и этом (http://bascomavr.3bb.ru/) сайте.

23 Valera18   (17.01.2014 18:47) [Материал]
На LCD есть порт RD.
Интересно, то что
подаёшь 1 на порт RD - LCD работает.
подаёшь 0 на порт RD - LCD работает.
Не понятно для чего нужен порт RD?

22 kestrel   (09.01.2014 23:03) [Материал]
всем привет
я заранее извиняюсь за тупой вопрос, ткните где взять вот это (MMCSD_HC.LIB)
заранее спасибо

+1   Спам
21 vikov   (09.01.2014 22:38) [Материал]
Выложил на форуме

+1   Спам
20 max   (08.01.2014 21:50) [Материал]
Выкладывай.

19 vikov   (08.01.2014 20:21) [Материал]
Добрый вечер! Сегодня заработало но с совершенно с другими таймингаим и по другой схеме и программе. Если интересно кому опубликую.

18 vikov   (07.01.2014 20:52) [Материал]
Здравствуйте! Всех с новым годом! Получил я с Ebay WTV020-SD-mini V1.5. Сегодня бился с ним 5 часов. В ручном режиме если прижимаю Key выводы к земле файлы воспроизводятся. Вырвал кусок из программы уважаемого exersizze где мк общается с модулем ничего не работает. Переписал через set/reset задвижку. Saleae и там и здесь показывает сходные картинки. Тайминги выставил по даташиту. Модулей несколько. Правда от одного продавца. Первый пробовал запустить от 5 в. Остальные от 3,3. Картина одна и тажа. Полностью зовется зверь U-disk audio player SD card voice module MP3 Sound module WTV020-SD-16P Arduino. Может кто поможет?

17 max   (29.12.2013 13:04) [Материал]
Для проверки подключите как здесь: http://bascom.at.ua/publ/neobychnye_chasy/1-1-0-83 и как в этой статье, только через шилд. Если заработает, будет ясно, какой контроллер стоит. Если нет, то, возможно, SSD1289, хотя сомневаюсь. Китайцы иногда дают не точную информацию(как Автору этой статьи).

16 kestrel   (29.12.2013 12:17) [Материал]
max привет, спасибо что ответил, дисплей брал здесь http://www.aliexpress.com/snapshot/292092811.html, и еще прикупил к нему вот такой шилд http://www.aliexpress.com/snapshot/304402555.html

15 max   (29.12.2013 09:57) [Материал]
kestrel, а не путаете? Точно SSD1289? Может ILI9325? Лично мне не встречались 2.4" на SSD1289. Можете показать ссылку, где брали дисплей?

14 kestrel   (29.12.2013 00:17) [Материал]
а, можно исходник подправить под дисплей с контроллером SSD1289 (пришел мне с ali TFT 2.4') хотелось бы на длинных выходных заняться, был бы очень признателен

+1   Спам
13 forter   (25.12.2013 19:48) [Материал]
to Scorpushka!
Дисплеев полно всяких, только вот предложенный Вами имеет разрешение 800х480, а это значит, что заполняться он будет чуть ли не минуту, даже при 16-тиразрядной шине.
Здесь потребуется, минимум, какая - нибудь ATXmega, чтобы обновлять экран хотя раз в секунду...

12 Scorpushka   (25.12.2013 10:33) [Материал]
еще есть и такое http://www.ebay.com/itm/new-7inch-7-0-800-480-TFT-LCD-Module-Display-Touch-Panel-SSD1963-For-51-AVR-/111140237971?pt=LH_DefaultDomain_0&hash=item19e0797293

11 exersizze   (14.11.2013 00:00) [Материал]
forter , напротив, качество звука у этого модуля, судя по видео, очень высокое. Возьму ка себе тоже парочку таких модулей.

10 forter   (13.11.2013 23:24) [Материал]
Устройство говорит моим голосом.
Когда записывал, держал телефон одной рукой, пытаясь сфокусировать, и одновременно другой рукой тыкал в тачскрин стилусом...
Каждый выход из меню произносится время, а так у меня на стоял бубнит каждую минуту.
Только я не понял,звук совсем не нравится?

9 exersizze   (13.11.2013 21:28) [Материал]
Мне Сергей скинул видео работы, пока не могу загрузить - скорость никакая. Звук такой что и не поймешь кто говорит время - сам Сергей или же его устройство smile ну это и понятно, WTV020 всетаки заточен под эту задачу.

UPD: получилось таки загрузить, пока подержу у себя поэтому прямая ссылка для скачивания видюшки
http://avrproject.ru/Talking_watch.mp4

8 forter   (13.11.2013 20:33) [Материал]
Спасибо,radan!
Обязательно попробую, а то я уж совсем отчаялся.
С такими программами, действительно, трудно работать - пока прокрутишь из начала в конец, забудешь уже, что хотел найти.

+1   Спам
7 radan   (13.11.2013 15:41) [Материал]
В новом синтезаторе качество воспроизведения значительно улучшилось - http://bascom.at.ua/2013/WAV/test02.wav
"На самом деле, процесс компиляции программы, состоящей из отдельных файлов, завершался успешно, но устройство после прошивки не работало. Этому факту я объяснения не нашел."
У меня в одном большом проекте была такая же ситуация.
Одним файлом работать неудобно, а на несколько побить не получалось.
Компилировалось, но не работало.
Не знаю, зачем я вынес сами подключения отдельных файлов в конец листинга основной, но после этого всё заработало.
Скорее всего это как то связано с неудачным распределением памяти программы.
Может быть и у вас получится таким образом подключить?

6 max   (10.11.2013 15:27) [Материал]
Да, на SSD1289 - прикольно, а еще лучше - SSD1963.

5 exersizze   (10.11.2013 14:51) [Материал]
Поправил в тексте

+1   Спам
4 forter   (10.11.2013 14:07) [Материал]
Приношу свои извинения, по невнимательности в тексте статьи указал, что звуковые файлы минут нумеруются с 0000 до 0059. Их нужно нумеровать, например, от 0100 до 0159 (в приложенном файле содержимого SD - карты все правильно нумеруется).
По поводу дисплеев с контроллером iLi9325 - просто, как я писал, мне вместо него прислали дисплей с контроллером S6D1121. Сейчас, действительно,дисплеев с контроллером iLi9325 полным - полно и на Ali, и на ebay. Но они почти все (дисплеи)имеют диагональ не больше 2,4 дюйма. А контроллеры SSD1289, в основном, обслуживают дисплеи с диагональю, начиная с 3 дюймов. Так что применение дисплеев с контроллером SSD1289, на мой взгляд, более интересно.

3 max   (10.11.2013 11:47) [Материал]
Зачет.
По поводу дисплея - на aliexpress.com полно с контроллером ILI9325, сам там несколько заказывал.

2 forter   (09.11.2013 23:11) [Материал]
Здравствуйте, коллеги!
Речь идет именно о таком дисплее, как указано по ссылке Scorpushka.
Не очень понятно, что нужно еще отразить по работе с дисплеем, по крайней мере, именно с этим. Инициализация есть, а это - главное. Как рисовать точки, линии, прямоугольники - тоже есть. С графикой типа .bgc указано как работать в коде программы. Текст выводится.
Только вот я здесь AVR-DOS не использовал, но у меня есть примеры кода в Bascom для SSD1289 для работы с AVR-DOS с выводом bmp-файлов на дисплей. Все подпрограммы одинаковые для разных дисплеев - достоинство языка высокого уровня, отличаются, по большей части, только инициализацией. Кстати, заметьте, что в дисплее по ссылке можно переключиться в 16 -ти битовый режим, замкнув площадки J3, а я совсем и забыл об этом - работать будет значительно быстрее.
Видео снять постараюсь. Обнаружилось, что я не мастер записывать даже звук...

1 exersizze   (09.11.2013 22:06) [Материал]
По описанию подходит, а на такой дисплей сам зуб точу давно. Проектов в bascom с ними уже много в сети, можно изучать.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






авторизация