Jump to content

    

Ruslan-maniak

Участник
  • Content Count

    102
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Ruslan-maniak

  • Rank
    Частый гость

Информация

  • Город
    Томск

Recent Profile Visitors

1363 profile views
  1. ili9488

    Приветствую, коллеги. Столкнулся с проблемой запуска дисплея на контроллере ili9488 под управлением Stm32f429. Интерфейс для связи используется MIPI-DBI Type B 16-bit bus. Все пины кроме RESET сконфигурированы под альтернативную функцию FMC (AF = 0x0C). Думаю что проблема на уровне FMC так как cчитать например ID (команда 0x04) не получается. При любом считывании возвращается команда считывания. Например если я считываю ID то получаю 3 байта равных 0x04. Не могу найти в чем проблема. Железо точно рабочее, т.к. другая прошивка на нем работает как надо. Добавлю немного кода. 1) Используемые пины gpioFmcD0 = {D, 14, VERY_HIGH, MODE_FMC}, gpioFmcD1 = {D, 15, VERY_HIGH, MODE_FMC}, gpioFmcD2 = {D, 0, VERY_HIGH, MODE_FMC}, gpioFmcD3 = {D, 1, VERY_HIGH, MODE_FMC}, gpioFmcD4 = {E, 7, VERY_HIGH, MODE_FMC}, gpioFmcD5 = {E, 8, VERY_HIGH, MODE_FMC}, gpioFmcD6 = {E, 9, VERY_HIGH, MODE_FMC}, gpioFmcD7 = {E, 10, VERY_HIGH, MODE_FMC}, gpioFmcD8 = {E, 11, VERY_HIGH, MODE_FMC}, gpioFmcD9 = {E, 12, VERY_HIGH, MODE_FMC}, gpioFmcD10 = {E, 13, VERY_HIGH, MODE_FMC}, gpioFmcD11 = {E, 14, VERY_HIGH, MODE_FMC}, gpioFmcD12 = {E, 15, VERY_HIGH, MODE_FMC}, gpioFmcD13 = {D, 8, VERY_HIGH, MODE_FMC}, gpioFmcD14 = {D, 9, VERY_HIGH, MODE_FMC}, gpioFmcD15 = {D, 10, VERY_HIGH, MODE_FMC}, gpioFmcNOE = {D, 4, VERY_HIGH, MODE_FMC}, // RD gpioFmcNWE = {D, 5, VERY_HIGH, MODE_FMC}, // WR gpioFmcNE1 = {D, 7, VERY_HIGH, MODE_FMC}, // CS gpioFmcA12 = {G, 2, VERY_HIGH, MODE_FMC}; // D/C 2) Инициализация FMC void FmcInit (void) { FmcInitGpio(); RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FMC, ENABLE); FMC_NORSRAMTimingInitTypeDef FMC_ReadWriteTimingStruct = { .FMC_AddressSetupTime = 0, .FMC_AddressHoldTime = 0, .FMC_DataSetupTime = 4, .FMC_BusTurnAroundDuration = 0, .FMC_CLKDivision = 15, .FMC_DataLatency = 15, .FMC_AccessMode = FMC_AccessMode_A, }; FMC_NORSRAMInitTypeDef FMC_NORSRAMInitStructure = { .FMC_Bank = FMC_Bank1_NORSRAM1, .FMC_DataAddressMux = FMC_DataAddressMux_Disable, .FMC_MemoryType = FMC_MemoryType_SRAM, .FMC_MemoryDataWidth = FMC_NAND_MemoryDataWidth_16b, .FMC_BurstAccessMode = FMC_BurstAccessMode_Disable, .FMC_WaitSignalPolarity = FMC_WaitSignalPolarity_Low, .FMC_WrapMode = FMC_WrapMode_Disable, .FMC_WaitSignalActive = FMC_WaitSignalActive_BeforeWaitState, .FMC_WriteOperation = FMC_WriteOperation_Enable, .FMC_WaitSignal = FMC_WaitSignalPolarity_Low, .FMC_ExtendedMode = FMC_ExtendedMode_Disable, .FMC_AsynchronousWait = FMC_AsynchronousWait_Disable, .FMC_WriteBurst = FMC_WriteBurst_Disable, .FMC_ContinousClock = FMC_CClock_SyncOnly, .FMC_ReadWriteTimingStruct = &FMC_ReadWriteTimingStruct, .FMC_WriteTimingStruct = 0, }; FMC_NORSRAMInit(&FMC_NORSRAMInitStructure); FMC_NORSRAMCmd(FMC_Bank1_NORSRAM1, ENABLE); } 3) Функции чтения и записи void Ili9488WriteCommand (uint16_t cmd) { *(uint16_t*)(0x60000000) = cmd; } void Ili9488WriteData (uint16_t data) { *(uint16_t*)(0x60002000) = data; } void Ili9488ReadParam (uint16_t cmd, uint16_t* param, uint32_t len) { *(uint16_t*)(0x60000000) = cmd; param[0] = *(uint16_t*)(0x60002000); // dummy for(uint32_t i = 0; i < len; i++) param[i] = *(uint16_t*)(0x60002000); } Инициализацию думаю смысла нет показывать. Использовал разные варианты, в том числе вариант топик-стартера. Но скорее всего косяк уровнем ниже. Кто что может подсказать?
  2. Приветствую. Я только начинаю работать со звуковыми устройствами. Есть задача выводить звук в один линейный канал (небалансный) с хорошим качеством. Прочая работа со звуковыми данными ограничивает их битрейт сверху на отметке 24 бита 48кГц. Подскажите микросхему аудио ЦАП (желательно с 1 преобразователем) от которого можно получить качественное звучание с минимальной обвязкой, входным интерфейсом i2s и не большой ценой. Звук в формате простого аналогового сигнала, потому никакие кодеки не нужны. И звуковые процессоры тоже не нужны. Просто ЦАП с объективно хорошим качеством преобразования. Наличие встроенного усилителя, думаю, не обязательно. Прошу прощения если вопрос звучит дилетантски, я с аналоговыми сигналами и тем более с аудио практически не работал. Что бы вы применили для данной задачи? Спасибо.
  3. На чем писать

    Вы предлагаете сделать это на этом же процессоре? Я пока в своем уме чтобы так не делать. Если же вы предлагаете взять микроконтроллер предназначенный под bare-metal, то таковой с HDMI на борту я не знаю. Можно конечно использовать преобразователь интерфейсов с какого-нибудь параллельного RGB в HDMI, но по-моему куда логичнее и адекватнее использовать платформу на которой сразу все есть. Вопрос лишь как правильно использовать, и на него никто не дает ответа.
  4. На чем писать

    Ок. Я вас понял. Действительно стоило сначала проверить возможности железа. Но для меня стало шоком что малина не тянет столь примитивный интерфейс. Я такой интерфейс например на стм32f429 сделаю и он не будет тормозить. А тут такая подстава. Но основной мой вопрос был в том, а на чем тогда реализовать нужный мне кастомный интерфейс с озвученой архитектурой железа. Смотрю в сторону qt device creation, но где гарантии что там будут работать 2 дисплея как мне нужно.
  5. На чем писать

    Так этот пример же вроде бы на виджетах сделан. В приложениях построенных на виджетах ничего не лагает. Я смотрю на этот геморой с QML и то что мне по факту нужно видеть на экране и мне кажется я быстрее и надежнее напишу свою графическую либу которая будет гораздо быстрее работать.
  6. На чем писать

    Если интересно, вот Видео тормозов. Качество не очень, но все понятно.
  7. На чем писать

    Вы имеете в виду скомпилированную демку, или предлагаете взять исходники и собрать из них на моем текущем qt. Если первое, то я не нахожу такого. А если второе, то не вижу в этом смысла. Моя приложуха и так крайне примитивная: фон png, и listview из 3 элементов , где делегат это картинка png меняющаяся в зависимости установлен фокус на элемент или нет. Я думаю что косяк в том что qt собран с неподходящим конфигом. Но не уверен в этом.
  8. На чем писать

    Vnc к тому, что подключившись к малине по vnc (там spi и не пахнет) и запустив приложение я также наблюдаю жуткие тормоза. Так spi же ни как не связано с тем что и каким образом складывается во фреймбуфер. Я не сильно секу в линуксе. Я занимаюсь bare-metal разработкой.
  9. На чем писать

    А что насчет vnc? Там также ни как не учавствует видеоядро? Я просто искренне надеялся что gpu будет работать с фрэймбуфером, а spi драйвер будет выдергивать данные из фрэймбуффера и передавать на дисплей. То есть вы считаете что в малине аппаратные ограничения и то что я хочу сделать - не получится?
  10. На чем писать

    Приветствую. Вопрос на чем сделать gui под малину для меня тоже очень актуален. И в его решении столкнулся со следующей проблемой: написал на QML (не сильно сложный интерфейс) и С++ приложение на винде. Все более-менее нормально работает. Скинул проект на малину, там собрал его. И что я вижу QML дичайше тормозит и лагает. Встречал совет что надо включить аппаратное ускорение OpenGL. Однако у меня к малине подключено 2 дисплея (по HDMI и по SPI). По hdmi - является просто периферийное устройство в которое я напрямую пишу через dev/fb0. А иксы работают на дисплее по SPI и соответственно приложуха там же должна отображаться в киоск режиме. Так вот если я включаю openGL то иксы отваливаются от SPI-дисплея. И на этом тупик. Я не могу в моем случае получить адекватный кастомный gui на малине. Кто может что посоветовать?
  11. Подскажите опытные товарищи. Использую этот способ для сквозной нумерации в каналах. Но получается так что нумерация происходит, а вопросительный знак остаётся. Если в дезигнаторе удалить вопросительны знак, то и после нумерации его не будет. И в целом как-то там всё нестабильно с этим. Бывает что вообще любой вид нумерации оставляет знак вопроса, бывает починится. С чем это связано определить не получается.
  12. STM32F103 и сильный шум АЦП

    Некоторые дополнения. Смотрите, у меня 20 идентичных по схемотехнике каналов. Все 20 каналов идут через повторители на ОУ. Перед ОУ стоят цифровые потенциометры которые в данный момент прижимают сигнал к земле накоротко. Если замерить мультиметром то сопротивление получается там около 200-300 Ом. Так вот сейчас для эксперимента запускаю измерения только для одного канала циклически через ДМА (буфер на 10 замеров) и каждую миллисекунду смотрю что в буфере. И например на канале ADC1-15 среднее значение этого буфера всегда равно нулю, а максимальный пик фиксируется за длительное время не более 10 LSB. Если же взять канал ADC1-10 то там картина разительно отличается. Среднее значение буфера скачет от 20 до 80 LSB. А максимальный пик фиксируется практически сразу в районе 180 LSB, и постепенно доходит до 200 LSB. Даже если я замыкаю напрямую землю контроллера и пин АЦП. На мой взгляд такое поведение вряд ли можно объяснить (оправдать) неправильной разводкой (разводка отличается лишь тем что длина дорожки от ОУ до АЦП больше на 4 см), непромывкой, или проблемами с питанием. Кто что думает?
  13. STM32F103 и сильный шум АЦП

    Действительно, там шумновато. амплитуда шумов около 0.05 В. Попробую докинуть ёмкости. Но мне кажется, дело не только в шуме.
  14. STM32F103 и сильный шум АЦП

    До 4095 не доходит. В районе 4000 LSB. плюс-минус. Калибровку произвожу ADC_Cmd(adc->number, ENABLE); // калибровка АЦП ADC_ResetCalibration(adc->number); while(ADC_GetResetCalibrationStatus(adc->number)); ADC_StartCalibration(adc->number); while(ADC_GetCalibrationStatus(adc->number)); ADC_SoftwareStartConvCmd(adc->number, ENABLE);
  15. STM32F103 и сильный шум АЦП

    Приветствую. Пытаюсь запустить все АЦП каналы доступные на контроллере STM32F103ZCT (21 канал: 15 каналов в ADC1 и 6 каналов в ADC3) при одновременной работе через ДМА в циклическом режиме. То есть выборка происходит все время для всех каналов. И столкнулся со следующей проблемой. Очень большой шум в каналах (но не во всех). Даже если их накоротко посадить на землю, то на некоторых каналах (особенно у ADC3) измерения достигают 100-150 LSB. При чем эти значения не периодические, а постоянны, то есть ноль в канале я вижу реже чем значение выше например 50 LSB. При этом у каждого канала свой шум и он также зависит от Rank'а присвоенного при конфигурировании канала. Частота тактирования АЦП = 36МГц. Если её опускать то ничего не меняется. Время сэмплирования стоит максимальное ADC_SampleTime_239Cycles5. Подскажите как получить адекватные значения по всем каналам? Кто сталкивался с такой проблемой? Или СТМ на это не способен в принципе и стоит сразу смотреть в сторону внешних АЦП?