Jump to content

    

Ruslan-maniak

Участник
  • Content Count

    102
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Ruslan-maniak

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

Информация

  • Город
    Array

Recent Profile Visitors

1577 profile views
  1. Приветствую, коллеги. Столкнулся с проблемой запуска дисплея на контроллере 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. Некоторые дополнения. Смотрите, у меня 20 идентичных по схемотехнике каналов. Все 20 каналов идут через повторители на ОУ. Перед ОУ стоят цифровые потенциометры которые в данный момент прижимают сигнал к земле накоротко. Если замерить мультиметром то сопротивление получается там около 200-300 Ом. Так вот сейчас для эксперимента запускаю измерения только для одного канала циклически через ДМА (буфер на 10 замеров) и каждую миллисекунду смотрю что в буфере. И например на канале ADC1-15 среднее значение этого буфера всегда равно нулю, а максимальный пик фиксируется за длительное время не более 10 LSB. Если же взять канал ADC1-10 то там картина разительно отличается. Среднее значение буфера скачет от 20 до 80 LSB. А максимальный пик фиксируется практически сразу в районе 180 LSB, и постепенно доходит до 200 LSB. Даже если я замыкаю напрямую землю контроллера и пин АЦП. На мой взгляд такое поведение вряд ли можно объяснить (оправдать) неправильной разводкой (разводка отличается лишь тем что длина дорожки от ОУ до АЦП больше на 4 см), непромывкой, или проблемами с питанием. Кто что думает?
  13. Действительно, там шумновато. амплитуда шумов около 0.05 В. Попробую докинуть ёмкости. Но мне кажется, дело не только в шуме.
  14. До 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. Приветствую. Пытаюсь запустить все АЦП каналы доступные на контроллере STM32F103ZCT (21 канал: 15 каналов в ADC1 и 6 каналов в ADC3) при одновременной работе через ДМА в циклическом режиме. То есть выборка происходит все время для всех каналов. И столкнулся со следующей проблемой. Очень большой шум в каналах (но не во всех). Даже если их накоротко посадить на землю, то на некоторых каналах (особенно у ADC3) измерения достигают 100-150 LSB. При чем эти значения не периодические, а постоянны, то есть ноль в канале я вижу реже чем значение выше например 50 LSB. При этом у каждого канала свой шум и он также зависит от Rank'а присвоенного при конфигурировании канала. Частота тактирования АЦП = 36МГц. Если её опускать то ничего не меняется. Время сэмплирования стоит максимальное ADC_SampleTime_239Cycles5. Подскажите как получить адекватные значения по всем каналам? Кто сталкивался с такой проблемой? Или СТМ на это не способен в принципе и стоит сразу смотреть в сторону внешних АЦП?