Темброблок - анализатор спектра на STM32F103
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок - анализатор спектра на STM32F103
Нет, не через DMA
-
SgtPepper_91
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Пн ноя 30, 2015 03:52:00
Re: Темброблок - анализатор спектра на STM32F103
WiseLord, ааа... ух ты, и так быстро работает? замеряли fps?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок - анализатор спектра на STM32F103
Быстро работает потому, что ожидание готовности SPI в правильном месте. Пока аппаратно идёт отправка одного байта (полуточки), процессор не висит в ожидании, как во многих библиотеках, а занимается подготовкой следующего. FPS можете посчитать самостоятельно, учитывая, что при заливке экрана одним цветом нужно отправить 320*240*2*8 бит на частоте SPI 18MHz.
Вроде бы 14.6 FPS по расчёту выходит. Естественно, экран постоянно не перерисовывается, по возможности, только изменившиеся кусочки картинки. Для режима спектра там явно за 30 FPS будет.
Вроде бы 14.6 FPS по расчёту выходит. Естественно, экран постоянно не перерисовывается, по возможности, только изменившиеся кусочки картинки. Для режима спектра там явно за 30 FPS будет.
-
SgtPepper_91
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Пн ноя 30, 2015 03:52:00
Re: Темброблок - анализатор спектра на STM32F103
А можете поподробнее рассказать об этом механизме? Что значит "подготовка байта"? Я например хочу отправить два байта по spi, вызываю
Что я могу подготовить посередине? Может вы до этого объясняли или можете подсказать, где это у вас в коде?
Код: Выделить всё
send_spi_byte(&byte1);
send_spi_byte(&byte2);Что я могу подготовить посередине? Может вы до этого объясняли или можете подсказать, где это у вас в коде?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок - анализатор спектра на STM32F103
Во многих библиотеках отправка байта устроена не оптимально. Сначала данные кладут в регистр, а потом идёт провисание в цикле, ожидание регистра-приёмника (бит TXE). Так код писать проще, но по факту получается, что всё то время, пока байт отправляется, контроллер не делает ничего полезного. Если смотреть на сигнал SCK при таком подходе, получается 8 импульсов - пауза (на подготовку нового байта, например, данных очередного пиксела) - 8 импульсов - пауза и т.д. То есть, меандр SCK прерывается паузами. Покороче - при сплошной заливке цветом, подлиннее - при более сложных расчётах цвета очередной точки.
А правильно - в функции отправки байта сначала проверять TXE (свободен ли регистр-приёмник), а затем - уже класть текущий байт для передачи. И выходить из функции, занимаясь дальше чем-то полезным - подготовкой следующего пиксела, пока текущий аппаратно передаётся.
Единственное, в таком правильном подходе нужно корректно обрабатывать переключения CS и RS, чтобы не "обрубить" ими текущую передачу.
Под подготовкой байта нужно понимать, например, рассчитывание цвета очередной точки, если рисуется, например, градиентная многоцветная картинка. Или вытаскивание цвета этой точки из массива шрифта (шрифты обычно не хранят в родном для дисплея формате (RGB565 - 2 байта на пиксел), а упаковывают в 8 пикселов на байт (вертикально или горизонтально), поэтому нужно время, чтобы достать бит пиксела (0 или 1) и превратить его в 2 байта цвета (основного или фонового). Или выводимая картинка просто с SDCARD считывается попиксельно, сразу же с выводом на экран. В любом случае, всё это делать параллельно аппаратной передаче прошлого байта.
А правильно - в функции отправки байта сначала проверять TXE (свободен ли регистр-приёмник), а затем - уже класть текущий байт для передачи. И выходить из функции, занимаясь дальше чем-то полезным - подготовкой следующего пиксела, пока текущий аппаратно передаётся.
Единственное, в таком правильном подходе нужно корректно обрабатывать переключения CS и RS, чтобы не "обрубить" ими текущую передачу.
Под подготовкой байта нужно понимать, например, рассчитывание цвета очередной точки, если рисуется, например, градиентная многоцветная картинка. Или вытаскивание цвета этой точки из массива шрифта (шрифты обычно не хранят в родном для дисплея формате (RGB565 - 2 байта на пиксел), а упаковывают в 8 пикселов на байт (вертикально или горизонтально), поэтому нужно время, чтобы достать бит пиксела (0 или 1) и превратить его в 2 байта цвета (основного или фонового). Или выводимая картинка просто с SDCARD считывается попиксельно, сразу же с выводом на экран. В любом случае, всё это делать параллельно аппаратной передаче прошлого байта.
-
SgtPepper_91
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Пн ноя 30, 2015 03:52:00
Re: Темброблок - анализатор спектра на STM32F103
А где это в коде происходит? Просто есть функция dispdrvSendByte в dispdrv.c, но дальше я не могу найти откуда берутся функции DISP_SPI_SEND_BYTE и WRITE_BYTE, которые вызываются подряд...
Я посмотрел реализацию отправки байта по spi в HAL, разве это не такой механизм, как вы описываете? (ну наверное не такой, раз экран у меня заливается секунды две...).
Я посмотрел реализацию отправки байта по 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
Да, извините, забыл что Эклипс не ищет по тексту то, что спрятано за define...
-
Nadim
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Пт июн 21, 2019 15:13:02
- Откуда: Украина
- Контактная информация:
Re: Темброблок - анализатор спектра на STM32F103
to WiseLord
Добавьте пожалуйста для КаРадио "Паузу" при коротком нажатии на кнопку на панели, где сейчас находится кнопка воспроизведение. При длинном нажатии воспроизведение, а при коротком пауза.
Еще в меню заметил знаки вопроса на всех языках: Spektrum\Displey mode ??? Правда у меня не из последних прошивок - проверьте.
Добавьте пожалуйста для КаРадио "Паузу" при коротком нажатии на кнопку на панели, где сейчас находится кнопка воспроизведение. При длинном нажатии воспроизведение, а при коротком пауза.
Еще в меню заметил знаки вопроса на всех языках: Spektrum\Displey mode ??? Правда у меня не из последних прошивок - проверьте.
-
Nikishka70
- Открыл глаза
- Сообщения: 42
- Зарегистрирован: Вс июн 28, 2015 12:34:17
- Откуда: Россия г. Калуга
Re: Темброблок - анализатор спектра на STM32F103
может кому пригодится ..Дисплей 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.
работает нормально..как 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.
Re: Темброблок - анализатор спектра на STM32F103
заводские платы управления есть у кого нить?
-
mixa232323
- Прорезались зубы
- Сообщения: 217
- Зарегистрирован: Вт окт 01, 2013 01:04:31
- Откуда: Гомель
Re: Темброблок - анализатор спектра на STM32F103
Nikishka70, По даташиту там всё есть. У вас может быть другой дисплей. ILI9486 и ILI9488 отличаются но не помню чем. Не помешало бы вычитать содержимое регистров.
В дисплеях от нокиа бывают контролеры которые требуют прогрузить в определенный регистр типа код конвертации цвета. Без него на экран ничего не выводится кроме режима 24 бита.
В дисплеях от нокиа бывают контролеры которые требуют прогрузить в определенный регистр типа код конвертации цвета. Без него на экран ничего не выводится кроме режима 24 бита.
-
Nikishka70
- Открыл глаза
- Сообщения: 42
- Зарегистрирован: Вс июн 28, 2015 12:34:17
- Откуда: Россия г. Калуга
Re: Темброблок - анализатор спектра на STM32F103
да там все есть . но при подключении по SPI он понимает только RGB24BIT.
а у меня именно такой.
а у меня именно такой.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок - анализатор спектра на STM32F103
480x320 по SPI и без того не самая лучшая идея в смысле скорости отрисовки, а отягощённая 24-битностью - боюсь, совсем некомфортно будет.
-
aleksey_1184
- Нашел транзистор. Понюхал.
- Сообщения: 168
- Зарегистрирован: Сб сен 15, 2018 19:04:00
Re: Темброблок - анализатор спектра на STM32F103
Добрый день хочу повторить данный проект, походу возник вопрос, в режиме тюнера по rds считывается только названия станций или радио текст также.
Re: Темброблок - анализатор спектра на STM32F103
считывается то, что транслируется по RDS, но с антенной придется экспериментировать для хорошего приема сигнала RDS
Re: Темброблок - анализатор спектра на STM32F103
Подскажите пожалуйста какую прошивку использовать под этот экран
на ILI9486. Так как прошил прошивкой ampcontrol_f103_ili9486_8bit.bin но ничего не показывает, просто светится белый экран. Прошивал через STM-LINK Utility
на ILI9486. Так как прошил прошивкой ampcontrol_f103_ili9486_8bit.bin но ничего не показывает, просто светится белый экран. Прошивал через STM-LINK UtilityRe: Темброблок - анализатор спектра на STM32F103
Подскажите пожалуйста какую прошивку использовать под этот экран
на ILI9486. Так как прошил прошивкой ampcontrol_f103_ili9486_8bit.bin но ничего не показывает, просто светится белый экран. Прошивал через STM-LINK Utility
на ILI9486. Так как прошил прошивкой ampcontrol_f103_ili9486_8bit.bin но ничего не показывает, просто светится белый экран. Прошивал через STM-LINK UtilityThis is the same screen I use, I use ili9481 as 8 bit, try it if you want
Re: Темброблок - анализатор спектра на STM32F103
[uquote="bichko",url="/forum/viewtopic.php?p=3905300#p3905300"]Подскажите пожалуйста какую прошивку использовать под этот экран
на ILI9486. Так как прошил прошивкой ampcontrol_f103_ili9486_8bit.bin но ничего не показывает, просто светится белый экран. Прошивал через STM-LINK Utility
на ILI9486. Так как прошил прошивкой ampcontrol_f103_ili9486_8bit.bin но ничего не показывает, просто светится белый экран. Прошивал через STM-LINK UtilityThis 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 что куда по пинам подключать что б проверить хотя бы сам экран, что б хоть от чего то уже отталкиваться. Плату заказывал на заводе так что качество платы хорошее. Буду благодарен за подсказки, куда копать, как это все проверить. Очень хочется повторить проэкт, и уже всем закупился, но с первого раза к сожалению не завелась