Например TDA7294

Форум РадиоКот • Просмотр темы - Темброблок - анализатор спектра на STM32F103
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс авг 31, 2025 20:46:37

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 2684 ]     ... , , , 134,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Пт окт 25, 2024 11:30:27 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4885
Откуда: Минск
Рейтинг сообщения: 0
Александр_926 писал(а):
MF+/05-џЃ“~1MP3

Александр_926 писал(а):
MF+/STAS-M~1MP3


Похоже, проблема в том, что модуль выдаёт обрезанное название песни, и не в utf-16 виде, на что рассчитан парсер.

Набросал небольшой код (из функций в проекте ampcontrol):

Код:
#include <stdio.h>
#include <stdint.h>
#include <string.h>

#define SONG_NAME_SIZE          128
#define BT_FLAG_NAME_CHANGED    0x01

typedef uint8_t BtInput;
enum {
    BT_IN_BLUETOOTH = (1 << 0),
    BT_IN_USB       = (1 << 1),
    BT_IN_SDCARD    = (1 << 2),
};

typedef struct {
    char songName[SONG_NAME_SIZE];
    uint16_t flags;
    BtInput inMask;
    BtInput input;
} BTCtx;

static BTCtx btCtx;

static void utf16To8(char *ustr, char *str, int16_t size)
{
    for (int16_t i = 0; i < size; i++) {
        uint16_t ucs = (uint16_t)((ustr[2 * i]) | (ustr[2 * i + 1] << 8));

        if (ucs <= 0x007F) {
            *str++ = 0x00 | (char)((ucs >> 0)  & 0x7F);
        } else if (ucs <= 0x7FF) {
            *str++ = 0xC0 | (char)((ucs >> 6)  & 0x1F);
            *str++ = 0x80 | (char)((ucs >> 0)  & 0x3F);
        } else {
            *str++ = 0xE0 | (char)((ucs >> 12) & 0x0F);
            *str++ = 0x80 | (char)((ucs >> 6)  & 0x3F);
            *str++ = 0x80 | (char)((ucs >> 0)  & 0x3F);
        }
    }
    *str = 0;
}

void bt201ParseSongName(char *line, int16_t size)
{
    // Follows "MF+"
    char *buffer = btCtx.songName;

    utf16To8(line, buffer, size / 2);

    // Remove extension
    size_t dotPos = strlen(buffer) - 4;
    // 3 chars (mp3, wav, wma, aac, ape)
    buffer[dotPos] = '\0';
    if (buffer[dotPos - 1] == '.') {
        // 4 chars (flac)
        buffer[dotPos - 1] = '\0';
    }

    btCtx.flags |= BT_FLAG_NAME_CHANGED;

    // Query current mode
    //usartSendString(USART_BT, "AT+QM\r\n");

    return;
}

int main(void)
{
    const char *songName = "/STAS-M~1MP3";

    bt201ParseSongName(songName, strlen(songName));

    printf("%s\n", btCtx.songName);

    return 0;
}


Выводится:

Код:
匯䅔ⵓ繍


Такое на экране отобразиться не может, соответственно.

---

P.S. Попробуйте вместо utf16To8(line, buffer, size / 2); вызвать простое strncpy(btCtx.songName, line, size); - интересно, станут ли эти обрезанные имена, выдаваемые модулем, отображаться на экране.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Пт окт 25, 2024 12:31:58 
Родился

Зарегистрирован: Пт авг 30, 2024 11:57:09
Сообщений: 13
Рейтинг сообщения: 0
Попробовал. Результат тот же. Ничего не выводится. Пока с не выводом названием файла можно смириться. Пока даже при получении кода MU+01 QM+02 или MU+03 QM+03 не происходит смена иконки на USB или SDCARD, а там кодировка не причем. Там цифры. Почему?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Пт окт 25, 2024 14:13:28 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4885
Откуда: Минск
Рейтинг сообщения: 0
Не знаю. Вход аудиопроцессора, на котором висит BT201, должен быть отмечен в настройках как "Bluetooth".

