Перейти к содержанию

    

Ruslan-maniak

Участник
  • Публикаций

    101
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Ruslan-maniak

  • Звание
    Частый гость

Информация

  • Город
    Томск

Посетители профиля

1 326 просмотров профиля
  1. Приветствую. Я только начинаю работать со звуковыми устройствами. Есть задача выводить звук в один линейный канал (небалансный) с хорошим качеством. Прочая работа со звуковыми данными ограничивает их битрейт сверху на отметке 24 бита 48кГц. Подскажите микросхему аудио ЦАП (желательно с 1 преобразователем) от которого можно получить качественное звучание с минимальной обвязкой, входным интерфейсом i2s и не большой ценой. Звук в формате простого аналогового сигнала, потому никакие кодеки не нужны. И звуковые процессоры тоже не нужны. Просто ЦАП с объективно хорошим качеством преобразования. Наличие встроенного усилителя, думаю, не обязательно. Прошу прощения если вопрос звучит дилетантски, я с аналоговыми сигналами и тем более с аудио практически не работал. Что бы вы применили для данной задачи? Спасибо.
  2. На чем писать

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

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

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

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

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

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

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

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

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

    Действительно, там шумновато. амплитуда шумов около 0.05 В. Попробую докинуть ёмкости. Но мне кажется, дело не только в шуме.
  13. 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);
  14. STM32F103 и сильный шум АЦП

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

    Приветствую коллеги. Реализую композитное (virtual com port и MIDI) юсб устройство на STM32F103 с использованием STM32_USB-FS-Device_Lib_V4.1.0. И столкнулся со следующей проблемой. Дескриптор составного устройства виндой воспринимается нормально. Я вижу все доступные мне интерфейсы и дрова к ним цепляются без проблем. Но почему-то данные получает и передает лишь тот интерфейс который сидит на EP1. А интерфейс который на EP3 данные не принимает. А при передаче отправляет заявленное кол-во байт, но почему-то из нулевого адреса USB памяти под буферы, а не из адреса буфера используемой конечной точки. То есть если поменять местами EP у интерфейсов то будет работать уже другой интерфейс - у которого окажется EP1. Привожу дескриптор конфигурации: CODE0x09, 0x02, VIRTUAL_COM_PORT_SIZ_CONFIG_DESC, 0x00, 0x03, 0x01, 0x00, 0x80, 0x32, // Config // MIDI 0x09, 0x04, 0x00, 0x00, 0x02, 0x01, 0x03, 0x00, 0x00, // Interface 1 0x07, 0x24, 0x01, 0x00, 0x01, 0x41, 0x00, // CS Interface (midi) 0x06, 0x24, 0x02, 0x01, 0x01, 0x00, // IN Jack 1 (emb) 0x06, 0x24, 0x02, 0x02, 0x02, 0x00, // IN Jack 2 (ext) 0x09, 0x24, 0x03, 0x01, 0x03, 0x01, 0x02, 0x01, 0x00, // OUT Jack 3 (emb) 0x09, 0x24, 0x03, 0x02, 0x04, 0x01, 0x01, 0x01, 0x00, // OUT Jack 4 (ext) 0x09, 0x05, 0x01, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, // Endpoint OUT 0x05, 0x25, 0x01, 0x01, 0x01, // CS EP IN Jack 0x09, 0x05, 0x81, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, // Endpoint IN 0x05, 0x25, 0x01, 0x01, 0x03, 0x08, /*length*/ 0x0B, /*Interface association descriptor type*/ 0x01, /*The first associated interface */ 0x02, /*Number of continuous associated interface*/ 0x02, /*bInterfaceClass of the first interface*/ 0x02, /*bInterfaceSubclass of the first interface*/ 0x02, /*bInterfaceProtocol of the first interface*/ 0x00, /*Interface string index*/ /*Interface Descriptor*/ 0x09, /* bLength: Interface Descriptor size */ USB_DESCRIPTOR_INTERFACE_TYPE, /* bDescriptorType: Interface */ /* Interface descriptor type */ 0x01, /* bInterfaceNumber: Number of Interface */ 0x00, /* bAlternateSetting: Alternate setting */ 0x01, /* bNumEndpoints: One endpoints used */ 0x02, /* bInterfaceClass: Communication Interface Class */ 0x02, /* bInterfaceSubClass: Abstract Control Model */ 0x01, /* bInterfaceProtocol: Common AT commands */ 0x00, /* iInterface: */ /*Header Functional Descriptor*/ 0x05, /* bLength: Endpoint Descriptor size */ 0x24, /* bDescriptorType: CS_INTERFACE */ 0x00, /* bDescriptorSubtype: Header Func Desc */ 0x10, /* bcdCDC: spec release number */ 0x01, /*Call Management Functional Descriptor*/ 0x05, /* bFunctionLength */ 0x24, /* bDescriptorType: CS_INTERFACE */ 0x01, /* bDescriptorSubtype: Call Management Func Desc */ 0x00, /* bmCapabilities: D0+D1 */ 0x01, /* bDataInterface: 1 */ /*ACM Functional Descriptor*/ 0x04, /* bFunctionLength */ 0x24, /* bDescriptorType: CS_INTERFACE */ 0x02, /* bDescriptorSubtype: Abstract Control Management desc */ 0x02, /* bmCapabilities */ /*Union Functional Descriptor*/ 0x05, /* bFunctionLength */ 0x24, /* bDescriptorType: CS_INTERFACE */ 0x06, /* bDescriptorSubtype: Union func desc */ 0x00, /* bMasterInterface: Communication class interface */ 0x01, /* bSlaveInterface0: Data Class Interface */ /*Endpoint 2 Descriptor*/ 0x07, /* bLength: Endpoint Descriptor size */ USB_DESCRIPTOR_ENDPOINT_TYPE, /* bDescriptorType: Endpoint */ 0x82, /* bEndpointAddress: (IN2) */ 0x03, /* bmAttributes: Interrupt */ 0x08, /* wMaxPacketSize: */ 0x00, 0xFF, /* bInterval: */ /*Data class interface descriptor*/ 0x09, /* bLength: Endpoint Descriptor size */ USB_DESCRIPTOR_INTERFACE_TYPE, /* bDescriptorType: */ 0x02, /* bInterfaceNumber: Number of Interface */ 0x00, /* bAlternateSetting: Alternate setting */ 0x02, /* bNumEndpoints: Two endpoints used */ 0x0A, /* bInterfaceClass: CDC */ 0x00, /* bInterfaceSubClass: */ 0x00, /* bInterfaceProtocol: */ 0x00, /* iInterface: */ /*Endpoint 3 Descriptor*/ 0x07, /* bLength: Endpoint Descriptor size */ USB_DESCRIPTOR_ENDPOINT_TYPE, /* bDescriptorType: Endpoint */ 0x03, /* bEndpointAddress: (OUT3) */ 0x02, /* bmAttributes: Bulk */ 0x40, /* wMaxPacketSize: */ 0x00, 0x00, /* bInterval: ignore for Bulk transfer */ /*Endpoint 1 Descriptor*/ 0x07, /* bLength: Endpoint Descriptor size */ USB_DESCRIPTOR_ENDPOINT_TYPE, /* bDescriptorType: Endpoint */ 0x83, /* bEndpointAddress: (IN3) */ 0x02, /* bmAttributes: Bulk */ 0x40, /* wMaxPacketSize: */ 0x00, 0x00, /* bInterval */ код конфигурации конечных точек CODEvoid Virtual_Com_Port_Reset(void) { /* Set Virtual_Com_Port DEVICE as not configured */ pInformation->Current_Configuration = 0; /* Current Feature initialization */ pInformation->Current_Feature = Virtual_Com_Port_ConfigDescriptor[7]; /* Set Virtual_Com_Port DEVICE with the default Interface*/ pInformation->Current_Interface = 0; SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_BULK); SetEPRxAddr(ENDP1, ENDP1_RXADDR); SetEPRxCount(ENDP1, 0x40); SetEPRxStatus(ENDP1, EP_RX_VALID); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxStatus(ENDP1, EP_TX_NAK); /* Initialize Endpoint 2 */ SetEPType(ENDP2, EP_INTERRUPT); SetEPTxAddr(ENDP2, ENDP2_TXADDR); SetEPRxStatus(ENDP2, EP_RX_DIS); SetEPTxStatus(ENDP2, EP_TX_NAK); // /* Initialize Endpoint 3 */ SetEPType(ENDP3, EP_BULK); SetEPRxAddr(ENDP3, ENDP3_RXADDR); SetEPRxCount(ENDP3, 0x40); SetEPRxStatus(ENDP3, EP_RX_VALID); SetEPTxAddr(ENDP3, ENDP3_TXADDR); SetEPTxStatus(ENDP3, EP_TX_NAK); /* Set this device to response on default address */ SetDeviceAddress(0); bDeviceState = ATTACHED; } определение адресов точек Код#define BTABLE_ADDRESS      (0x00) /* EP0  */ /* rx/tx buffer base address */ #define ENDP0_RXADDR        (0x18) #define ENDP0_TXADDR        (0x58) #define ENDP1_TXADDR        (0x98) #define ENDP1_RXADDR        (0xD8) #define ENDP2_TXADDR        (0x118) #define ENDP3_TXADDR        (0x130) #define ENDP3_RXADDR        (0x150) отправка и прием стандартные CODEuint32_t CDC_Send_DATA (uint8_t *ptrBuffer, uint8_t Send_length) { /*if max buffer is Not reached*/ if(Send_length < VIRTUAL_COM_PORT_DATA_SIZE) { /*Sent flag*/ packet_sent1 = 0; /* send packet to PMA*/ UserToPMABufferCopy((unsigned char*)ptrBuffer, ENDP1_TXADDR, Send_length); SetEPTxCount(ENDP1, Send_length); SetEPTxValid(ENDP1); } else { return 0; } return 1; } void EP3_OUT_Callback (void) { receive_length = GetEPRxCount(ENDP3); PMAToUserBufferCopy((unsigned char*)receive_Buffer, ENDP3_RXADDR, receive_length); packet_receive = 1; SetEPRxValid(ENDP3); } количество EP определено как Код#define EP_NUM                          (7) Если что-то ещё нужно показать - говорите.