Там всё делается примитивно.
Берётся байт в который записывается максимум положения градусника сравнивая записанное с текущим. Если показания стали больше то запоминается пиковое значение.. А потом запускается таймер и по его флагам декриминируется позиция зависшего кубика к текущему положению. Сперва пик стирается и выводится левее. Или счётчик в цикле по достижению заданного числа проверяется положение. Первая проверка через секунду, на это время кубик пика светится. А далее 150 мс на кубик для того чтоб он "побежал" влево до текущего положения грудусника. У меня 32 кубика и это время приемлемое. Если меньше кубиков то подобрать время не проблема. На OLED дисплее смотрится отлично.
На анрдуино нано 16 битный таймер1 в режиме счёта с предделителем=256 переполнение будет через 2,16 секунды. Запуская счёт не с ноля а с 32768 переполнение будет через 1,0486 секунды. Далее задавать старт с 60000 прерывание будет через 177мс и по прерыванию сдвигать влево кубик.
Восьмибитные таймеры при делителе 1024 переполнение возникает через 32,768мс. В обработке при переполнении инкреминировать байт до какого то значения и получится время кратное 32,768 сек.
Варианты могут быть разные как сделать. Элементарные проверки согласно задания. На си наверное десяток строк будет. Но я в нём не силён совсем.
упс
Последний раз редактировалось UY3IG; 26.12.2019 в 17:24.
Сделал задержку градусника на пиках сигнала, затем он плавно "отползает". Так же ведет себя и значение мощности прямой волны. Для этого я скрестил часть кода Владислава RK9AMX и свой. Но в результате получил жуткий тормоз всей программы, практически до неработоспособного состояния. Пришлось убирать все усреднения сигналов с аналоговых портов, убрал точки с градусника. Поднял частоту шины I2C до 800кГц. Стало чуть лучше, но все равно не комфортно. Переделал чтение с аналоговых портов на прямой доступ по прерываниям. Делал практически первый раз, вроде получилось. Работать стало уже намного веселее, но нужен запас по быстродействию. Для этого попробовал уменьшить предделитель ADPS до 16 и поднять частоту преобразователя АЦП. Скорость вернулась назад и можно продолжать дальше.
Можно посмотреть здесь
Последний раз редактировалось Integral; 27.12.2019 в 00:23.
Integral, Сергей, спасибо! Интересное видео.
Привезли мне детальки. Заказывал Arduino uno и 2 платки INA219. Привезли только одну. Продавец пропустил. Заказ забирал не я, поэтому получилось как получилось. С двумя микросхемами и разными адресами поиграюсь позже.
По теме измерения тока. Результаты пока обнадёживающие. Очень глубоко не копал, на это нужно время. Загрузил библиотеку от Adafruit. Не очень она оптимальна, по моему мнению.
Собственно, интересовал вопрос измерения отрицательных токов. Это возможно. Шунт должен быть изолирован от общего провода питания микросхемы. Изменяя полярность на шунте на выходе получал положительные и отрицательные (со знаком "минус") результаты измерения тока. Если подключаться "по канонам", то можно измерять и напряжение.
На первом рисунке измеряется падение напряжения на Rш и падение напряжения на Rн. Измеренные значения складываются в регистры. Сумма двух этих напряжений дает напряжение питания.
Микросхема пересчитывает падение напряжения Rш в ток и складывает в регистр, из которого это значение читается контроллером.
На втором и третьем рисунке измеряется падение напряжения только на Rш. Причем падение напряжения на Rш может быть в пределах -320..320mV.
Всё это проверено в железе. Фотосессию, пример и программу позже выложу.
Добавлено через 38 минут(ы):
В затронутую тему "градусников". Есть интересный проект анализатора спектра звукового сигнала на ардуино. Может из него удастся почерпнуть что-то полезное?
Как дойду до этой темы, проанализирую этот проект. Если кто-то раньше не сделает.
https://github.com/AlexGyver/FHTSpectrumAnalyzer
Описание алгоритма работы анализатора:
- Анализ спектра, на выходе имеем массив величин полос спектра (128 полос)
- Фильтрация по нижним значениям для каждой полосы (128 полос)
- Переход от 128 полос к 16 полосам с сохранением межполосных значений по линейной зависимости
- Поиск максимумов для коррекции высоты столбиков на матрице
- Перевод чистого “веса” полосы к высоте матрицы
- Отправка полос на матрицу
- Расчёт позиций точек максимума и отправка их на мтарицу
- Мимоходом фильтрация верхних пиков, коррекция высоты столбиков от громкости и прочее
Последний раз редактировалось RK9AMX; 27.12.2019 в 09:44.
Спасибо от UA7F
В подобных измерителях и датчиках типа ACS7XX используется датчик Холла, которому все равно в каком направлении будет ток, что дает преимущество в измерении не только отрицательных значений, но и переменного тока. Для этого на входе порта делается "середина" питания +2.5В Сдвиг относительно этой точки делает знак (направление) тока, ну и саму величину. Поэтому для них делается калибровка нуля, чтобы отловить это смещение для конкретного экземпляра.
Китайцы ставят резистор/шунт номиналом 0.1Ом, что и дает нам +/- 3.2А. При разрядности АЦП 12бит это 3200/4096=0,78125мА Достаточно не плохой результат, даже менять шунт не надо.
Зачем измерять обратный ток экранной сетки? Это аварийный режим и при его возникновении проще и просто необходимо включить защиту, а не измерять обратный ток. В "правильном" усилителе обратный ток и не возникнет никогда если там всё сделано так, как должно быть. А с пентодами так вообще такого понятия, как динатронный эффект не возникает.
Integral эти датчики очень подвержены всяким наводкам - электромагнитным, магнитным и прочим. И выпускаются они на токи от 5А до 30А. Пригодны для измерения больших токов, а измерять ими токи в десятки, сотни мА - не очень. Погрешности измерений замучают. Будет, как сейчас без пиковых показаний - одни мельтешения.
Последний раз редактировалось UY3IG; 27.12.2019 в 12:58.
Я задавал этот вопрос в самом начале. Сказали: "надо!". Раз надо, то будем искать техническое решение. А если не надо, то ещё проще
Я вам больше скажу, даже микроконтроллеры ведут себя неадекватно рядом с мощными источниками ВЧ-сигналов. Тут будет сложно предсказать работу устройства без испытаний.
Речь шла о INA219. Там токи поскромнее. Сергей для примера привел Allegro'вские датчики.
Производитель INA219 рекомендует для уменьшения помех последовательно входам измерения ставить резисторы 10 Ом и конденсатор 0,1-1 мкФ.
Последний раз редактировалось RK9AMX; 27.12.2019 в 13:51.
RK9AMXя считал что это типа АСS712. Там датчик Холла и его не "спасешь" такой цепочкой.и датчиках типа ACS7XX
В INA219 другой метод измерения. Отличия от картинки ниже - встроенный АЦП и общение с внешним миром через I2C.
Кстати, по такой схеме можно и LM358 подключить, только шуметь она будет сильнее, чем инструментальные операционники от TI. В 80 посте этой темы я приводил схему из моделировщика. Работает как положено в теории.
Последний раз редактировалось RK9AMX; 27.12.2019 в 14:26.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)