Говорящие часы TalkingLEDClock Часть 3: Прошивка

В 3-й части мы познакомимся с программной составляющей данного проекта и разберемся с функциональностью часов TalkingLEDClock. Предыдущую часть можно найти тут, все статьи находятся здесь.

Дополнение ко 2-й части

Сначала хочу сделать несколько дополнений к прошлой статье.

1. Модуль усилителя на PAM8403

Так как в данном модуле не выведен сигнал отключения усилителя, необходимо произвести некоторую доработку модуля. Для начала открываем Datasheet на микросхему PAM8403 и находим вот эту картинку:

Рис. 1. Микросхема PAM8403 

Нас интересует вывод 12, который называется SHDN. Если на этом выводе установить уровень логического нуля, то усилитель PAM8403 отключается. Задача состоит в отключении этого вывода от +5 вольт на плате и подпайки к нему куска гибкого провода для последующего подключения этого сигнала к основной плате часов.

Доработку производил следующим образом. Сначала паяльным феном снимаю микросхему с платы:

Рис. 2. Перемычка между 12 и 13 выводами микросхемы

Между 12 и 13 выводами видим перемычку, которую необходимо удалить:

Рис. 3. Место перемычки

После этого запаиваю микросхему PAM8403 обратно и припаиваю проводок к 12-му выводу:

Рис. 4. Модуль PAM8403 после доработки

На этом доработка завершена. Все это можно было выполнить каким-либо другим способом, но я решил сделать именно так.

После этого устанавливаем разъемы типа «гребенка» в отверстия на плате и запаиваем их как показано на фото:

Рис. 5. Модуль усилителя перед установкой на основную плату часов

Так как в моем случае места в корпусе оказалось очень мало и динамик часов упирался в модуль усилителя, необходимо удалить желтые пластиковые элементы с «гребенок» перед установкой модуля на основную плату. Это позволяет выиграть лишние 2 миллиметра пространства, которых не хватало. После установки модуля необходимо срезать лишнюю длину гребенок с обеих сторон:

Рис. 6. Модуль PAM8403 установлен на основную плату

Провод от 12-го вывода микросхемы припаивается вот в это отверстие на плате:

Рис. 7. Отверстие подключения управляющего провода от PAM8403

2. Конденсатор С2 и С10

Конденсатор С10 диаметром 4 мм, емкость 22 мкф устанавливается боком. С2 диаметром 5 мм, емкость 100 мкф устанавливается с обратной стороны платы так же боком.

Рис. 8. Электролитические конденсаторы C2 и С10

После сборки всей конструкции нижняя часть динамика немного упирается в конденсатор C10, что предотвращает сильное прогибание корпуса часов и не допускает короткое замыкание от прикосновения динамика к модулю усилителя DA2.

3. Отладочная плата с МК STM32

Перед запайкой «гребенок» на отладочную плату STM32, желательно удалить из этой «гребенки» контакты выводов C15, C14 и C13 как показано на рисунке:

Рис. 9. Выводы, которые необходимо удалить на разъеме крепления отладочной платы

К этим выводам подключен часовой кварцевый резонатор на 32768 Гц и лишняя емкость в виде болтающихся в воздухе контактов разъема на этих линиях противопоказана.

На этом с дополнениями все, переходим к основной теме статьи 😉

Прошивка

Прошивка для данных часов состоит из двух частей:

  1. Управляющая программа для МК STM32
  2. Дамп для SPI-FLASH памяти с музыкальными фрагментами

После сборки часов первым делом необходимо прошить микроконтроллер STM32. Для этого нам понадобится программатор ST-Link, который подключается к 4-х контактной гребенке на отладочной плате. Нам понадобятся только 3 пина: GND, CLK, DIO. С небольшой инструкцией можно ознакомиться тут или на каком-либо стороннем ресурсе. После успешной загрузки прошивки в МК, отключаем питание часов и снова включаем, при этом часы должны запуститься и начать отсчет времени.

Теперь наступает время для следующего шага: загрузка дампа с музыкальными фрагментами в SPI-FLASH память AT45DB321. Для этого нам понадобится переходник USB-UART, либо RS232-UART с логическими уровнями 3,3 вольта. Я для этих целей использую китайский переходник на базе PL-230HX. Не самый лучший выбор, так как у него имеются некоторые проблемы с драйверами, но вариант рабочий. Подключается он к разъему XP3 на плате часов. Распиновка разъема представлена на рисунке ниже:

