Hallöchen,
hier nen kleines Problem, das schonmal richtig lief.
Timer/Counter1 hat folgende Einstellung:
TCCR1B |= (1<<ICES1)|(1<<CS10);
TIMSK |= (1<<TICIE1)|(1<<TOIE1);
meine Variablen sehen wie folgt aus:
volatile unsigned long int timer1=0, timer2=0, Dtimer=0, zeit=0;
meine WHILE(1) Schleife sieht wie so aus:
while(1){
if (timer2 != 0) {
cli(); //Interrupt-Routinen sperren
Dtimer = timer2-timer1; //Pulsbreite berechnen
zeit=Dtimer; //Pulsbreite umspeichern
}
if (zeit != 0) {
load_lcd(zeit);
load1_lcd(timer1);
load2_lcd(timer2); Werte_nullen();
}
sei(); TCCR1B = 0b01000001;// TIMER/COUNTER Start
mit 16MHz
}
Meine Interruptroutine:
ISR (TIMER1_CAPT_vect) {
TIFR |= (1<<ICF1);
if (timer1 == 0){
timer1 = ICR1;
TCCR1B &= ~(1<<ICES1);
TIFR |= (1<<ICF1);
} else
if ((timer2 == 0) && (timer1 != 0)) {
timer2 = ICR1;
TCCR1B |= (1<<ICES1);
TIFR |= (1<<ICF1);
}
ich gebe auf den Controller Pulsbreiten von 20us, auf dem Display
erscheint aber der Wert für die Periodenbreite ~640, kann mir jemand
helfen??
Grüße
Frank
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.