Обратился как то ко мне знакомый с просьбой починить протравитель зерновых культур. В ходе диагностики выяснилось что некорректно работают ёмкостные датчики уровня. Собраны они на PIC12F629 . Я долго не стал мучиться, решил повторить тоже самое на ATiny13A. На моё удивление решение на AVR заработало гораздо лучше (скорее это связано с алгоритмом реализации и быстродействием МК).
В моем решении выполняется усреднение результатов измерения, перед включением управляющего выхода плюс ко всему реализован гистерезис порога срабатывания, то есть введен диапазон при котором состояние не определено. Усредняется 20 измерений скорость реакции сенсора порядка 200-500мс. Для моего случая — как раз.
Код реализации такой :
PORTB.0=1;
DDRB.0=1;// Set out port
delay_ms(2);
DDRB.0=0;// hi-z level set port
PORTB.0=0;
while(PINB.0==1)
{
if(timer>1000)timer=1000;
timer++;
}
timer+=timer;
if(++cnt>19) // усреднение измерений
{
timer/=20;
if(timer>10) {OUT=1; delay_ms(2000); }
else if(timer<6) { OUT=0; delay_ms(1000); }
timer=0;
cnt=0;
}
Как видно из кода все сделано программно и работает как молоток.
Схема на удивление тоже очень проста.
Выкладываю также тестовую прошивку. Работает 3 включения, потом блокируется. Чтобы разблокировать нужно замкнуть отверткой контакты 3 и 4 микросхемы.
Также , выкладываю исходный код, который можно отредактировать, откомпилировать и получить нормальную прошивку.
По вопросам допиливания прошивки или получения полной прошивки под конкретно Ваши нужды, можно написать мне в ЛС.
Прикрепленные файлы: