-
Постов
2 650 -
Зарегистрирован
-
Победитель дней
2
Сообщения, опубликованные repstosw
-
-
Опубликовано · Изменено пользователем repstosw · Пожаловаться
Вопрос к гуру олвиннеро-строительства.
Внешнее прерывание через GPIO. Нужно отлавливать прерывания по фронту и спаду (rising & falling edges). Сам обработчик прерывания работает исправно.
Вопрос вот в чём: можно ли понять какое именно прерывание произошло: по фронту или спаду? Не нашёл такого регистра в GPIO. Может регистр GIC поможет?
P.S. Вариант опроса по ножке GPIO_DAT не предлагать - он не работает, когда функция порта выбрана EINT.
-
Скорее всего, некорректно оценивать освещённость, используя показание камеры. Потому что обнаружил две вещи:
1. Всплеск и нормализация показаний во время включения и выключения света: работает АРУ камеры
2. Показания зависят от площади белого и чёрного в кадре. К освещенности это не имеет никакого отношения. Например: чёрный материал потолка и стен, при этом в помещении светло и кадр виден полностью. Дополнительного освещения не требуется, а показания с камеры малы.
-
Опубликовано · Изменено пользователем repstosw · Пожаловаться
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 остаётся открытым
-
8 hours ago, alexvu said:
А если Вы собрались человека так снимать, то точечная подсветка (если это видимый свет) ему будет вообще не в кайф.
Этот вопрос решён применением специальной рассеивающей линзы.
1 hour ago, Джеймс said:А что под этим понимается?
Target image luminance average value (AVG).
6 hours ago, jcxz said:PS: Вообще - зря не последовали моему первому совету и сразу решили идти к ПИД.
Попробую вашу формулу. Есть какие-либо рекомендации по подбору или расчёту коэффициентов K1,K2 ? Если известен диапазон ШИМ и диапазон показаний камеры.
1 hour ago, Джеймс said:Так а в самой камере есть автоматическая экспозиция? /это комбинация "'электронного затвора" (shutter) и усиления/
Или камера всегда работает с фиксированными, задаваемыми вручную, параметрами shutter-а и усиления?Точно не знаю, но скорее всего есть.
Но в темноте я получаю чёрный квадрат с камеры.
-
Опубликовано · Изменено пользователем repstosw · Пожаловаться
Для речевого сигнала частота семплирования 24 кГц - это шикардос. Полосы 0..12 кГц хватает, чтобы слышать не "бу-бу-бу...", а вполне идентифицированный голос.
Кодек CELT, мода 24 кбит/c, 50 байтов на сжатый семпл. Даже музыка удовлетворительно прослушиватся.
P.S. В MELP2400 вообще Fs=8 кГц, и ничего, живут с этим. Зато сжатие колоссальное выходит.
P.P.S. А вот всякие потрескивания и попискивания в аудиотракте из-за мгновенных просадок питающего напряжения и паразитного детектирования ВЧ-полей - я НЕ прощаю.
-
Опубликовано · Изменено пользователем repstosw · Пожаловаться
Всем спасибо за PID-регулятор! Не знал, что есть такой. До создания этой темы гуглил "динамическая/адаптивная подсветка/освещение" - всё не то: там всё касается дискотечного оформления залов, но никак не то, что я искал.
Нашёл статью про PID-регулятор:
https://alexgyver.ru/lessons/pid/
Как я понял, фильтровать показания средней освещённости с камеры мне не нужно - относительно медленно-меняющееся значение: камера даёт 15 FPS (больше мне не требуется) - это dt=0.0667 с
Пока смотрю на P- коэффициент. Остальные I,D пока задал нулевыми.
Целевое значение с камеры: 0x2C - это освещенность при нормальном дневном свете. Пределы для ШИМ выставил 10 и 90%. avg - текущее показание камеры.
Функция с аргументами:
QuotePWM_Camera(computePID((float)avg,(float)0x2С,1.0,0.0,0.0,0.0667,10,90));
Собственно вопрос - как подобрать коэффициенты?
И ещё, если P-коэффициент делать большим, то выходит осцилляция - лицо человека отражает яркий свет на камеру и получается вспышки интервалом 0,3 с. Как избежать этого ?
26 minutes ago, mitya1698 said:Мне думается лучше будет задрать частоту ШИМ,
Использую мегагерцовый ШИМ
-
Есть модуль камеры OV5640, подключенный к плате. И есть яркий светодиод с DC/DC-конвертером в режиме источника тока. Конвертер может диммироваться через PWM от платы.
Камера может возвращать среднюю освещённость кадра.
Вопрос собственно: возможно ли сделать динамическое освещение: когда окружающего света много - подсветка выключается: PWM=0%, когда совсем темно - подсветка включается на полную PWM=100%. Когда внешнее освещение слабое - PWM варьируется динамически от 10 до 90%.
Пробовал это сделать - часто возникает осцилляция: светодиод загорается, камера фиксирует прирост яркости, светодиод отключается, снова темно, и так по кругу.
Есть ли способ это обойти?
-
-
Опубликовано · Изменено пользователем repstosw · Пожаловаться
29 minutes ago, GenaSPB said:А где это в даташите?
Стр. 16
Но у меня работает.
Возможно, свежая ревизия чипов, уже исправили эту несправедливость. Потому что частота семплирования 24 кГц более логична, чем 44.1 кГц, и тем более 88.2.
И вообще всё кратное 8 - это хорошо!
-
18 hours ago, repstosw said:
Осталось проверить, как микросхема поведёт себя рядом с антенной передатчика 1 Вт. И если всё хорошо, то вопрос с "аналогом" можно закрыть
Проверил. Аудиотракт чистый, несмотря на наличие ВЧ излучения 1 Вт рядом с микросхемой. Аналог гениально запрятан в чип и защищён фильтрами, экранами...
Штатный PAM8301 летит в помойку: не выдерживает никакой конкуренции с MAX98357
-
Опубликовано · Изменено пользователем repstosw · Пожаловаться
2 hours ago, GenaSPB said:Вообще-то такое решение про тайминг i2s мне показалочь очень логичным, когда я реализовывал поддержку в fpga. Это сильно упрощает логику.
Варианты с выравниванием дадут более уродливый дизайн или потребуют больше вентилей?
17 hours ago, repstosw said:MAX98357A
Даташит на микросхему говорит, что на частоте семплирования 24 кГц работать не будет. Проверил: работает. В обоих случаях: с одинаковым содержимым левого и правого канала, и с разным содержимым. Подвоха не заметил.
Мне 24 кГц было нужно. Хотя I2S T113-s3 позволяет аппаратно сресемплировать с коэффициентом 1/8 до 7.5x. Интересно, в бОльшую сторону есть интерполяция или нет? Или тупо дублирование семплов в соседние места?
-
Опубликовано · Изменено пользователем repstosw · Пожаловаться
3 hours ago, GenaSPB said:Это не особенность кодека, это прсто для формата I2S
Да.
Особенность кодека в том, что этот оффсет надо выставлять отдельно в нужном регистре, а не только в регистре выбора режима.
Сам I2S мне кажется несколько
дебильнымне логичным: зачем этот бит впереди, из-за которого сдвигаются остальные биты в каналах, при этом, младший бит левого канала уходит в строб LRCLK правого канала:На этом фоне, Left- и Right- Justified форматы кажутся более логичными.
-
Опубликовано · Изменено пользователем repstosw · Пожаловаться
On 2/17/2024 at 11:49 PM, repstosw said:Поднял I2S на T113-s3.
В релиз хочу поставить MAX98357. Это и ЦАП и усилок и регулятор усиления.
Пришли платы с MAX98357A (заказывал в "АмперКот").
Настроил I2S в режиме настоящего I2S (до этого был режим Right Justified для ЦАП UDA1334BTS).
Из особенностей: нужно было добавить +1 offset (в битах 20..21 регистр I2S_PCM_TX0CHSEL), иначе на максимальных амплитудах звук хрипел. С оффсетом всё гладко.
Плата по умолчанию с усилением +9 дБ (максимум до 15) и микширует оба канала в один (что мне и нужно!).
Отличное подавление пульсаций питающего напряжения - ничего не слышу в наушниках кроме полезного звука.
Quote25µVRMS Output Noise (AV = 15dB)
77dB PSRR at 1kHzLow RF Susceptibility Rejects TDMA Noise from GSM Radios
Extensive Click-and-Pop Reduction Circuitry
Так что на пульсации питающего напряжение можно забить
Осталось проверить, как микросхема поведёт себя рядом с антенной передатчика 1 Вт. И если всё хорошо, то вопрос с "аналогом" можно закрыть.
-
Предложения актуальны. По всем вопросам пишите на repstosw2018 @ gmail.com
-
Предложения актуальны. По всем вопросам пишите на repstosw2018 @ gmail.com
-
11 minutes ago, petrov said:
В выше приведённой схеме частотного детектора никаких комплексных чисел уже нет. Произвольный фазовый сдвиг между каналами устранён частотным детектором, почёму и можно просто всё сложить до операции деления.
Приведённая схема частотного детектора с DSPlib и выход фазы демодулятора - это разные вещи. Я ничего не делю. По отсчётам фазы нахожу мгновенную частоту.
Можно ли по отсчётам фазы просуммировать сигналы?
-
Опубликовано · Изменено пользователем repstosw · Пожаловаться
31 minutes ago, petrov said:atan2 и есть жёсткое ограничение. Нужно суммировать после частотного детектора до жёсткого ограничения. Вы выше постили схему частотного детектора с DSPlib, деление на мгновенную мощность и есть жёсткое ограничение.
Просто просуммировать два сигнала как комплексные числа? То, что в числителе на схеме.
-
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?
-
Итак... Настало время вернуться к вопросу о манипуляции с данными с двух приёмников, чтобы спастись от плоских замираний.
Есть 2 приёмника с антеннами, которые разнесены на лямбда пополам или с взаимно-ортогональной ориентацией. Есть доступ к мгновенным фазам с фазового детектора: atan2 и знак +/-.
Вопрос, как правильно "складывать" мощность сигналов чтобы убрать вредительство от замирания? Допустим, с одной антенны сигнал хороший, с другой плохой. Нужно постоянно с каждым отсчётом манипулировать данными отсчётов фазы.
petrov что-то говорил пр EGC. Но точно не уверен. Интересует - какие операции нужно проделать над сигналами?
-
Опубликовано · Изменено пользователем repstosw · Пожаловаться
3 hours ago, komah said:Так-то не должны быть больше. Главное, чтобы динамического диапазона хватало.
Проверил: выставлял разный Gain для PGA, DAC - результат одинаковый. Ибо AРУ ещё есть потому что.
4 hours ago, komah said:Мягкие решения для (G)FSK2 - это амплитуда на выходе синхронизатора. Если нужны целочисленные - умножьте на максимальное значение и округлите.
Ну если так, тогда вот мягкие отсчёты - на выходе синхронизатора (умноженные на 0.5, для приведения к [-1..+1] ) - слева преамбула, потом синхрослово 0x5A0FBE66 и потом данные: байты от 0 до 255 :
Это 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 мс.
По-хорошему надо интерполировать, так как некоторые смежные отсчёты фазы одинаковые.
-
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
- 1
-
22 minutes ago, тау said:
когда то было возможно, давно, но не на С
Здесь пишу на ассемблере sdas8051. Си не использую.
-
Опубликовано · Изменено пользователем repstosw · Пожаловаться
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 такое возможно?
-
Опубликовано · Изменено пользователем repstosw · Пожаловаться
Добавил аттенюатор приёмнику -30 дБ. Мощность передатчика -10 дБм. Передатчик отдалялся от приёмника в пределах 3 комнат.
Зафиксированы отсчёты бит с помехами. На рисунке ниже показан бит, начиная с которого пакет терпит неудачу при проверке (длина пакета 6080 байт):
Мгновенная частота и фаза (отсчёты) в момент, когда данные не восстанавливаются:
Чистый сигнал (для сравнения):
Как я понял, что нельзя считать "плoщадь отсчётов" на 1 бит для получения мягкого решения.
Есть ли способ восстановить эти биты?
Allwinner T113-s3 уделал HiFi4 DSP. Смеяться или плакать?
в TI, Allwinner, GigaDevice, Nordic, Espressif и другие
Опубликовано · Изменено пользователем repstosw · Пожаловаться
Попробую. Результат напишу.
Подключил микрофон ICS‐43434 к I2S от T113-s3. В итоге сделал Full-Duplex I2S: одновременно работает микрофон ICS‐43434 и усилитель MAX98357A. Несмотря на то, что устройства разные, работает идеально. Используются 2 DMA канала и 4 источника прерывания - Half/Full buffer для микрофона и усилителя.
Порт I2S использую один - I2S1. Второй свободен (I2S0).
У микрофона высокий динамический диапазон:
Полностью избавился от аналога. Теперь не нужно никаких LDO ставить вообще!