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

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

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

Сообщение WiseLord »

Нет, не через DMA
SgtPepper_91
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пн ноя 30, 2015 03:52:00

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

Сообщение SgtPepper_91 »

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

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

Сообщение WiseLord »

Быстро работает потому, что ожидание готовности SPI в правильном месте. Пока аппаратно идёт отправка одного байта (полуточки), процессор не висит в ожидании, как во многих библиотеках, а занимается подготовкой следующего. FPS можете посчитать самостоятельно, учитывая, что при заливке экрана одним цветом нужно отправить 320*240*2*8 бит на частоте SPI 18MHz.

Вроде бы 14.6 FPS по расчёту выходит. Естественно, экран постоянно не перерисовывается, по возможности, только изменившиеся кусочки картинки. Для режима спектра там явно за 30 FPS будет.
SgtPepper_91
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пн ноя 30, 2015 03:52:00

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

Сообщение SgtPepper_91 »

А можете поподробнее рассказать об этом механизме? Что значит "подготовка байта"? Я например хочу отправить два байта по spi, вызываю

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

send_spi_byte(&byte1);
send_spi_byte(&byte2);


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

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

Сообщение WiseLord »

Во многих библиотеках отправка байта устроена не оптимально. Сначала данные кладут в регистр, а потом идёт провисание в цикле, ожидание регистра-приёмника (бит TXE). Так код писать проще, но по факту получается, что всё то время, пока байт отправляется, контроллер не делает ничего полезного. Если смотреть на сигнал SCK при таком подходе, получается 8 импульсов - пауза (на подготовку нового байта, например, данных очередного пиксела) - 8 импульсов - пауза и т.д. То есть, меандр SCK прерывается паузами. Покороче - при сплошной заливке цветом, подлиннее - при более сложных расчётах цвета очередной точки.

А правильно - в функции отправки байта сначала проверять TXE (свободен ли регистр-приёмник), а затем - уже класть текущий байт для передачи. И выходить из функции, занимаясь дальше чем-то полезным - подготовкой следующего пиксела, пока текущий аппаратно передаётся.

Единственное, в таком правильном подходе нужно корректно обрабатывать переключения CS и RS, чтобы не "обрубить" ими текущую передачу.

Под подготовкой байта нужно понимать, например, рассчитывание цвета очередной точки, если рисуется, например, градиентная многоцветная картинка. Или вытаскивание цвета этой точки из массива шрифта (шрифты обычно не хранят в родном для дисплея формате (RGB565 - 2 байта на пиксел), а упаковывают в 8 пикселов на байт (вертикально или горизонтально), поэтому нужно время, чтобы достать бит пиксела (0 или 1) и превратить его в 2 байта цвета (основного или фонового). Или выводимая картинка просто с SDCARD считывается попиксельно, сразу же с выводом на экран. В любом случае, всё это делать параллельно аппаратной передаче прошлого байта.
SgtPepper_91
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пн ноя 30, 2015 03:52:00

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

Сообщение SgtPepper_91 »

А где это в коде происходит? Просто есть функция dispdrvSendByte в dispdrv.c, но дальше я не могу найти откуда берутся функции DISP_SPI_SEND_BYTE и WRITE_BYTE, которые вызываются подряд...

Я посмотрел реализацию отправки байта по spi в HAL, разве это не такой механизм, как вы описываете? (ну наверное не такой, раз экран у меня заливается секунды две...).
Спойлер

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

 while (hspi->TxXferCount > 0U)
    {
      /* Wait until TXE flag is set to send data */
      if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE))
      {
        if (hspi->TxXferCount > 1U)
        {
          /* write on the data register in packing mode */
          hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr);
          hspi->pTxBuffPtr += sizeof(uint16_t);
          hspi->TxXferCount -= 2U;
        }
        else
        {
          *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr);
          hspi->pTxBuffPtr++;
          hspi->TxXferCount--;
        }
      }
      else
      {
        /* Timeout management */
        if ((((HAL_GetTick() - tickstart) >=  Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U))
        {
          errorcode = HAL_TIMEOUT;
          goto error;
        }
      }
    }
SgtPepper_91
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пн ноя 30, 2015 03:52:00

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

Сообщение SgtPepper_91 »

Да, извините, забыл что Эклипс не ищет по тексту то, что спрятано за define...
Nadim
Встал на лапы
Сообщения: 113
Зарегистрирован: Пт июн 21, 2019 15:13:02
Откуда: Украина
Контактная информация:

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

Сообщение Nadim »

to WiseLord
Добавьте пожалуйста для КаРадио "Паузу" при коротком нажатии на кнопку на панели, где сейчас находится кнопка воспроизведение. При длинном нажатии воспроизведение, а при коротком пауза.
Еще в меню заметил знаки вопроса на всех языках: Spektrum\Displey mode ??? Правда у меня не из последних прошивок - проверьте.
Nikishka70
Открыл глаза
Сообщения: 42
Зарегистрирован: Вс июн 28, 2015 12:34:17
Откуда: Россия г. Калуга

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

Сообщение Nikishka70 »

может кому пригодится ..Дисплей ILI9488 SPI 480x320 с Али
работает нормально..как ILI9486
но нужно немного изменить код драйвера дисплея
dispdrvSelectReg8(0x3A); // Interface Pixel Format
// dispdrvSendData8(0x55);
dispdrvSendData8(0x66);
цвет 24Бита другой он не понимает

