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

repstosw

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

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

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

    2

Сообщения, опубликованные repstosw


  1. 6 hours ago, GenaSPB said:

    Гляньте у меня. В проекте обслуживается оптический валкодер, прерывания по двум фронтам и получение состояния для грей декодера через чтение DAT работает. Без перепрограсмирований на лету и прочего кошмара.

    Попробую. Результат напишу.

     

    Подключил микрофон ICS‐43434 к I2S от T113-s3.  В итоге сделал Full-Duplex I2S: одновременно работает микрофон  ICS‐43434 и усилитель MAX98357A. Несмотря на то, что устройства разные, работает идеально.  Используются 2 DMA канала и 4 источника прерывания - Half/Full buffer для микрофона и усилителя. 

    Порт I2S  использую один - I2S1. Второй свободен (I2S0).

    image.png.06bb2435d09cd8301b00af351c65c0dc.png  image.png.3e83d86efa7c1934c980e4b67b9b1b95.png

    У микрофона высокий динамический диапазон:

    image.png.51715e7c10a3ca315b505e7a55e68366.png

     

    Полностью избавился от аналога.  Теперь не нужно никаких LDO ставить вообще! :sun_bespectacled:

  2. Вопрос к гуру олвиннеро-строительства. 

    Внешнее прерывание через GPIO. Нужно отлавливать прерывания по фронту и спаду (rising & falling edges).  Сам обработчик прерывания работает исправно.

    Вопрос вот в чём: можно ли понять какое именно прерывание произошло:  по фронту или спаду? Не нашёл такого регистра в GPIO.  Может регистр GIC поможет?

     

    P.S. Вариант опроса по ножке GPIO_DAT не предлагать - он не работает, когда функция порта выбрана EINT.

     

  3. Скорее всего, некорректно оценивать освещённость, используя показание камеры.   Потому что обнаружил две вещи:

    1. Всплеск и нормализация показаний во время включения и выключения света:  работает АРУ камеры

    2. Показания зависят от площади белого и чёрного в кадре.  К освещенности это не имеет никакого отношения.  Например:  чёрный материал потолка и стен, при этом в помещении светло и кадр виден полностью. Дополнительного освещения не требуется, а показания с камеры малы.

     

     

  4. 14 hours ago, jcxz said:

    PWM_new = (CAM_out - PWM_old * K1) * K2

    Работает с точностью наоборот: когда темно - гаснет, когда светло - горит на максимуме.

    Исправил так:

    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. 8 hours ago, alexvu said:

    А если Вы собрались человека так снимать, то точечная подсветка (если это видимый свет) ему будет вообще не в кайф.

    Этот вопрос решён применением специальной рассеивающей линзы.

    image.png.8e74d20c683239fb2048932b8be38b72.png

     

    1 hour ago, Джеймс said:

    А что под этим понимается?

    Target image luminance average value (AVG).

     

    6 hours ago, jcxz said:

    PS: Вообще - зря не последовали моему первому совету и сразу решили идти к ПИД.

    Попробую вашу формулу.  Есть какие-либо рекомендации по подбору или расчёту коэффициентов K1,K2 ?   Если известен диапазон ШИМ и диапазон показаний камеры.

     

    1 hour ago, Джеймс said:

    Так а в самой камере есть автоматическая экспозиция? /это комбинация "'электронного затвора" (shutter)  и усиления/ 
    Или камера всегда работает с фиксированными, задаваемыми вручную, параметрами shutter-а и усиления?

    Точно не знаю, но скорее всего есть.

    Но в темноте я получаю чёрный квадрат с камеры.

  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 - текущее показание камеры.

    Функция с аргументами:

    Quote

     PWM_Camera(computePID((float)avg,(float)0x2С,1.0,0.0,0.0,0.0667,10,90));

     

    Собственно вопрос - как подобрать коэффициенты?

     

    И ещё, если P-коэффициент делать большим, то выходит осцилляция - лицо человека отражает яркий свет на камеру и получается вспышки интервалом 0,3 с.  Как избежать этого ?

    26 minutes ago, mitya1698 said:

    Мне думается лучше будет задрать частоту ШИМ,

    Использую мегагерцовый ШИМ

  8. Есть модуль камеры OV5640, подключенный к плате. И есть яркий светодиод с DC/DC-конвертером в режиме источника тока.  Конвертер может диммироваться через PWM от платы.

    Камера может возвращать среднюю освещённость кадра.

    Вопрос собственно:  возможно ли сделать динамическое освещение:  когда окружающего света  много - подсветка выключается: PWM=0%, когда совсем темно - подсветка включается на полную PWM=100%. Когда внешнее освещение  слабое - PWM варьируется динамически от 10 до 90%.

    Пробовал это сделать - часто возникает осцилляция:  светодиод загорается, камера фиксирует прирост яркости, светодиод отключается, снова темно, и так по кругу.

    Есть ли способ это обойти?

  9. 8 minutes ago, GenaSPB said:

    Ни в user manual ни в datasheet не видать... В регистрах I2S/PCM тоже.

    Эти ограничения у MAX98357.

     

    Про ресемплирование у T113-s3 здесь:

    image.thumb.png.01d780492681b6a31d2d870b1c0940e6.png

    И на структурной схеме показано только одно направление :  из внешнего мира в T113:

    image.thumb.png.cfe4b27911efad121cb579a0ffa85ebf.png

    • Like 1
  10. 29 minutes ago, GenaSPB said:

    А где это в даташите?

    Стр. 16

    image.png.a7c6c2dce84b1bff9cd9d651c8db9a24.png

    Но у меня работает.

    Возможно, свежая ревизия чипов, уже исправили эту несправедливость.  Потому что частота семплирования 24 кГц более логична, чем 44.1 кГц, и тем более 88.2.

    И вообще всё кратное 8 - это хорошо!

  11. 18 hours ago, repstosw said:

    Осталось проверить, как микросхема поведёт себя рядом с антенной передатчика 1 Вт. И если всё хорошо, то вопрос с "аналогом" можно закрыть

    Проверил.  Аудиотракт чистый, несмотря на наличие ВЧ излучения 1 Вт рядом с микросхемой. Аналог гениально запрятан в чип и защищён фильтрами, экранами...

    Штатный PAM8301 летит в помойку: не выдерживает никакой конкуренции с MAX98357:biggrin:

  12. 2 hours ago, GenaSPB said:

    Вообще-то такое решение про тайминг i2s мне показалочь очень логичным, когда я реализовывал поддержку в fpga. Это сильно упрощает логику.

    Варианты с выравниванием дадут более уродливый дизайн или потребуют больше вентилей?

     

    17 hours ago, repstosw said:

    MAX98357A

    Даташит на микросхему говорит, что на частоте семплирования 24 кГц работать не будет.  Проверил: работает.  В обоих случаях: с одинаковым содержимым левого и правого канала, и с разным содержимым.  Подвоха не заметил.

    Мне 24 кГц было нужно.   Хотя I2S T113-s3 позволяет аппаратно сресемплировать с коэффициентом 1/8 до 7.5x.  Интересно, в бОльшую сторону есть интерполяция или нет? Или тупо дублирование семплов в соседние места?

  13. 3 hours ago, GenaSPB said:

    Это не особенность кодека, это прсто для формата I2S

    Да.

    Особенность кодека в том, что этот оффсет надо выставлять отдельно в нужном регистре, а не только в регистре выбора режима.

     

    Сам I2S мне кажется несколько дебильным не логичным: зачем этот бит впереди, из-за которого сдвигаются остальные биты в каналах, при этом, младший бит левого канала уходит в строб LRCLK правого канала:

    image.thumb.png.a78fd8b5c853938579f5192133975126.png

     

    На этом фоне, Left- и Right- Justified форматы кажутся  более логичными.

    image.thumb.png.4217d022a707717e738c8ad95aaf9130.png

     

  14. On 2/17/2024 at 11:49 PM, repstosw said:

    Поднял I2S на T113-s3.  :sun_bespectacled:

    В релиз хочу поставить MAX98357.   Это и ЦАП и усилок и регулятор усиления.

    Пришли платы с MAX98357A (заказывал в "АмперКот").

    Настроил  I2S в режиме настоящего I2S (до этого был режим Right Justified для ЦАП UDA1334BTS).

    Из особенностей: нужно было добавить +1 offset (в битах 20..21 регистр I2S_PCM_TX0CHSEL), иначе на максимальных амплитудах звук хрипел. С оффсетом всё гладко.

    Плата по умолчанию с усилением +9 дБ (максимум до 15) и  микширует оба канала в один (что мне и нужно!).

    Отличное подавление пульсаций питающего напряжения  - ничего не слышу в наушниках кроме полезного звука.

    Quote

    25µVRMS Output Noise (AV = 15dB)
    77dB PSRR at 1kHz

    Low RF Susceptibility Rejects TDMA Noise from GSM Radios

    Extensive Click-and-Pop Reduction Circuitry

    image.thumb.png.e6163bcd1fd718a6de2f8a1ff8857708.png

    Так что на пульсации питающего напряжение можно забить :biggrin:

    Осталось проверить, как микросхема поведёт себя рядом с антенной передатчика 1 Вт. И если всё хорошо, то вопрос с "аналогом" можно закрыть.

    image.png.7388c26bd73f40e223c8844a211f4561.png

  15. 11 minutes ago, petrov said:

    В выше приведённой схеме частотного детектора никаких комплексных чисел уже нет. Произвольный фазовый сдвиг между каналами устранён частотным детектором, почёму и можно просто всё сложить до операции деления.

    Приведённая схема частотного детектора с DSPlib и выход фазы демодулятора - это разные вещи.   Я ничего не делю.   По отсчётам фазы нахожу мгновенную частоту.

    Можно ли по отсчётам фазы  просуммировать сигналы?

  16. 31 minutes ago, petrov said:

    atan2 и есть жёсткое ограничение. Нужно суммировать после частотного детектора до жёсткого ограничения. Вы выше постили схему частотного детектора с DSPlib, деление на мгновенную мощность и есть жёсткое ограничение.

    Просто просуммировать два сигнала как комплексные числа?  То, что в числителе на схеме.

  17. 7 minutes ago, petrov said:

    Для Equal Gain Combining нужен выход с квадратур, после жёсткого ограничения у вас собственно уже нет Equal Gain.

    Есть отсчёты мгновенных фаз: Ф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?

  18. Итак...  Настало время вернуться к вопросу о манипуляции с данными с двух приёмников, чтобы спастись от плоских замираний.

    Есть 2 приёмника с антеннами, которые разнесены на лямбда пополам или с взаимно-ортогональной ориентацией.   Есть доступ к мгновенным фазам с  фазового детектора:  atan2 и знак +/-.

    Вопрос, как правильно "складывать" мощность сигналов  чтобы убрать вредительство от замирания?   Допустим, с одной антенны сигнал хороший, с другой плохой.  Нужно постоянно с каждым отсчётом манипулировать  данными отсчётов фазы.

    petrov  что-то говорил пр EGC.   Но точно не уверен.  Интересует - какие операции нужно проделать над сигналами?

  19. 3 hours ago, komah said:

    Так-то не должны быть больше. Главное, чтобы динамического диапазона хватало.

    Проверил: выставлял разный Gain для PGA, DAC - результат одинаковый. Ибо AРУ ещё есть потому что.

     

    4 hours ago, komah said:

    Мягкие решения для (G)FSK2 - это амплитуда на выходе синхронизатора. Если нужны целочисленные - умножьте на максимальное значение и округлите. 

    Ну если так, тогда вот мягкие отсчёты - на выходе  синхронизатора (умноженные на 0.5,  для приведения к [-1..+1] ) - слева преамбула, потом синхрослово 0x5A0FBE66 и потом данные: байты от 0 до 255 :

    image.thumb.png.3832e80699769ff7e9d3b58fd4a31b66.png

    Это 50 кбит/c, девиация +/- 25 кГц.    12 отсчётов на бит(среднее).

     

    Запустил на несколько минут симуляцию в GNU Radio (циклически одни и те же анные с файла сигнала).  В итоге, протестил все пакеты - все без ошибки.

    И что самое интересное, мой "детский"  алгоритм тоже декодирует пакеты правильно.

    Но там, где начинает падать отношение сигнал-шум, вариант с синхронизатором работает лучше (больше пакетов даёт валидных, чем "детский" способ).

     

    4 hours ago, komah said:

    Это про нормировку:

    On 3/10/2024 at 11:40 PM, komah said:

    Выход частотного детектора нужно поделить на (h * M_PI), где h - индекс модуляции.

    Для 2FSK индекс модуляции понятно как считается.

    А как он считается для 4FSK?  берется inner или outer девиация?

     

    P.S. Усовершенствовал забор данных отсчётов фазы с Si4463: теперь  данные можно забирать со скоростью 1.615 млн. отсчётов в секунду.

    Это соответствует заполнению одной половины кольцевого буфера 128 отсчётов за 0.079 мс.

    image.thumb.png.32234810c39aba25ac1b48fbea3631be.png

     

    По-хорошему надо интерполировать, так как некоторые смежные отсчёты фазы одинаковые.

  20. 30 minutes ago, dimka76 said:

    А таймер для этих целей задействовать не получится ?

    Такая возможность есть. Но частота опроса регистра должна быть высокой, боюсь что вход и выход из обработчика прерывания по таймеру снизят частоту опроса.

     

    31 minutes ago, dimka76 said:

    https://studfile.net/preview/7484242/page:4/

    Вот здесь посмотрите

    Спасибо, помогло.   Всё-же у 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

     

    • Upvote 1
  21. 1 hour ago, tonyk_av said:

    В старину у 8х51 машинный цикл состоял из 12 тактов синхронизации, потом стал 6, сейчас 1.

    Меня это не интересует.

    Меня интересует число машинных циклов для каждой инструкции.  Проще говоря, во сколько раз одна инструкция быстрее-медленее другой.

     

    1 hour ago, tonyk_av said:

    Нужна точность- используйте МК с DMA.

    Нет такой возможности. Точнее - есть, но только в виде "память - SPI".   А DMA типа "SFR - память" - нет.

     

    1 hour ago, Harbinger said:

    SI44xx, надо понимать? Это надо смотреть мануал конкретно на CIP-51 (силабсовская реализация ядра).

    Да, он самый!

    Нужно выставлять ножку в 0 или 1 после заполнения буфера для SPI через DMA.  Половина - буфер 128 байт. В буфер кладутся значения SFR-регистра фазы.

    Требуется очень равными интервалами читать регистр фазы и без джиттера дёргать ножку в 0 и 1 (для IRQ мастер-контроллера).

    То, что я сделал - работает, фаза дампится в кольцевой буфер для мастер-контроллера, но просмотр отсчётов показал, что есть небольшой джиттер в отсчётах фазы 1-2%.

     

    Я помню, умельцы делали на AVR-ках  VGA-контроллеры и всякие ГИТС для ТВ с шахматными клетками и полосками - у них всё было ровно: по тактам расчитано.

    В 8051 такое возможно?

  22. Добавил аттенюатор приёмнику -30 дБ.  Мощность передатчика -10 дБм.  Передатчик отдалялся от приёмника в пределах 3 комнат.

    Зафиксированы отсчёты бит с помехами.  На рисунке ниже показан бит, начиная с которого пакет терпит неудачу при проверке (длина пакета 6080 байт):

    image.thumb.png.d0c62909264d9c1d03fa10264be6f0de.png

     

    Мгновенная частота и фаза (отсчёты) в момент, когда данные не восстанавливаются:

    image.thumb.png.6e6c5ef072df88a60b6d1599dc9e15d1.png

     

    Чистый сигнал (для сравнения):

    image.thumb.png.555efd98516ffa2a10087ea449b511d5.png

     

    Как я понял, что нельзя считать "плoщадь отсчётов" на 1 бит для получения мягкого решения.

     

    Есть ли способ восстановить эти биты?

     

     

×
×
  • Создать...