Обсуждаем цифровые устройства...
Ответить

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

Чт мар 07, 2024 07:30:06

Огромное спасибо за такое крутое устройство WiseLord, шел к нему года два! Творческих Вам успехов!!!
Прошился я наконец таки, но прошивка для моего дисплея подошла только самая первая от 14.05.19 На всех остальных просто белый экран. Прошивал Бин файлом под stm32f103. Может быть у кого есть более подходящий Бин файлик по свежее версии? Или можете подсказать как исправить уже имеющийся для моего экрана? Буду признателен! Жду не дождусь все уже наконец таки запаять и укаповать в корпус!


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


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

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

Чт мар 07, 2024 15:51:18

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 Герц).

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

Чт мар 07, 2024 16:27:34

WiseLord, благодарю за разЪяснение. Вопрос про присваивание возник из-за разности операций в скобках- в первом случае <(меньше), во втором <<(сдвиг).

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

Сб мар 09, 2024 12:21:51

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

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

Спасибо за находку )

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

Сб мар 09, 2024 16:10:33

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 <-

Может где и ещё есть такое? Но я пока не дошел :-)

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

Сб мар 09, 2024 22:34:02

Да, тут тоже опечатки. Но уже не критичные, так как в коде не используются.

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

Пн мар 11, 2024 09:16:48

Друзья, у меня осталось 3 чудесных платки с завода. С радостью поделюсь лишними за даром. На вас только пересыл. Одну платку в одни руки!
Изображение

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

Вт мар 12, 2024 06:21:24

Всем здравия!!! 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

Возможно,что пока "бродил" по структурам где то ошибся. Поправьте мои вычисления,если они не верны. Если я ошибся, буду искать - где я ошибся.
Извините за глупые вопросы, но очень хочется понять(для себя) как все работает.Спасибо.

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

Вт мар 12, 2024 07:53:51

Вроде верно. На разрешении 160x128 получится отрисовать 80 полос шириной 1px с шагом 2px. Весь спектр займёт площадь 159x128.

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

Вт мар 12, 2024 11:14:02

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

// Full redraw the column
if (0 || clear) {......
С clear всё понятно,а вот интересует 0 (нуль) в проверке
Я такого не встречал. Растолкуйте пожалуйста.Спасибо.

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

Вт мар 12, 2024 22:04:45

Друзья, у меня осталось 3 чудесных платки с завода. С радостью поделюсь лишними за даром. На вас только пересыл. Одну платку в одни руки!
Изображение
Возьму одну платку, в личку вам написал.

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

Чт мар 14, 2024 09:30:20

kovalgg писал(а): if (0 || clear) {......
Равносильно "if (clear)". Видимо, остатки от отладки, когда можно было быстро поставить сюда 1 и полная отрисовка (столбец и пустота целиком) включалась на каждом цикле.

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

Пт мар 15, 2024 12:11:40

helpers37, готов взять одну плату AMpcontrol.Почта podlub@mail.ru

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

Пт мар 15, 2024 17:35:41

И мне можно одну платку, пожалуйста.

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

Чт мар 28, 2024 18:20:49

helpers37, платка получена. Спасибо.

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

Чт мар 28, 2024 23:04:29

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

Добавлено after 12 minutes 37 seconds:
Если отладка и работа с программой не нужна, можно просто имея любой USB-UART донгл прошить. Утилита: https://www.st.com/en/development-tools ... stm32.html

В рамках проекта достигается нажатием кнопки BTN2 с удержанием и сброса контроллера. При зажатой кнопке он загрузится в режим bootloader (BOOT1=0, BOOT0=1) и примет от этой утилиты файл прошивки.

Утилита по указанной ссылке недоступна https://www.st.com/en/development-tools ... stm32.html
Вложения
скрин2.jpg
(17.99 KiB) Скачиваний: 20

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

Пт мар 29, 2024 09:02:49

Доброго времени суток!
Может у кого то есть печатные платы изготовленые на производстве для данного проекта??? Я бы купил

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

Пт мар 29, 2024 16:09:39

dipsat писал(а):Утилита по указанной ссылке недоступна https://www.st.com/en/development-tools ... stm32.html

Доступна с VPN и регистрацией на сайте. Ну, или искать на файлопомойках.

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

Пт мар 29, 2024 18:48:05

dipsat, https://disk.yandex.ru/d/ZzU3wv5jmqvJtw

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

Ср апр 03, 2024 16:06:10


Спасибо, вам большое!!!
А еще кто может подсказать на какой самый большой размер дисплея есть рабочая библиотека, и вообще по качеству какой лучше на Али заказать (если можно то дайте ссылку). Заранее благодарен.
Ответить