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.