Комментарии 23
Если внедрять этот алгоритм в ваш готовый код, то проще всего это сделать с окном в 16 элементов на вход которого подаются ваши усреднённые значения. делал такое для измерения тока зарядки, шевеление на единицу было в 4-м знаке для 10 бит, а без него прыгали два последних знака.
Подавление дребезга сделано не очень… безусловные задержки в основном потоке — великое зло, ибо контроллер останавливается на это время и не реагирует ни на что(кроме прерываний). Гораздо надёжнее и проще — фиксировать реальное состояние кнопок в таймере с периодом опроса 50мс это гарантирует отсутствие влияния дребезга пока он меньше 50мс(у нормальных кнопок он меньше 10мс, у герконовых — порядка 1мс). Главное делать это ОДИН раз за цикл опроса. Там же можно считать количество циклов и определять «короткое нажатие», «длинное нажатие» реализовать автоповтор и т.д. устанавливать признак соответствующего нажатия в глобальной переменной а сбрасывать его только в программе в основном цикле.
Если мы имеем постоянную измеряемую величину на которую накладывается случайный шум, то ошибка измерения при обычном усреднении обратно пропорциональна корню от числа измерений. Таким образом чем больше число измерений, тем меньше «будет прыгать».
В случае если кол-во измерений больше нескольких десятков, то точность можно повысить путем отбрасывания измерений которые отличаются от среднего больше чем на 3 «сигмы», где «сигма» — среднеквадратическое отклонение.
Все вышеописанное относится и к квазипостоянному сигналу, когда частота измерений на несколько порядков выше частоты измеряемого сигнала.
Вобщем-то, даже для скользящего и окна бывают разные, и фильтрация отклонений тоже актуальна.
А в чем заключается настройка антенны? Вы же вроде только герконом переключаете две антенны.
Подключение линии вход для цифрового сигнала от трансивера и тюнера
Не нашёл в тексте этого момента более подробно. Вы все четыре ноги через ADC мониторите?
От трансивера идут сигналы по линиям BAND DATA, они постоянно мониторятся в МК. Они логические 0\5В, считываются напрямую, а не через ADC.
Да, именно это не ясно, уже написал комментарий, хорошо, что не отправил.
А что с родным пультом случилось, почему вы его решили заменить?
что герконовое реле не ВЧ сигнал коммутирует
Ок, с этим понятно. Недочитал…
Но это не тема данной статьи
Код кодом, а описываете наверно устройство, его и обсуждаем. Хорошо бы экранировать все это дело в обязательном порядке. Сколько было случаев, когда сгорали электронные CW ключи, секвенсоры на МК и т.д. И тут вариантов всего два: либо не использовать МК в полях антенн, либо тщательно бороться с различными наводками не только ферритами.
«Чуваки, я знаю AVR» и куски кода. Ни схемы, ни кода ни прошивки. Где польза?
Забирать показания ALC с входа «ALC IN», это что то новое. Всегда думал что «ALC IN» (исходя из названия) это вход для указания трансиверу от усилителя, что нагрузка не оптимальна и стоит снизить мощность.
При всем уважении, для переключения антен обычно используют переключатель. Да, вот так тупо и просто — обычный едри его в корень механический переключатель. А AVR вообще читерский микроконтроллер. Он как плевок в душу всем кодерам на z80,i51,x86,pic. 32 регистра. Команда за такт. Да нихрена себе, если б мне такое в школе показали, я бы щаз тоже double'ми в прошивках сыпал.
Чего люди только не делают, лишь бы не использовать битовые поля и нормальные называния.
Можете привести пример реализации этого с помощью битового поля?
typedef struct {
uint8_t registerSelect : 1;
uint8_t modeSelect : 1;
uint8_t parityMode : 2;
uint8_t stopBitSelect : 1;
uint8_t characterSize : 3;
uint8_t clockPolarity : 1;
} UCSRC_t;
#define USART_CHAR_SIZE_8BIT 3;
#define USART (*(volatile UCSRC_t*)_SFR_MEM_ADDR(UCSRC))
# сам код
USART.registerSelect = 1;
USART.characterSize = USART_CHAR_SIZE_8BIT;
С другой стороны это код изначальной инициализации — он выполняется один раз, кол-во инструкций не так и важно. Плюс если действительно нужна оптимизация по тактам — это тоже несложно организовать.
Но почему-то в большинстве кода который я встречал под микроконтроллеры — люди совсем не задумываются о качестве кода, при этом оправдывают это якобы большим кол-вом инструкций/тактов не смотря на то что это лимитирующим фактором не является — преждевременная оптимизация как она есть.
Автоматический переключатель антенн с управлением на МК