Witam.
Tworzę program który ma za zadanie odczytać pozycję serwa i na wyjściu podać wartość od 0 do 255.
Stan wysoki impulsu pojawia się co 20ms i trwa ok 1ms, więc początkowa idea była następująca:
Wejście sygnału podłączone do INT0 wyzwala przerwanie gdzie na zboczu narastającym timer zaczyna liczyć ile razy przerwanie od timer-a zostało wykonane, a na opadającym zapisuje wynik do zmiennej. Timer0, tryb normal bez preskalera, wyzwala przerwanie co 4us. (1000/256)
1) 1s / 8MHz = 0,125us - co 0,125us timer dostaje impuls do rejestru TCNT0.
2) 4us / 0,125 = 32, więc 256 - 32 = 224 czyli timer ma zliczać od TCNT0 = 224.
Kod:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Kod ten działa ale problemem jest wynik który jest taki sam jak przy TCNT0 = 0. Cokolwiek bym do tego rejestru nie wpisał wynik jest taki jak powinien być przy TCNT0 = 0.
Proszę o pomoc, w rozwiązaniu problemu.
Procek to Atmega8 taktowana wewnętrznym oscylatorem 8MHz, dokładności nie ziemskiej się nie spodziewam.
Wybrałem przerwanie INT0 ponieważ to jeden z niewielu wolnych pinów na płytce.

Z góry dziękuje. Pozdrawiam.