в makefile
добавить
C_DEFS += -D_COLOR_24BIT

в
dispdrv.c
исправить
#ifdef _DISP_FB
fbSetPixel(fbArea.x, fbArea.y, data);
fbShiftPos();
#else
#ifdef _COLOR_24BIT
dispdrvSendTriplet(data); //было dispdrvSendTriplet(color_t);
#else
dispdrvSendWord(data);
#endif
#endif
}

Добавлено after 2 minutes 34 seconds:
С аудио BD37033 пока разбираюсь ..
есть драйвер на Ардуино пытаюсь перенести .
пока результат 0.
f11006
Родился
Сообщения: 8
Зарегистрирован: Ср авг 21, 2019 14:13:12

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

Сообщение f11006 »

заводские платы управления есть у кого нить?
mixa232323
Прорезались зубы
Сообщения: 217
Зарегистрирован: Вт окт 01, 2013 01:04:31
Откуда: Гомель

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

Сообщение mixa232323 »

Nikishka70, По даташиту там всё есть. У вас может быть другой дисплей. ILI9486 и ILI9488 отличаются но не помню чем. Не помешало бы вычитать содержимое регистров.
В дисплеях от нокиа бывают контролеры которые требуют прогрузить в определенный регистр типа код конвертации цвета. Без него на экран ничего не выводится кроме режима 24 бита.
Nikishka70
Открыл глаза
Сообщения: 42
Зарегистрирован: Вс июн 28, 2015 12:34:17
Откуда: Россия г. Калуга

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

Сообщение Nikishka70 »

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

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

Сообщение WiseLord »

480x320 по SPI и без того не самая лучшая идея в смысле скорости отрисовки, а отягощённая 24-битностью - боюсь, совсем некомфортно будет.
Аватара пользователя
jn79
Опытный кот
Сообщения: 821
Зарегистрирован: Ср окт 10, 2007 10:54:35
Откуда: Омская обл
Контактная информация:

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

Сообщение jn79 »

заводские платы управления есть у кого нить?

у меня 4 осталось
aleksey_1184
Нашел транзистор. Понюхал.
Сообщения: 168
Зарегистрирован: Сб сен 15, 2018 19:04:00

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

Сообщение aleksey_1184 »

Добрый день хочу повторить данный проект, походу возник вопрос, в режиме тюнера по rds считывается только названия станций или радио текст также.
Аватара пользователя
Pavlon90
Вымогатель припоя
Сообщения: 556
Зарегистрирован: Пн июл 21, 2014 01:43:04
Откуда: Самара

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

Сообщение Pavlon90 »

считывается то, что транслируется по RDS, но с антенной придется экспериментировать для хорошего приема сигнала RDS
bichko
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пн окт 12, 2020 01:38:45

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

Сообщение bichko »

Подскажите пожалуйста какую прошивку использовать под этот экран Изображение на ILI9486. Так как прошил прошивкой ampcontrol_f103_ili9486_8bit.bin но ничего не показывает, просто светится белый экран. Прошивал через STM-LINK Utility
Аватара пользователя
Gürcan
Нашел транзистор. Понюхал.
Сообщения: 182
Зарегистрирован: Ср авг 01, 2018 10:04:10

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

Сообщение Gürcan »

Подскажите пожалуйста какую прошивку использовать под этот экран Изображение на ILI9486. Так как прошил прошивкой ampcontrol_f103_ili9486_8bit.bin но ничего не показывает, просто светится белый экран. Прошивал через STM-LINK Utility




This is the same screen I use, I use ili9481 as 8 bit, try it if you want
bichko
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пн окт 12, 2020 01:38:45

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

Сообщение bichko »

[uquote="bichko",url="/forum/viewtopic.php?p=3905300#p3905300"]Подскажите пожалуйста какую прошивку использовать под этот экран Изображение на ILI9486. Так как прошил прошивкой ampcontrol_f103_ili9486_8bit.bin но ничего не показывает, просто светится белый экран. Прошивал через STM-LINK Utility




This is the same screen I use, I use ili9481 as 8 bit, try it if you want[/uquote]
Спасибо большое за помощь, но не помогло, к сожалению. Подозреваю, что дело в технической части. Нет гарантии что дисплей полностью рабочий и нет гарантий что плату запаял без грехов. Ну и может сам микроконтроллер не очень, так как заказывал на Алиhttps://aliexpress.ru/item/4000113089300.html?spm=a2g0s.9042311.0.0.456533edbVrkps&_ga=2.31993022.1484655614.1602618264-1921787782.1577135774&_gac=1.188153178.1602447235.Cj0KCQjw2or8BRCNARIsAC_ppyZbJ_GdAfRTBT9q4olHXsKgZEg1zJNTVZVVw_7Z6-RrPJLrUSbEWRcaAg_5EALw_wcB. В общем нужно как-то все проверять. Не подскажите как подключить экран к плате STM32F103C8T6 https://aliexpress.ru/item/400116324483 ... _5EALw_wcB ссылка на экран https://aliexpress.ru/item/32679505848. ... _5EALw_wcB что куда по пинам подключать что б проверить хотя бы сам экран, что б хоть от чего то уже отталкиваться. Плату заказывал на заводе так что качество платы хорошее. Буду благодарен за подсказки, куда копать, как это все проверить. Очень хочется повторить проэкт, и уже всем закупился, но с первого раза к сожалению не завелась :shock: :shock: :shock:
Ответить

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