Пока не делал схемку описаную AVR, пока на транзисторе работает. Но всё же не погу понять почему при повышении оборотов чип не выполняет определённую строчку программы. Вот ссысл программы:
заводим переменную tmr, которая накапливает значения по мере работы программы.
заводим переменную polr, которая запоминает значение датчика на колесе (0 или 1).
---начало программы---
переменая polr запоминает значение датчика на колесе PINC.0
вращаем колесо
---старт цикла---
tmr++ счетчик прибавляет единицу с каждым проходом цикла
if(polr!=PINC.0) если значения polr и PINC.0 не равны, то polr запонимает значение в этот момент на PINC.0; сбрасываем таймер
if (tmr>8000) если значение таймера превышает 8000 включаем светодиод иначе выключаем его
переходим к началу цикла
- Код: Выделить всё • Развернуть
tmr=0;
polr=PINC.0;
while(1){
tmr++;
if(polr!=PINC.0){polr=PINC.0; tmr=0;PORTA.5=1;} else{PORTA.5=0;}
if(tmr>8000){PORTA.4=1;} else{PORTA.4=0;}
}
На осцилографе смотрел сигналы приходящие на микроконтороллер. Они отчетливо квадратные (цифровые). Сначала думаю что при повышении оборотов напряжение немного падает и его не хватает чтобу включить "единичку". Но всё оказалось нормально, при логическом 0 - напряжение нуль (или очень близко к нему), при логической 1- напряжение 5вольт (или близко к этому значению).
Почему так происходит не могу понять. Пока ковыряю.
Добавлено спустя 32 минуты 27 секунд:Нашел причину, проблема вранзисторной обвязке. Первые показания осцилографа не внимательно посмотрел, оказалось что при больших оборотах постоянно включена "единичка". ТАм правда тоже квадратные импульсы, но всё же они высоки и дают переключиться на "нуль".