mikrocontroller.net

Forum: Compiler & IDEs Timer1 als Auslöseverzögerung


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich möchte dem Timer1 in einem Atmega8 für eine Triac-Ansteuerung
verwenden. Dazu soll er mit externen Interrupt aktiviert werden und
gleichzeitig das Zählerregister für den Überlauf gesetzt werden, damit
der Timer zeitgerecht ausgelöst wird.

Nur leider löst der Timer-Interrupt direkt beim aktivieren aus.
Momentan verwende ich zum Testen folgenden Code:

SIGNAL (SIG_OVERFLOW1) {
  PORTD ^= 1;
  TIMSK &= ~(1<<TOIE1); //Interrupt wieder abschalten
}

SIGNAL (SIG_INTERRUPT0) {
  TCNT1H = 0xFC;
  TCNT1L =   0x00;
  TIMSK |= (1<<TOIE1); //Interrupt einschalten
}

Der ext. Interrupt und der Timer-Prescaler wird in main() gesetzt, die
einzelnen Interrupts funktionieren.
ich vermute, dass beim aktivieiren des Timers sofort ein Interrupt
ausgelöst wird und er sich somit selbst deaktiviert.

Um das zu umgehen, müsste ich doch eine Variable beim Timer-Interrupt
hochzählen lassen und erst bei jedem zweiten Interrupt den Triac
zünden?!

Grüße

Chris

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest vor dem Aktivieren des Interrupts erstmal
dessen Interrupt-Flag löschen:

TIMSK = (1 << TOIE1);
TIMSK |= (1 << TOIE1);

Allerdings würde ich an deiner Stelle eher den compare match
als den Overflow-Interrupt nehmen, da muss man nicht erst
die Zahlen negieren.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

Irgendwie irritieren mich deine zwei Codezeilen - müsste es nicht

TIMSK = ~(1 << TOIE1);
TIMSK |= (1 << TOIE1);

heißen?

'73

Chris

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Errm, sorry:

TIFR = (1 << TOV1);
TIMSK |= (1 << TOIE1);

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.