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

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

Сообщение WiseLord »

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

Сообщение SgtPepper_91 »

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

Сообщение WiseLord »

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

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

Сообщение SgtPepper_91 »

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

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

send_spi_byte(&byte1);
send_spi_byte(&byte2);
Что я могу подготовить посередине? Может вы до этого объясняли или можете подсказать, где это у вас в коде?
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

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

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

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

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

Сообщение 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;
        }
      }
    }
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

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

Сообщение SgtPepper_91 »

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

Сообщение Nadim »

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

Сообщение 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.
Родился
Сообщения: 8
Зарегистрирован: Ср авг 21, 2019 14:13:12

Сообщение f11006 »

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

Сообщение mixa232323 »

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

Сообщение Nikishka70 »

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

Сообщение WiseLord »

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

Сообщение jn79 »

[uquote="f11006",url="/forum/viewtopic.php?p=3900248#p3900248"]заводские платы управления есть у кого нить?[/uquote]
у меня 4 осталось
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Сб сен 15, 2018 19:04:00

Сообщение aleksey_1184 »

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

Сообщение Pavlon90 »

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

Сообщение bichko »

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

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

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



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

Сообщение bichko »

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



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:
Ответить

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