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

repstosw

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

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

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

    2

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


  1. Попробую. Результат напишу. Подключил микрофон ICS‐43434 к I2S от T113-s3. В итоге сделал Full-Duplex I2S: одновременно работает микрофон ICS‐43434 и усилитель MAX98357A. Несмотря на то, что устройства разные, работает идеально. Используются 2 DMA канала и 4 источника прерывания - Half/Full buffer для микрофона и усилителя. Порт I2S использую один - I2S1. Второй свободен (I2S0). У микрофона высокий динамический диапазон: Полностью избавился от аналога. Теперь не нужно никаких LDO ставить вообще!
  2. Вопрос к гуру олвиннеро-строительства. Внешнее прерывание через GPIO. Нужно отлавливать прерывания по фронту и спаду (rising & falling edges). Сам обработчик прерывания работает исправно. Вопрос вот в чём: можно ли понять какое именно прерывание произошло: по фронту или спаду? Не нашёл такого регистра в GPIO. Может регистр GIC поможет? P.S. Вариант опроса по ножке GPIO_DAT не предлагать - он не работает, когда функция порта выбрана EINT.
  3. Скорее всего, некорректно оценивать освещённость, используя показание камеры. Потому что обнаружил две вещи: 1. Всплеск и нормализация показаний во время включения и выключения света: работает АРУ камеры 2. Показания зависят от площади белого и чёрного в кадре. К освещенности это не имеет никакого отношения. Например: чёрный материал потолка и стен, при этом в помещении светло и кадр виден полностью. Дополнительного освещения не требуется, а показания с камеры малы.
  4. Работает с точностью наоборот: когда темно - гаснет, когда светло - горит на максимуме. Исправил так: 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 остаётся открытым
  5. Этот вопрос решён применением специальной рассеивающей линзы. Target image luminance average value (AVG). Попробую вашу формулу. Есть какие-либо рекомендации по подбору или расчёту коэффициентов K1,K2 ? Если известен диапазон ШИМ и диапазон показаний камеры. Точно не знаю, но скорее всего есть. Но в темноте я получаю чёрный квадрат с камеры.
  6. Для речевого сигнала частота семплирования 24 кГц - это шикардос. Полосы 0..12 кГц хватает, чтобы слышать не "бу-бу-бу...", а вполне идентифицированный голос. Кодек CELT, мода 24 кбит/c, 50 байтов на сжатый семпл. Даже музыка удовлетворительно прослушиватся. P.S. В MELP2400 вообще Fs=8 кГц, и ничего, живут с этим. Зато сжатие колоссальное выходит. P.P.S. А вот всякие потрескивания и попискивания в аудиотракте из-за мгновенных просадок питающего напряжения и паразитного детектирования ВЧ-полей - я НЕ прощаю.
  7. Всем спасибо за PID-регулятор! Не знал, что есть такой. До создания этой темы гуглил "динамическая/адаптивная подсветка/освещение" - всё не то: там всё касается дискотечного оформления залов, но никак не то, что я искал. Нашёл статью про PID-регулятор: https://alexgyver.ru/lessons/pid/ Как я понял, фильтровать показания средней освещённости с камеры мне не нужно - относительно медленно-меняющееся значение: камера даёт 15 FPS (больше мне не требуется) - это dt=0.0667 с Пока смотрю на P- коэффициент. Остальные I,D пока задал нулевыми. Целевое значение с камеры: 0x2C - это освещенность при нормальном дневном свете. Пределы для ШИМ выставил 10 и 90%. avg - текущее показание камеры. Функция с аргументами: Собственно вопрос - как подобрать коэффициенты? И ещё, если P-коэффициент делать большим, то выходит осцилляция - лицо человека отражает яркий свет на камеру и получается вспышки интервалом 0,3 с. Как избежать этого ? Использую мегагерцовый ШИМ
  8. Есть модуль камеры OV5640, подключенный к плате. И есть яркий светодиод с DC/DC-конвертером в режиме источника тока. Конвертер может диммироваться через PWM от платы. Камера может возвращать среднюю освещённость кадра. Вопрос собственно: возможно ли сделать динамическое освещение: когда окружающего света много - подсветка выключается: PWM=0%, когда совсем темно - подсветка включается на полную PWM=100%. Когда внешнее освещение слабое - PWM варьируется динамически от 10 до 90%. Пробовал это сделать - часто возникает осцилляция: светодиод загорается, камера фиксирует прирост яркости, светодиод отключается, снова темно, и так по кругу. Есть ли способ это обойти?
  9. Эти ограничения у MAX98357. Про ресемплирование у T113-s3 здесь: И на структурной схеме показано только одно направление : из внешнего мира в T113:
  10. Стр. 16 Но у меня работает. Возможно, свежая ревизия чипов, уже исправили эту несправедливость. Потому что частота семплирования 24 кГц более логична, чем 44.1 кГц, и тем более 88.2. И вообще всё кратное 8 - это хорошо!
  11. Проверил. Аудиотракт чистый, несмотря на наличие ВЧ излучения 1 Вт рядом с микросхемой. Аналог гениально запрятан в чип и защищён фильтрами, экранами... Штатный PAM8301 летит в помойку: не выдерживает никакой конкуренции с MAX98357
  12. Варианты с выравниванием дадут более уродливый дизайн или потребуют больше вентилей? Даташит на микросхему говорит, что на частоте семплирования 24 кГц работать не будет. Проверил: работает. В обоих случаях: с одинаковым содержимым левого и правого канала, и с разным содержимым. Подвоха не заметил. Мне 24 кГц было нужно. Хотя I2S T113-s3 позволяет аппаратно сресемплировать с коэффициентом 1/8 до 7.5x. Интересно, в бОльшую сторону есть интерполяция или нет? Или тупо дублирование семплов в соседние места?
  13. Да. Особенность кодека в том, что этот оффсет надо выставлять отдельно в нужном регистре, а не только в регистре выбора режима. Сам I2S мне кажется несколько дебильным не логичным: зачем этот бит впереди, из-за которого сдвигаются остальные биты в каналах, при этом, младший бит левого канала уходит в строб LRCLK правого канала: На этом фоне, Left- и Right- Justified форматы кажутся более логичными.
  14. Пришли платы с MAX98357A (заказывал в "АмперКот"). Настроил I2S в режиме настоящего I2S (до этого был режим Right Justified для ЦАП UDA1334BTS). Из особенностей: нужно было добавить +1 offset (в битах 20..21 регистр I2S_PCM_TX0CHSEL), иначе на максимальных амплитудах звук хрипел. С оффсетом всё гладко. Плата по умолчанию с усилением +9 дБ (максимум до 15) и микширует оба канала в один (что мне и нужно!). Отличное подавление пульсаций питающего напряжения - ничего не слышу в наушниках кроме полезного звука. Так что на пульсации питающего напряжение можно забить Осталось проверить, как микросхема поведёт себя рядом с антенной передатчика 1 Вт. И если всё хорошо, то вопрос с "аналогом" можно закрыть.
  15. Предложения актуальны. По всем вопросам пишите на repstosw2018 @ gmail.com
  16. SDK Allwinner V3s

    Предложения актуальны. По всем вопросам пишите на repstosw2018 @ gmail.com
  17. Приведённая схема частотного детектора с DSPlib и выход фазы демодулятора - это разные вещи. Я ничего не делю. По отсчётам фазы нахожу мгновенную частоту. Можно ли по отсчётам фазы просуммировать сигналы?
  18. Просто просуммировать два сигнала как комплексные числа? То, что в числителе на схеме.
  19. Есть отсчёты мгновенных фаз: Ф1(t) и Ф2(t). Из которых можно получить квадратуры I1(t)=cos(Ф1(t)) Q1(t)=sin(Ф1(t)) I2(t)=cos(Ф2(t)) Q2(t)=sin(Ф2(t)). Или отсчёты частоты F1(t) F2(t). С них можно сделать EGC? О каком ограничении идёт речь? Если нельзя, тогда вторая часть вопроса: допустим есть две пары квадратур I1,I2, Q1, Q2. Для простоты считаем их комплексными отсчётами во времени. Что дальше с ними делать для EGC?
  20. Итак... Настало время вернуться к вопросу о манипуляции с данными с двух приёмников, чтобы спастись от плоских замираний. Есть 2 приёмника с антеннами, которые разнесены на лямбда пополам или с взаимно-ортогональной ориентацией. Есть доступ к мгновенным фазам с фазового детектора: atan2 и знак +/-. Вопрос, как правильно "складывать" мощность сигналов чтобы убрать вредительство от замирания? Допустим, с одной антенны сигнал хороший, с другой плохой. Нужно постоянно с каждым отсчётом манипулировать данными отсчётов фазы. petrov что-то говорил пр EGC. Но точно не уверен. Интересует - какие операции нужно проделать над сигналами?
  21. Проверил: выставлял разный Gain для PGA, DAC - результат одинаковый. Ибо AРУ ещё есть потому что. Ну если так, тогда вот мягкие отсчёты - на выходе синхронизатора (умноженные на 0.5, для приведения к [-1..+1] ) - слева преамбула, потом синхрослово 0x5A0FBE66 и потом данные: байты от 0 до 255 : Это 50 кбит/c, девиация +/- 25 кГц. 12 отсчётов на бит(среднее). Запустил на несколько минут симуляцию в GNU Radio (циклически одни и те же анные с файла сигнала). В итоге, протестил все пакеты - все без ошибки. И что самое интересное, мой "детский" алгоритм тоже декодирует пакеты правильно. Но там, где начинает падать отношение сигнал-шум, вариант с синхронизатором работает лучше (больше пакетов даёт валидных, чем "детский" способ). Для 2FSK индекс модуляции понятно как считается. А как он считается для 4FSK? берется inner или outer девиация? P.S. Усовершенствовал забор данных отсчётов фазы с Si4463: теперь данные можно забирать со скоростью 1.615 млн. отсчётов в секунду. Это соответствует заполнению одной половины кольцевого буфера 128 отсчётов за 0.079 мс. По-хорошему надо интерполировать, так как некоторые смежные отсчёты фазы одинаковые.
  22. Такая возможность есть. Но частота опроса регистра должна быть высокой, боюсь что вход и выход из обработчика прерывания по таймеру снизят частоту опроса. Спасибо, помогло. Всё-же у Si4463 время выполнения команд ядра 8051 отличается от дефолтного i8051. Первоначально я брал данные о растактовках здесь: https://mp8051.narod.ru/commands.html Подытоживая: mov A,SFR ;2 movx @DPTR,A ;3 inc DPTR ;1 nop ;1 djnz R2,Label ;2/3 mov A,#0x15 ;2 movx @R1,A ;3 clr A ;1 mov R2,#0x18 ;2 sjmp Label ;3
  23. Здесь пишу на ассемблере sdas8051. Си не использую.
  24. Меня это не интересует. Меня интересует число машинных циклов для каждой инструкции. Проще говоря, во сколько раз одна инструкция быстрее-медленее другой. Нет такой возможности. Точнее - есть, но только в виде "память - SPI". А DMA типа "SFR - память" - нет. Да, он самый! Нужно выставлять ножку в 0 или 1 после заполнения буфера для SPI через DMA. Половина - буфер 128 байт. В буфер кладутся значения SFR-регистра фазы. Требуется очень равными интервалами читать регистр фазы и без джиттера дёргать ножку в 0 и 1 (для IRQ мастер-контроллера). То, что я сделал - работает, фаза дампится в кольцевой буфер для мастер-контроллера, но просмотр отсчётов показал, что есть небольшой джиттер в отсчётах фазы 1-2%. Я помню, умельцы делали на AVR-ках VGA-контроллеры и всякие ГИТС для ТВ с шахматными клетками и полосками - у них всё было ровно: по тактам расчитано. В 8051 такое возможно?
  25. Добавил аттенюатор приёмнику -30 дБ. Мощность передатчика -10 дБм. Передатчик отдалялся от приёмника в пределах 3 комнат. Зафиксированы отсчёты бит с помехами. На рисунке ниже показан бит, начиная с которого пакет терпит неудачу при проверке (длина пакета 6080 байт): Мгновенная частота и фаза (отсчёты) в момент, когда данные не восстанавливаются: Чистый сигнал (для сравнения): Как я понял, что нельзя считать "плoщадь отсчётов" на 1 бит для получения мягкого решения. Есть ли способ восстановить эти биты?
×
×
  • Создать...