mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ausschaltverzöergung mit INT0 und TIMER0


Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
ISR(INT0_vect)
{
   TCNT0 = 0;            //Zähler zurücksetzen
   TIMSK |= (1<<TOIE0);  //Timer aktivieren
   PORTC=0xff;           //Mal zum testen gesammten Port auf 1
}

ISR(TIMER0_OVF_vect)
{
   PORTC=0;              //zum test wieder alles aus
   TIMSK &= ~(1<<TOIE0); //Timer deaktivieren
}
int main()
{
   ...
   MCUCR |= 0x0f; //INT0 und INT sollen bei steigender Flanke triggern
   GIMSK |= 0x40; //INT0 aktivieren
  
   TCCR0 = 0x03;  //Vorteiler 64 Systemtakt 4Mhz
   ...
}
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?

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
funktioniert :D
Danke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.