Рис. 10. Распиновка разъема UART

Подключение переходника выполняется так: GND->GND, RX->TX, TX->RX. Затем необходимо перевести часы в режим прошивки SPI-FLASH. Для этого отключаем питание часов, зажимаем кнопки «Alarm» и «-» (две крайние на верхней панели) и включаем питание. Если все сделано правильно, то дисплей часов гореть не должен.

Перейдем к программе для прошивки дампа SPI-FLASH на стороне ПК. Для этих целей служит консольная утилита tc_flasher.exe. На вход она принимает несколько параметров, включая имя файла с дампом и номер COM-порта, через который будет производиться загрузка этого дампа. Для удобства я написал два .bat файла, один для загрузки дампа в SPI-FLASH (programm.bat), другой для чтения (read.bat). Перед запуском соответствующего .bat файла, необходимо его немного подправить, а именно указать правильный номер COM-порта.

Для примера рассмотрим programm.bat. Нажимаем на нем правой клавишей мыши, выбираем пункт «Изменить». Файл открывается в блокноте и его содержимое имеет следующий вид:

tc_flasher.exe dump.bin COM5 w

Здесь нам надо только COM5 исправить на нужный номер порта. После этого сохраняем изменения, закрываем блокнот. В папке с tc_flasher.exe должен лежать файл с дампом флешки с именем dump.bin. Для запуска процесса достаточно 2 раза щелкнуть мышкой по файлу programm.bat. После этого откроется консоль, в которой будет выводиться прогресс загрузки дампа во флеш-память:

Рис. 11. Загрузка дампа флеш-памяти с помощью утилиты tc_flasher.exe

После завершения процесса в консоль будет выведено соответствующее сообщение:

Рис. 12. Сообщение о завершении загрузки

Бывают ситуации, когда процесс загрузки дампа может зависнуть. В этом случае процесс придется повторить заново, начиная с отключения питания часов и переводом их в режим программирования флеш-памяти с музыкальными фрагментами. Недоработочка однако, исправлю как-нибудь потом 🙂

Итак, после успешной загрузки дампа, отключаем питание часов, отключаем все переходники и подаем питание снова. Часы готовы к работе 🙂

Создание дампа с музыкальными фрагментами

Итак, мы разобрались с процедурой загрузки всех необходимых файлов в наши свежесобранные часики. Но что если мы хотим изменить голос озвучки часов или добавить новые сигналы будильника? Для начала давайте разберемся, как устроен дамп с музыкальными фрагментами.

Дамп SPI-FLASH в себе содержит следующее:

  1. Звуковые семплы речевого информатора
  2. Звуки будильников

Описание речевого информатора можно найти тут, он почти не изменился с предыдущей версии часов. Если кратко, то для создания звукового сообщения речевой информатор последовательно включает нужные звуковые фрагменты в нужном порядке. Например, чтобы озвучить время «12:23», информатор последовательно включит следующие звуковые фрагменты:

  1. двенадцать
  2. часов
  3. двадцать
  4. три
  5. минуты

Или для «21:31»

  1. двадцать
  2. один
  3. час
  4. тридцать
  5. одна
  6. минута

Идея, думаю, понятна.

Для замены озвучки часов на свою необходимо записать все используемые фрагменты и пересобрать дамп заново. Это выглядит следующим образом. Сначала готовятся все необходимые звуковые фрагменты в формате .wav. Затем, с помощью специальной утилиты dump_builder_tc_v2.0.exe производится объединение .wav-фрагментов в файл dump.bin, который в дальнейшем нужно загрузить в часы.

Требования к .wav-файлам следующие:

  • Формат: PCM
  • Частота дискретизации: 22050 Гц
  • Количество каналов: 1 (Моно)
  • Разрешение: 8 бит
  • Скорость потока: 176 кбит/сек

Для удобства утилита dump_builder_tc_v2.0.exe имеет конфигурационный файл config.txt, в котором указывается какому музыкальному семплу соответствует данный .wav-файл. Файл config.txt имеет следующий вид:

; Test configuration file
; for build TalkingClock_v1.1 dump file

