Witam,
Chce zmierzyć czas pomiędzy dwoma zdarzeniami mianowicie pomiędzy wystawieniem stanu niskiego na wyjściu PD7 a pojawieniem się stanu niskiego na wejściu PB0 (programowo podciągnięte do Vcc). Czas ten jest wynosi ok 70ms dlatego używam licznika 16 bitowego z prescalerem =64. Jeśli chodzi o dokładność tego pomiaru to zależy mi na 0,5ms, przy tak skonfigurowanym liczniku mierze z dokładnością co do 8us. Oto mój fragment kodu, który się kompiluje ale nie wiem czy jest to poprawne rozwiązanie.
Wiem że da się to zrobić na przerwaniach zewnętrznych, ale w tej chwili mam zajęte INT0 i INT1 a nie zależy mi żeby procek wykonywał inne operacje podczas pomiaru czasu. Proszę o pomoc:)
Chce zmierzyć czas pomiędzy dwoma zdarzeniami mianowicie pomiędzy wystawieniem stanu niskiego na wyjściu PD7 a pojawieniem się stanu niskiego na wejściu PB0 (programowo podciągnięte do Vcc). Czas ten jest wynosi ok 70ms dlatego używam licznika 16 bitowego z prescalerem =64. Jeśli chodzi o dokładność tego pomiaru to zależy mi na 0,5ms, przy tak skonfigurowanym liczniku mierze z dokładnością co do 8us. Oto mój fragment kodu, który się kompiluje ale nie wiem czy jest to poprawne rozwiązanie.
Wiem że da się to zrobić na przerwaniach zewnętrznych, ale w tej chwili mam zajęte INT0 i INT1 a nie zależy mi żeby procek wykonywał inne operacje podczas pomiaru czasu. Proszę o pomoc:)
TCCR1A = 0x00; // T/C1 w trybie czasomierza
TCNT1 = 0; //poczatkawa watrosc licznika
TCCR1B |= (1<<CS10) | (1<<CS11); //właczenie zegara - preskaler = 64
PORTD &= ~(1<<PORTD7); //niski stan na PD7 zalaczenie urzadzenia
while (czekaj==0) { //czeka do momentu pojawienia sie stanu niskiego na PB0
if (!(PINB & (1<<PINB0))) { //na PB0 pojawia sie stan niski
tau=TCNT1; //zliczony czas w us
TCCR1B &= ~(1<<CS10) & ~(1<<CS11); //wylaczenie zegara
PORTD |= (1<<PORTD7); //wylaczenie wylaczenie urzadzenia
czekaj=1;
}
}