Ausschaltverzöergung mit INT0 und TIMER0

Gast #1399219
Hi
versuche eben eine einfache Ausschaltverzögerung hinzubekommen, die 
jedoch komplett interruptgesteuert funktioniert. Der Timer einzeln 
getestet funktioniert. Ebenso die Triggerung bei steigender Flanke auf 
INT0. Aber beides zusammen will nicht so ganz.
1
ISR(INT0_vect)
2
{
3
   TCNT0 = 0;            //Zähler zurücksetzen
4
   TIMSK |= (1<<TOIE0);  //Timer aktivieren
5
   PORTC=0xff;           //Mal zum testen gesammten Port auf 1
6
}
7

8
ISR(TIMER0_OVF_vect)
9
{
10
   PORTC=0;              //zum test wieder alles aus
11
   TIMSK &= ~(1<<TOIE0); //Timer deaktivieren
12
}
13
int main()
14
{
15
   ...
16
   MCUCR |= 0x0f; //INT0 und INT sollen bei steigender Flanke triggern
17
   GIMSK |= 0x40; //INT0 aktivieren
18
  
19
   TCCR0 = 0x03;  //Vorteiler 64 Systemtakt 4Mhz
20
   ...
21
}
Int0 kriegt alle 20ms nen Impuls mit ein paar µs-Breite. Der Timer 
müsste nach meiner Berechnung eine Verzögerung von ca 4ms auslösen. Was 
nun passiert ist, dass er immer wieder mal alle 20ms auslöst (nicht 
immer) und wenn, dann fällt das Signal nach 5µs wieder ab. Jemand eine 
Idee, warum dieses interrupt gesteuerte starten eines Timers nicht auf 
diese Weise funktioniert?
Gast
Aber klar doch :D

Da der Timer nicht angehalten wird, läuft er auch ohne enabelte ISR über 
und setzt dabei das OVF Flag. Sobald in der Int0 ISR der Timer0 
Interrupt erlaubt wird, wird dieser sofort ausgeführt.

Also: Timer erst starten in Int0 ISR (Prescaler vorher auf 0), oder TOV0 
Flag dort auf 1 schreiben und damit löschen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.