Это активирует переключение "виртуальных" входов по приходу соответствующих сообщение по uart:

"MU+01" - USB смонтирован, в список активных входов добавляется USB (иконка не меняется)
"MU+02' - USB отмонтирован, из списка активных входов удаляется USB (иконка не меняется)
"MU+03" - SD смонтирована, в список активных входов добавляется SDCARD (иконка не меняется)
"MU+04" - SD отмонтирована, в список активных входов добавляется SDCARD (иконка не меняется)

"QM+01" - на модуле активирован Bluetooth, меняется иконка на BLUETOOTH
"QM+02" - на модуле активирован USB, меняется иконка на USB
"QM+03" - на модуле активирована SD, меняется иконка на SDCARD
"QM+00" - входы USB и SD удаляются из списка, иконка возвращается на BLUETOOTH.

Проще говоря, для того, чтобы иконка сменилась на USB, должно прийти два сообщения - "MU+01" и "QM+02"

В вашем случае, похоже, модуль не отправляет первое из сообщений.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Пт окт 25, 2024 14:32:59 
Родился

Зарегистрирован: Пт авг 30, 2024 11:57:09
Сообщений: 13
Рейтинг сообщения: 0
Я пробовал из терминала отправлять на amp последовательно эти коды и ни какой реакции. Когда вставляешь флешку в USB при выбранном входе Bluetooth она активируется и начинает воспроизводится amp. То есть вход выбран правильно, да и управление всеми режимами BT201 со стороны amp проходит. Можно ли для теста вывести на экран содержимое char *line отвечающей за переключение иконок? Может тогда станет понятно в парсинге дело или в чем то другом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Пт окт 25, 2024 14:46:25 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4885
Откуда: Минск
Рейтинг сообщения: 0
Можно, почему бы и нет. Я иногда и сам так делаю для отладки. glcdSetXY() и glcdWriteString() в помощь. Или посмотрите, как это сделано в функциях canvasDebugFPS() и canvasDebugTimers() - для того, чтобы задействовать - уберите return в начале функции.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Пт окт 25, 2024 19:13:00 
Родился

Зарегистрирован: Пт авг 30, 2024 11:57:09
Сообщений: 13
Рейтинг сообщения: 0
Спасибо. Попробую разобраться.

Добавлено after 2 hours 27 minutes 1 second:
Создал ловушку в виде вывода на дисплей тестового текста. Похоже не вызывается функция controlParseLine(LineParse *lp). В функции btGetData(void) вне цикла while ловушка еще работает а дальше не идет. Что проверять дальше пока не пойму. Может подскажите?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Сб окт 26, 2024 09:15:15 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4885
Откуда: Минск
Рейтинг сообщения: 0
Ну да, btGetData() вызывается из основного цикла программы, так что там будет работать. Если же внутрь цикла программа вообще не входит, значит, кольцевой буфер rbuf пустой - его ничто не наполняет.

Ну а наполнение его происходит из обработчика прерывания чуть выше по коду.

Возможно, просто на RX USART1 ничего не приходит?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Сб окт 26, 2024 14:51:06 
Родился

Зарегистрирован: Пт авг 30, 2024 11:57:09
Сообщений: 13
Рейтинг сообщения: 0
Да не наступает прерывание. Функция USART_BT_HANDLER не вызывается! Прозвонил еще раз всю разводку от BT201 до ножек stm32, все соединено. Скорее всего у STMки накрылся вход.

Добавлено after 3 hours 17 minutes 33 seconds:
Заменил STMку все завелось иконки в режиме Bluetooth при выборе USB или SDCARD меняются. А вывод названия файла по прежнему нет. Но это уже другая история. Спасибо всем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Вс окт 27, 2024 14:36:13 
Родился

