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

repstosw

Участник
  • Постов

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

  • Победитель дней

    2

Весь контент repstosw


  1. Могу сделать. Плата пока в чертеже. По сути оно необходимо, иначе чутьё микрофона с закрытым отверстием уменьшится. Размер платы не превысит 8 x 8 см. Четыре слоя, два внутренних слоя - сплошные плоскости - при нагреве они много тепла поглощают. Толщина 1,5 мм. Фольга 0.18, материал FR4.
  2. Чем можно заменить нижний прогрев? У меня нет его. Если феном поддуть снизу, а потом сверху? Плата в держателе, есть доступ снизу и сверху. И надо ли феном выравнивать поверхность залуженных дорожек на плате перед пайкой микрофона сверху?
  3. Ну тоесть: 1. залудили контакты на плате свинцовым припоем - до небольших бугорков 2. нанести флюс гель на эти же площадки - для пайки BGA в совсем малом количестве 3. установить микрофон - зафиксировать правильное положение 4. продуть феном на 220-230 градусов У меня несколько вопросов: 1. С контактами микрофона - точно ничего делать не надо? Может их тоже следует залудить немного? 2. Есть ли гаранития, если ответ в п.1 - нет, то контакт площадок с микрофона надежно схватится припоем с платы, особенно на 220 градусов? Помню, раньше паял аналогичное, но весь извёлся по нескольким причинам: 1. Пайка была иногда ненадёжной - приходилось греть на бОльшей температуре 2. микрофон повело при пайке - приходилось перепаивать 3. мог затечь флюс в акустику. Тогда как повезёт - иголкой вычищать или перепаивать новый микрофон
  4. Есть такой I2S-микрофон: Собственно, вопрос - как его надёжно припаять на печатную плату? Из того что имеется в распоряжении: припой ПОС-61, паяльная паста, сплав Розе, твёрдая канифоль, жидкий паяльный флюс, этанол(мед. спирт), паяльная станция, паяльный фен с насадками. Из опасений: 1) акустическое отверстие на стороне контактов - могут попасть отсатки флюса, спирта, канифоли... 2) из-за соблюдения осторожности по пункту 1) - может быть неконтакт с платой из-за непропая. Итак, как методично в вышеописанных условиях надёжно припаять это?
  5. Вообще-то я так и сделал. Теперь стоит задача подрезать буфер до 16 бит на семпл, чтобы сэкономить память, при этом сохранив семплы, оставив их 32 битными из-за микрофона. Важно, не то, что я кормлю усилителю, а то, как это хранится в памяти: я хочу чтобы это были 16-битные семплы без лишнего старшего полу-слова с нулями. Увы, I2S не может делать разрядность семпла приёма и передачи разными - только одинаковые. Я хочу, чтобы семплы для усилителя брались с младших 16 бит TX_FIFO, а с микрофона записывались 32-битные семплы из RX_FIFO. Таким образом, иметь 16-битный буфер для усилителя и 32-битный буфер с микрофона. MAX98357A в действии. Вместе с 2-ваттной мини-колонкой 8 Ом:
  6. Вопрос про DMA. Есть регистр TX_FIFO - он 32-битный, тип IO для DMA (адрес не инкрементируется). Есть буфер семплов в памяти - они 16-битные s16 Buffer[N]. Если сделать размер семпла I2S 16 бит, то DMA-транзакции с 16-битным шагом приращения источника и приёмника работают правильно. Если сделать размер семпла I2S 32 бит, то DMA-транзакции с 32-битным шагом приращения источника и приёмника работают правильно. Но если сделать размер семпла 32 бита, а DMA-транзакции с 16-битным шагом приращения источника и приемника, то работает неправильно - я слышу голос с цифровым хрустом, потому что в TX_FIFO попадает 2 записи с буфера - одна в его младшую часть, другая в старшую. Проверяется это путём зануления всех четных байт в буфере семплов. Собственно вопрос: можно ли сделать так, чтобы при копировании DMA, запись с буфера семплов шла только в младшую шасть регистра TX_FIFO, а старшая часть регистра игнорировалась? Это нужно для того, чтобы сделать I2S семплы 32-битными(или 24-битными), шина общая. Микрофон поддерживает 24- и 32-битные семплы, а усилитель - 16 битные семплы. Чтобы сэкономить память на усилитель (16-битные семплы), а память на микрофон была 32 битной (для поднятия усиления, младшие биты сдвинутся влево в старншие, без потери точности при усилении).
  7. Zero copy было в самом начале. Действительно, не нужно ничего никуда копировать процессором , если DMA перебрасывает семплы с микрофона в буфер и сразу же с буфера в УНЧ. Но впоследствии понадобилось усиление (Digital Gain) + клиппинг , и пришлось делать это ручками в обработчике прерывания: #define SBS (32000/10) s16 IBuffer[SBS*2] __attribute__ ((aligned (64))); s16 OBuffer[SBS*2] __attribute__ ((aligned (64))); #define GAIN 4 s32 DMA_IRQ_Handler(void *arg) { #if DMA_I2SI_CHANNEL < 8 u32 s=DMA_IRQ_PEND_REG0; DMA_IRQ_PEND_REG0=s; #else u32 s=DMA_IRQ_PEND_REG1; DMA_IRQ_PEND_REG1=s; #endif s32 f; static u8 z=0; z|=s; if(z==0x11)f=0; else if(z==0x22)f=SBS; else f=-1; if(f!=-1) { cache_inv_range((u32)&IBuffer[f],((u32)&IBuffer[f])+(SBS*sizeof(TYPE))); for(int i=0;i<sizeof(OBuffer)/sizeof(s16)/2;i++)OBuffer[f+i]=__SSAT(((s32)IBuffer[f+i])*GAIN,16); cache_flush_range((u32)&OBuffer[f],((u32)&OBuffer[f])+(SBS*sizeof(TYPE))); z=0; } UART_putc(s+'0'); return 0; } Такое тоже делал, работает. Мне без разницы какой метод использовать - два дескриптора + full buffer прерывание, или один дескриптор + два прерывания: half и full buffer. P.S. Вспомнил, в V3s когда буфер был в SRAM - работало только прерывание Full buffer. там и нужны были 2 дескриптора. С DDR работали оба прерывания(half/full). И здесь я уже об этом писал несколько лет назад в этой теме...
  8. Попробую. Результат напишу. Подключил микрофон ICS‐43434 к I2S от T113-s3. В итоге сделал Full-Duplex I2S: одновременно работает микрофон ICS‐43434 и усилитель MAX98357A. Несмотря на то, что устройства разные, работает идеально. Используются 2 DMA канала и 4 источника прерывания - Half/Full buffer для микрофона и усилителя. Порт I2S использую один - I2S1. Второй свободен (I2S0). У микрофона высокий динамический диапазон: Полностью избавился от аналога. Теперь не нужно никаких LDO ставить вообще!
  9. Вопрос к гуру олвиннеро-строительства. Внешнее прерывание через GPIO. Нужно отлавливать прерывания по фронту и спаду (rising & falling edges). Сам обработчик прерывания работает исправно. Вопрос вот в чём: можно ли понять какое именно прерывание произошло: по фронту или спаду? Не нашёл такого регистра в GPIO. Может регистр GIC поможет? P.S. Вариант опроса по ножке GPIO_DAT не предлагать - он не работает, когда функция порта выбрана EINT.
  10. Скорее всего, некорректно оценивать освещённость, используя показание камеры. Потому что обнаружил две вещи: 1. Всплеск и нормализация показаний во время включения и выключения света: работает АРУ камеры 2. Показания зависят от площади белого и чёрного в кадре. К освещенности это не имеет никакого отношения. Например: чёрный материал потолка и стен, при этом в помещении светло и кадр виден полностью. Дополнительного освещения не требуется, а показания с камеры малы.
  11. Работает с точностью наоборот: когда темно - гаснет, когда светло - горит на максимуме. Исправил так: PWM_new = ((CAM_max-CAM_out) - PWM_old * K1) * K2 Избавился от осцилляции (миганий на двух состояниях : минимум-максимум) - нужно усреднять два смежных показания камеры: #define constrain(x,min,max) (((x)<(min))?(min):(((x)>(max))?(max):(x))) u8 avg; ov5640_read_reg(OV5640_AVG_READOUT,&avg); static float AVG=0.0; AVG+=(float)avg; AVG/=2.0; #define k1 0.05 #define k2 1.0 static s32 pwm=0; pwm=constrain(((((float)(0x30-AVG))-(((float)pwm)*k1))*k2),0,100); PWM_Camera(pwm); Вопрос о подборе коэффициентов k1, k2 остаётся открытым
  12. Этот вопрос решён применением специальной рассеивающей линзы. Target image luminance average value (AVG). Попробую вашу формулу. Есть какие-либо рекомендации по подбору или расчёту коэффициентов K1,K2 ? Если известен диапазон ШИМ и диапазон показаний камеры. Точно не знаю, но скорее всего есть. Но в темноте я получаю чёрный квадрат с камеры.
  13. Для речевого сигнала частота семплирования 24 кГц - это шикардос. Полосы 0..12 кГц хватает, чтобы слышать не "бу-бу-бу...", а вполне идентифицированный голос. Кодек CELT, мода 24 кбит/c, 50 байтов на сжатый семпл. Даже музыка удовлетворительно прослушиватся. P.S. В MELP2400 вообще Fs=8 кГц, и ничего, живут с этим. Зато сжатие колоссальное выходит. P.P.S. А вот всякие потрескивания и попискивания в аудиотракте из-за мгновенных просадок питающего напряжения и паразитного детектирования ВЧ-полей - я НЕ прощаю.
  14. Всем спасибо за PID-регулятор! Не знал, что есть такой. До создания этой темы гуглил "динамическая/адаптивная подсветка/освещение" - всё не то: там всё касается дискотечного оформления залов, но никак не то, что я искал. Нашёл статью про PID-регулятор: https://alexgyver.ru/lessons/pid/ Как я понял, фильтровать показания средней освещённости с камеры мне не нужно - относительно медленно-меняющееся значение: камера даёт 15 FPS (больше мне не требуется) - это dt=0.0667 с Пока смотрю на P- коэффициент. Остальные I,D пока задал нулевыми. Целевое значение с камеры: 0x2C - это освещенность при нормальном дневном свете. Пределы для ШИМ выставил 10 и 90%. avg - текущее показание камеры. Функция с аргументами: Собственно вопрос - как подобрать коэффициенты? И ещё, если P-коэффициент делать большим, то выходит осцилляция - лицо человека отражает яркий свет на камеру и получается вспышки интервалом 0,3 с. Как избежать этого ? Использую мегагерцовый ШИМ
  15. Есть модуль камеры OV5640, подключенный к плате. И есть яркий светодиод с DC/DC-конвертером в режиме источника тока. Конвертер может диммироваться через PWM от платы. Камера может возвращать среднюю освещённость кадра. Вопрос собственно: возможно ли сделать динамическое освещение: когда окружающего света много - подсветка выключается: PWM=0%, когда совсем темно - подсветка включается на полную PWM=100%. Когда внешнее освещение слабое - PWM варьируется динамически от 10 до 90%. Пробовал это сделать - часто возникает осцилляция: светодиод загорается, камера фиксирует прирост яркости, светодиод отключается, снова темно, и так по кругу. Есть ли способ это обойти?
  16. Эти ограничения у MAX98357. Про ресемплирование у T113-s3 здесь: И на структурной схеме показано только одно направление : из внешнего мира в T113:
  17. Стр. 16 Но у меня работает. Возможно, свежая ревизия чипов, уже исправили эту несправедливость. Потому что частота семплирования 24 кГц более логична, чем 44.1 кГц, и тем более 88.2. И вообще всё кратное 8 - это хорошо!
  18. Проверил. Аудиотракт чистый, несмотря на наличие ВЧ излучения 1 Вт рядом с микросхемой. Аналог гениально запрятан в чип и защищён фильтрами, экранами... Штатный PAM8301 летит в помойку: не выдерживает никакой конкуренции с MAX98357
  19. Варианты с выравниванием дадут более уродливый дизайн или потребуют больше вентилей? Даташит на микросхему говорит, что на частоте семплирования 24 кГц работать не будет. Проверил: работает. В обоих случаях: с одинаковым содержимым левого и правого канала, и с разным содержимым. Подвоха не заметил. Мне 24 кГц было нужно. Хотя I2S T113-s3 позволяет аппаратно сресемплировать с коэффициентом 1/8 до 7.5x. Интересно, в бОльшую сторону есть интерполяция или нет? Или тупо дублирование семплов в соседние места?
  20. Да. Особенность кодека в том, что этот оффсет надо выставлять отдельно в нужном регистре, а не только в регистре выбора режима. Сам I2S мне кажется несколько дебильным не логичным: зачем этот бит впереди, из-за которого сдвигаются остальные биты в каналах, при этом, младший бит левого канала уходит в строб LRCLK правого канала: На этом фоне, Left- и Right- Justified форматы кажутся более логичными.
  21. Пришли платы с MAX98357A (заказывал в "АмперКот"). Настроил I2S в режиме настоящего I2S (до этого был режим Right Justified для ЦАП UDA1334BTS). Из особенностей: нужно было добавить +1 offset (в битах 20..21 регистр I2S_PCM_TX0CHSEL), иначе на максимальных амплитудах звук хрипел. С оффсетом всё гладко. Плата по умолчанию с усилением +9 дБ (максимум до 15) и микширует оба канала в один (что мне и нужно!). Отличное подавление пульсаций питающего напряжения - ничего не слышу в наушниках кроме полезного звука. Так что на пульсации питающего напряжение можно забить Осталось проверить, как микросхема поведёт себя рядом с антенной передатчика 1 Вт. И если всё хорошо, то вопрос с "аналогом" можно закрыть.
  22. Предложения актуальны. По всем вопросам пишите на repstosw2018 @ gmail.com
  23. SDK Allwinner V3s

    Предложения актуальны. По всем вопросам пишите на repstosw2018 @ gmail.com
  24. Приведённая схема частотного детектора с DSPlib и выход фазы демодулятора - это разные вещи. Я ничего не делю. По отсчётам фазы нахожу мгновенную частоту. Можно ли по отсчётам фазы просуммировать сигналы?
  25. Просто просуммировать два сигнала как комплексные числа? То, что в числителе на схеме.
×
×
  • Создать...