Темброблок - анализатор спектра на STM32F103

Обсуждаем цифровые устройства...
helpers37
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Чт май 15, 2014 12:34:31

Re: Темброблок - анализатор спектра на STM32F103

Сообщение helpers37 »

[uquote="Sergey212",url="/forum/viewtopic.php?p=4552331#p4552331"][uquote="helpers37",url="/forum/viewtopic.php?p=4551775#p4551775"]Огромное спасибо за такое крутое устройство WiseLord, шел к нему года два! Творческих Вам успехов!!!
Прошился я наконец таки, но прошивка для моего дисплея подошла только самая первая от 14.05.19 На всех остальных просто белый экран. Прошивал Бин файлом под stm32f103. Может быть у кого есть более подходящий Бин файлик по свежее версии? Или можете подсказать как исправить уже имеющийся для моего экрана? Буду признателен! Жду не дождусь все уже наконец таки запаять и укаповать в корпус![/uquote]

Если платка старая, то проверьте на наличие резистора R25 по линии HW_RST. Он должен отсутствовать.[/uquote]

Какая платка я не знаю, но возможно он заработал потому как я в последний момент аккурат перед последней попытки прошить заметил комментарий в схеме на счёт этого резистора и решил его снять. Спасибо!
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок - анализатор спектра на STM32F103

Сообщение WiseLord »

kovalgg писал(а):функция tda7719SetMiddleFilter - reg10 |= (aPar->tune[AUDIO_TUNE_MIDDLE_QUAL] <TDA7719_MIDDLE_QFACT_OFT);
и функция tda7719SetBassFilter - reg11 |= (aPar->tune[AUDIO_TUNE_BASS_QUAL] << TDA7719_BASS_QFACT_OFT);
В присваивании первой функции ошибка? Я правильно понял?
Нет, тут всё правильно.

Вот кусочек из даташита на TDA7719:

Изображение

Для настройки фильтра средних частот нужно записать 5 байтов Gain/Attenuation по нулевому смещению и два байта Middle Q Factor по смещению 5.

Что делает код:

Код: Выделить всё

int8_t value = (aPar->flags & AUDIO_FLAG_BYPASS) ? 0 : aPar->tune[AUDIO_TUNE_MIDDLE];
uint8_t reg10 = (value > 0) ? (31 - value) : (15 + value);

reg10 <<= TDA7719_MIDDLE_ATT_OFT;
reg10 |= (aPar->tune[AUDIO_TUNE_MIDDLE_QUAL] < TDA7719_MIDDLE_QFACT_OFT);
1 строка.
Если пользователем задана настройка AUDIO_FLAG_BYPASS (отключены все аудио фильтры), используем значение 0. Иначе - значение, заданное пользователем aPar->tune[AUDIO_TUNE_MIDDLE] - некое число от -15 до 15. Например, -14

2 строка.
Мы не можем просто записать это число в регистр. Согласно табличке значению -14дБ соответствует число 1 (00001b). Вот его здесь пересчитываем и в переменной reg10 и запоминаем

3 строка.
Сдвигаем это число по смещению TDA7719_MIDDLE_ATT_OFT = 0. Фактически ничего не происходит, но для унификации кода так удобнее - сдвиги могут быть и ненулевые, как дальше.

4 строка.
Дописываем в reg10 значение aPar->tune[AUDIO_TUNE_MIDDLE_QUAL], заданное пользователем (от 0 до 3), но сдвинутое на TDA7719_MIDDLE_QFACT_OFT = 5 позиций влево.

Просто напомню, что запись var <<= value (как и прочие подобные - обычно встречается +=) означает var = var << value. А var |= value - это, соответственно, var = var | value;

Дальше уже рассчитанное значение reg10 пишется по I²C шине в аудиопроцессор.
kovalgg писал(а):И растолкуйте пожалуйста - static const AudioGrid gridVolume = {NULL, -79, 15, (int8_t)(1.00 * STEP_MULT)} - умножение на STEP_MULT.
У многих из поддерживаемых контроллеров шаг настройки параметров не целый, а, например, 1.25дБ, или 1.5дБ. Получается, например, такое соответствие значения в регистре и реальных децибелов:

Код: Выделить всё

0: 0дБ
1: 1,25дБ
2: 2,5дБ
3: 3,75дБ
...
Это чисто для удобства хранения значений аудиопараметров в ОЗУ (в 8-битных ячейках). А уже для вывода на экран (функция canvasShowTune()) происходит перерасчёт (showValue = value * mStep / STEP_MULT).