SAMPLE_0 =      "wav\0.wav"
SAMPLE_1m =     "wav\1m.wav"
SAMPLE_1w =     "wav\1w.wav"
SAMPLE_2m =     "wav\2m.wav"
SAMPLE_2w =     "wav\2w.wav"
SAMPLE_3 =      "wav\3.wav"
SAMPLE_4 =      "wav\4.wav"
SAMPLE_5 =      "wav\5.wav"
SAMPLE_6 =      "wav\6.wav"
SAMPLE_7 =      "wav\7.wav"
SAMPLE_8 =      "wav\8.wav"
SAMPLE_9 =      "wav\9.wav"
SAMPLE_10 =     "wav\10.wav"
SAMPLE_11 =     "wav\11.wav"
SAMPLE_12 =     "wav\12.wav"
SAMPLE_13 =     "wav\13.wav"
SAMPLE_14 =     "wav\14.wav"
SAMPLE_15 =     "wav\15.wav"
SAMPLE_16 =     "wav\16.wav"
SAMPLE_17 =     "wav\17.wav"
SAMPLE_18 =     "wav\18.wav"
SAMPLE_19 =     "wav\19.wav"
SAMPLE_20 =     "wav\20.wav"
SAMPLE_30 =     "wav\30.wav"
SAMPLE_40 =     "wav\40.wav"
SAMPLE_50 =     "wav\50.wav"
SAMPLE_rovno =  "wav\rovno.wav"
SAMPLE_chas =   "wav\chas.wav"
SAMPLE_chasov = "wav\chasov.wav"
SAMPLE_chasa =  "wav\chasa.wav"
SAMPLE_minut =  "wav\minut.wav"
SAMPLE_minuta = "wav\minuta.wav"
SAMPLE_minuty = "wav\minuty.wav"
SAMPLE_bell =   "wav\bell.wav"
SAMPLE_minus =           "wav\minus.wav"
SAMPLE_gradus =          "wav\gradus.wav"
SAMPLE_gradusa =         "wav\gradusa.wav"
SAMPLE_gradusov =        "wav\gradusov.wav"
SAMPLE_temperatura_out = "wav\temperatura_out.wav"
SAMPLE_temperatura_in =  "wav\temperatura_in.wav"

SAMPLE_alarm1 = "wav\katusha.wav"
SAMPLE_alarm2 = "wav\chip_i_deil.wav"
SAMPLE_alarm3 = "wav\Pirates.wav"
SAMPLE_alarm4 = "wav\ku-ka-re-ku.wav"
SAMPLE_alarm5 = "wav\alarm_electro.wav"
SAMPLE_alarm6 = "wav\alarm_radioclock.wav"
SAMPLE_alarm7 = ""
SAMPLE_alarm8 = ""
SAMPLE_alarm9 = ""
SAMPLE_alarm10 = ""
SAMPLE_alarm11 = ""
SAMPLE_alarm12 = ""
SAMPLE_alarm13 = ""
SAMPLE_alarm14 = ""
SAMPLE_alarm15 = ""
SAMPLE_alarm16 = ""

; End of file

Можно заметить, что этот файл состоит из 2-х частей: семплы звукового информатора и семплы будильника (SAMPLE_alarmX). Максимальное количество звуков для будильника может быть 16, однако, совсем не обязательно заполнять их все. Неиспользуемые ячейки в качестве имени файла должны содержать пустую строку:

SAMPLE_alarm7 = ""

Итак, после подготовки всех файлов и правке config.txt можно запускать утилиту dump_builder_tc_v2.0.exe, которая соберет из имеющихся .wav-файлов новенький дамп dump.bin. При возникновении каких-либо проблем (неверный формат файла, неправильная частота дискретизации) будет выдана соответствующая ошибка и процесс прервется:

Рис. 13. Сообщение утилиты dump_builder_tc_v2.0.exe об неверном формате wav-файла

После завершения сборки дампа, необходимо проверить его размер: он не должен превышать объема флеш-памяти часов (4 МБайта).

На этом пока все, в конце статьи дам ссылку на полный проект часов на GitHub и на архив на ЯндексДиск.

Заключение тут

Ссылки

Ссылка на GitHub: https://github.com/DiMoonElec/TalkingLEDClock

Архив с проектом на ЯндексДиск-е: https://yadi.sk/d/2m6KqsUx66SI5A

 

Закладка Постоянная ссылка.

Добавить комментарий