Зарегистрирован: Пт авг 30, 2024 11:57:09
Сообщений: 13
Рейтинг сообщения: 0
Для отображения имени файлов попробовал вместо utf16To8(line, buffer, size / 2); вызвать простое strncpy(btCtx.songName, line, size); (как выше просил WiseLord). Результат не дал никаких изменений. Зато получилось
изменив функцию:
static void controlParseLine(LineParse *lp)
{

char *line = lp->line;

// BT201 control
if (utilIsPrefix(line, "QM+")) {
bt201ParseInput(line + strlen("QM+"));
if (btGetInput() & (BT_IN_USB | BT_IN_SDCARD)) {
ampActionQueue(ACTION_AUDIO_INPUT_SET_TYPE, IN_BLUETOOTH);
}
} else if (utilIsPrefix(line, "MU+")) {
bt201ParseMount(line + strlen("MU+"));
} else if (utilIsPrefix(line, "MF+")) {

if (my_tester == false) {
// Запрос полного имени текущего файла
usartSendString(USART_BT, "AT+MF\r\n");
my_tester = true;
}else{
bt201ParseSongName(line + strlen("MF+"), lp->size - (int16_t)strlen("MF+"));
my_tester = false;
}
}
}
то есть на первый полученный, урезанный, ответ от BT201 "MF+" я отправляю запрос "AT+MF", и получаю повторный ответ с полным именем текущего файла. Вроде в первом приближении даже работает. Есть момент связанный с первоночальным отображением имени. Но после переключения на следующий или предыдущий файл все работает. Прошу нашего гуру помочь советом и оценкой. Может сделать как то по другому?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Пн окт 28, 2024 10:44:52 
Родился

Зарегистрирован: Пт авг 30, 2024 11:57:09
Сообщений: 13
Рейтинг сообщения: 0
Еще заметил что на команду "AT+CM00\r\n" BT201 не всегда дает полный адекватный ответ. Зато на конкретные команды "AT+CM01\r\n", "AT+CM02\r\n" или "AT+CM03\r\n" отвечает вполне конкретно, полной информацией о смонтированных и выбранных устройствах. Поэтому изменил функцию btNextInput() следующим образом:

void btNextInput()
{
// Query current mode
usartSendString(USART_BT, "AT+QM\r\n");

if (btCtx.input & BT_IN_USB) {
usartSendString(USART_BT, "AT+CM03\r\n"); //Specify the mode of operation as "TF Card" playback.
i2cExpGpioKeyPress(BT_NEXT_INPUT);
} else if (btCtx.input & BT_IN_SDCARD) {
usartSendString(USART_BT, "AT+CM01\r\n"); //Specify working mode as Bluetooth
i2cExpGpioKeyPress(BT_NEXT_INPUT);
} else if (btCtx.input & BT_IN_BLUETOOTH) {
usartSendString(USART_BT, "AT+CM02\r\n"); //Specify the mode of operation as "U disk" play.
i2cExpGpioKeyPress(BT_NEXT_INPUT);
}

// Запрос полного имени текущего файла
usartSendString(USART_BT, "AT+MF\r\n");
}

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Сб ноя 02, 2024 19:48:41 
Первый раз сказал Мяу!

Зарегистрирован: Чт май 15, 2014 12:34:31
Сообщений: 24
Рейтинг сообщения: 0
Еще заметил что на команду "AT+CM00\r\n" BT201 не всегда дает полный адекватный ответ. Зато на конкретные команды "AT+CM01\r\n", "AT+CM02\r\n" или "AT+CM03\r\n" отвечает вполне конкретно, полной информацией о смонтированных и выбранных устройствах. Поэтому изменил функцию btNextInput() следующим образом:

void btNextInput()
{
// Query current mode
usartSendString(USART_BT, "AT+QM\r\n");

if (btCtx.input & BT_IN_USB) {
usartSendString(USART_BT, "AT+CM03\r\n"); //Specify the mode of operation as "TF Card" playback.
i2cExpGpioKeyPress(BT_NEXT_INPUT);
} else if (btCtx.input & BT_IN_SDCARD) {
usartSendString(USART_BT, "AT+CM01\r\n"); //Specify working mode as Bluetooth
i2cExpGpioKeyPress(BT_NEXT_INPUT);
} else if (btCtx.input & BT_IN_BLUETOOTH) {
usartSendString(USART_BT, "AT+CM02\r\n"); //Specify the mode of operation as "U disk" play.
i2cExpGpioKeyPress(BT_NEXT_INPUT);
}

// Запрос полного имени текущего файла
usartSendString(USART_BT, "AT+MF\r\n");
}

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

Можно фото? Интересно как выглядит текст. Может когда то куда присобачу другие модули, которые на этой прошивке не дают полного названия


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Пн ноя 04, 2024 10:04:01 
Родился

Зарегистрирован: Пт авг 30, 2024 11:57:09
Сообщений: 13
Рейтинг сообщения: 1
Фото вывода названия файла с USB флэшки и с SDCARD. Для длинных имен скроллинга нет.


Вложения:
3.jpg [46.08 KiB]
Скачиваний: 199
2.jpg [64.45 KiB]
Скачиваний: 150
1.jpg [51.28 KiB]
Скачиваний: 172
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Пт ноя 29, 2024 23:13:22 
Первый раз сказал Мяу!

Зарегистрирован: Чт май 15, 2014 12:34:31
Сообщений: 24
Рейтинг сообщения: 0
Вот такая коробочка получается, ещё не допилил, но концепция в целом такая, не хватает ещё несколько индикаторов, типа селектора входов и т.д. За основу взят корпус от старого видика))) Туда почти влезает усилитель.
Изображение Изображение
Огромная благодарность автору за проект!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Сб фев 15, 2025 13:42:31 
Родился

Зарегистрирован: Сб авг 29, 2015 13:36:30
Сообщений: 4
Рейтинг сообщения: 0
Добрый день, можно ли применить дисплей ILI9325?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Вс фев 16, 2025 00:56:50 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4885
Откуда: Минск
Рейтинг сообщения: 0
По даташиту похож на ILI9320, попробуйте.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Вс мар 23, 2025 18:41:22 
Родился

Зарегистрирован: Вс мар 09, 2008 13:46:01
Сообщений: 12
Рейтинг сообщения: 0
Владимир. вопрос по расширителю. При переводе в станд бай на всех выходах еденицы. как решить . подскажите?

Добавлено after 10 minutes 58 seconds:
расширитель PCF8574T

Добавлено after 1 minute 39 seconds:
И при выводе из станд бай, тоже еиницы. пока не переключишь вход

Добавлено after 10 minutes 20 seconds:
Управление питанием


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Пн мар 24, 2025 12:23:14 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4885
Откуда: Минск
Рейтинг сообщения: 0
Если не ошибаюсь, это было исправлено в более новых прошивках (20240902, например).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Пн мар 24, 2025 17:21:37 
Родился

Зарегистрирован: Вс мар 09, 2008 13:46:01
Сообщений: 12
Рейтинг сообщения: 0
Владимир, здравствуйте, исходники скачаны позавчера


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Чт мар 27, 2025 17:11:07 
Родился

Зарегистрирован: Вс мар 09, 2008 13:46:01
Сообщений: 12
Рейтинг сообщения: 0
здравствуйте, может кто подскажет по поводу расширителя портов. какой файл копнуть?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
СообщениеДобавлено: Пт мар 28, 2025 22:16:06 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4885
Откуда: Минск
Рейтинг сообщения: 0
А расширитель хоть запитан-то постоянно? Или в ждущем режиме обесточивается?

По коду всё должно работать корректно. Вход в ждущий режим:

amp_main.c: ampEnterStby() => inputSetPower(false) => priv.inputStatus = 0x00; => i2cExpSend(i2cAddrIdx, priv.inputStatus); - Все линии должны выставляться в лог. 0.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 2684 ]     ... , , , 134,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y