Можно было бы хранить и дробные числа, но тогда пришлось бы по 4 байта на каждый использовать.
kovalgg писал(а):И растолкуйте пожалуйста - static const AudioGrid gridVolume = {NULL, -79, 15, (int8_t)(1.00 * STEP_MULT)} - умножение на STEP_MULT.
Это как раз то, что я и описывал выше. Например,

# tda7418.c
static const AudioGrid gridVolume = {NULL, -79, 15, (int8_t)(1.00 * STEP_MULT)}; // -79..15dB with 1dB step
# tda731x.c
static const AudioGrid gridVolume = {NULL, -63, 0, (int8_t)(1.25 * STEP_MULT)}; // -78.75..0dB with 1.25dB step

В первом случае шаг регулировки равен 1дБ, поэтому grid.mStep равен 8.
Таким образом, raw значение -79 в регистре таким и останется при выводе: showValue = -79 * mStep / STEP_MULT = -79 * 8 / 8 = -79

Во втором случае шаг регулировки равен 1дБ, поэтому grid.mStep равен 1.25*8 = 10.
Таким образом, raw значение -63 в регистре таким и останется при выводе: showValue = -63 * mStep / STEP_MULT = -63 * 10 / 8 = -78,75
kovalgg писал(а):dcOft - это типа АРУ
Это находится среднее значение, чтобы потом, вычев его, выровнять полученный набор данных относительно нуля. Тогда не будет ложного ненужного первого столбика спектрограмме, который обычно бывает, если есть постоянная составляющая в сигнале (0 Герц).
Аватара пользователя
kovalgg
Родился
Сообщения: 9
Зарегистрирован: Пн дек 11, 2023 14:19:36

Re: Темброблок - анализатор спектра на STM32F103

Сообщение kovalgg »

WiseLord, благодарю за разЪяснение. Вопрос про присваивание возник из-за разности операций в скобках- в первом случае <(меньше), во втором <<(сдвиг).
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок - анализатор спектра на STM32F103

Сообщение WiseLord »

А знаете, похоже это и правда моя опечатка в коде при копипастах...

P.S. Исправил: https://github.com/WiseLord/ampcontrol- ... it/e8d0eb2

Спасибо за находку )
Аватара пользователя
kovalgg
Родился
Сообщения: 9
Зарегистрирован: Пн дек 11, 2023 14:19:36

Re: Темброблок - анализатор спектра на STM32F103

Сообщение kovalgg »

WiseLord, здравствуйте. Посмотрите еще дефайны TDA7719.
#define TDA7719_BASS_FREQ_200HZ 0x60
#define TDA7719_MIDDLE_FREQ_500HZ 0x18 <-
#define TDA7719_MIDDLE_FREQ_1000HZ 0x18 <-
#define TDA7719_MIDDLE_FREQ_1500HZ 0x18 <-
#define TDA7719_MIDDLE_FREQ_2000HZ 0x18 <-

Может где и ещё есть такое? Но я пока не дошел :-)
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок - анализатор спектра на STM32F103

Сообщение WiseLord »

Да, тут тоже опечатки. Но уже не критичные, так как в коде не используются.
helpers37
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Чт май 15, 2014 12:34:31

Re: Темброблок - анализатор спектра на STM32F103

Сообщение helpers37 »

Друзья, у меня осталось 3 чудесных платки с завода. С радостью поделюсь лишними за даром. На вас только пересыл. Одну платку в одни руки!
Изображение
Аватара пользователя
kovalgg
Родился
Сообщения: 9
Зарегистрирован: Пн дек 11, 2023 14:19:36

Re: Темброблок - анализатор спектра на STM32F103

Сообщение kovalgg »

Всем здравия!!! WiseLord, снова прошу помощи.Функция drawSpectrum:

const int16_t step = (rect->w + 1) / SPECTRUM_SIZE + 1; // Step of columns
const int16_t colW = step - (step / 2); // Column width
const int16_t num = (rect->w + colW - 1) / step; // Number of columns

const int16_t width = (num - 1) * step + colW; // Width of spectrum
const int16_t height = rect->h; // Height of spectrum

const int16_t oft = (rect->w - width) / 2; // Spectrum offset for symmetry

const int16_t y = rect->y;

Закралось сомнение,что я правильно считаю. Дисплей ST7735. Получились следующие значения:
step = 2
colW = 1
num = 80
width = 159
height= 128
oft = 0

Возможно,что пока "бродил" по структурам где то ошибся. Поправьте мои вычисления,если они не верны. Если я ошибся, буду искать - где я ошибся.
Извините за глупые вопросы, но очень хочется понять(для себя) как все работает.Спасибо.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок - анализатор спектра на STM32F103

Сообщение WiseLord »

