Also erste Überlegungen:
Timer 0 kann mit einem Prescale von 1028 eine maximal Zeit von 13,15 mS erreichen bis zum Überllaufen
Timer 1 schafft eine Zeit von 3,36s
Meine Idee ist also, den Timer 0 auf einen Prescale von 8 einzustellen, dann ist die Laufzeit zum Overflow 102us. Das Vergleichs Register OCRA0 , stelle ich dann auf 0x64(100);
In der Routine des Vergleichs Vergleichs Interrupts, muss ich dann prüfen ob der Pegel High oder Low war und wie häufig es Überlaufe gab.
Code:
ISR_Compare:
inc r16 ; Zähle Überläufe
sbic PORTB, 0 ; Prüfe ob Ausgang LOW
jmp Pegel_Low
sbis PORTB, 1 ; Überprüfe ob Ausgang High
jmp Pegel_High ; Wenn nicht setze Ihn High
reti
Pegel_Low:
cpi r16, 0x05 ; Überprüfe ob Wert 5;
brne reti
ldi r16,0x00
cbi PORTB,0
reti
Pegel_High:
cpi r16, 0x01 ; Überprüfe ob Wert 1;
brne reti
ldi r16,0x00
sbi PORTB,0
reti
Nur mal als Idee.
Timer 1 würde ich als ICP fahren und damit die Messwert Laufzeit erfassen.
Lesezeichen