Вроде верно. На разрешении 160x128 получится отрисовать 80 полос шириной 1px с шагом 2px. Весь спектр займёт площадь 159x128.
Аватара пользователя
kovalgg
Родился
Сообщения: 9
Зарегистрирован: Пн дек 11, 2023 14:19:36

Re: Темброблок - анализатор спектра на STM32F103

Сообщение kovalgg »

WiseLord, благодарю за столь быстрый ответ. Есть ещё вопрос:функция spectrumColumnDraw ,там есть проверка

// Full redraw the column
if (0 || clear) {......
С clear всё понятно,а вот интересует 0 (нуль) в проверке
Я такого не встречал. Растолкуйте пожалуйста.Спасибо.
dipsat
Родился
Сообщения: 7
Зарегистрирован: Чт окт 31, 2019 22:49:04

Re: Темброблок - анализатор спектра на STM32F103

Сообщение dipsat »

[uquote="helpers37",url="/forum/viewtopic.php?p=4554155#p4554155"]Друзья, у меня осталось 3 чудесных платки с завода. С радостью поделюсь лишними за даром. На вас только пересыл. Одну платку в одни руки!
Изображение[/uquote] Возьму одну платку, в личку вам написал.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок - анализатор спектра на STM32F103

Сообщение WiseLord »

kovalgg писал(а): if (0 || clear) {......
Равносильно "if (clear)". Видимо, остатки от отладки, когда можно было быстро поставить сюда 1 и полная отрисовка (столбец и пустота целиком) включалась на каждом цикле.
podlub
Родился
Сообщения: 1
Зарегистрирован: Пт мар 15, 2024 12:03:38

Re: Темброблок - анализатор спектра на STM32F103

Сообщение podlub »

helpers37, готов взять одну плату AMpcontrol.Почта podlub@mail.ru
Аватара пользователя
Never not try
Открыл глаза
Сообщения: 43
Зарегистрирован: Пн авг 23, 2021 17:27:42

Re: Темброблок - анализатор спектра на STM32F103

Сообщение Never not try »

И мне можно одну платку, пожалуйста.
Аватара пользователя
Never not try
Открыл глаза
Сообщения: 43
Зарегистрирован: Пн авг 23, 2021 17:27:42

Re: Темброблок - анализатор спектра на STM32F103

Сообщение Never not try »

helpers37, платка получена. Спасибо.
dipsat
Родился
Сообщения: 7
Зарегистрирован: Чт окт 31, 2019 22:49:04

Re: Темброблок - анализатор спектра на STM32F103

Сообщение dipsat »

helpers37, плата приехала. Спасибо!

Добавлено after 12 minutes 37 seconds:
[uquote="WiseLord",url="/forum/viewtopic.php?p=4541939#p4541939"]Если отладка и работа с программой не нужна, можно просто имея любой USB-UART донгл прошить. Утилита: https://www.st.com/en/development-tools ... stm32.html

В рамках проекта достигается нажатием кнопки BTN2 с удержанием и сброса контроллера. При зажатой кнопке он загрузится в режим bootloader (BOOT1=0, BOOT0=1) и примет от этой утилиты файл прошивки.[/uquote]
Утилита по указанной ссылке недоступна https://www.st.com/en/development-tools ... stm32.html
Вложения
скрин2.jpg
(17.99 КБ) 125 скачиваний
frost37rus
Родился
Сообщения: 18
Зарегистрирован: Пт мар 29, 2024 08:36:41

Re: Темброблок - анализатор спектра на STM32F103

Сообщение frost37rus »

Доброго времени суток!
Может у кого то есть печатные платы изготовленые на производстве для данного проекта??? Я бы купил
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок - анализатор спектра на STM32F103

Сообщение WiseLord »

dipsat писал(а):Утилита по указанной ссылке недоступна https://www.st.com/en/development-tools ... stm32.html
Доступна с VPN и регистрацией на сайте. Ну, или искать на файлопомойках.
Аватара пользователя
pap.cot
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Пн мар 24, 2014 22:07:01
Откуда: Оренбургская область
Контактная информация:

Re: Темброблок - анализатор спектра на STM32F103

Сообщение pap.cot »

dipsat
Родился
Сообщения: 7
Зарегистрирован: Чт окт 31, 2019 22:49:04

Re: Темброблок - анализатор спектра на STM32F103

Сообщение dipsat »

[uquote="pap.cot",url="/forum/viewtopic.php?p=4561348#p4561348"]dipsat, https://disk.yandex.ru/d/ZzU3wv5jmqvJtw[/uquote]
Спасибо, вам большое!!!
А еще кто может подсказать на какой самый большой размер дисплея есть рабочая библиотека, и вообще по качеству какой лучше на Али заказать (если можно то дайте ссылку). Заранее благодарен.
Ответить

Вернуться в «Цифровая техника»