www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Compare Match Interrupt Pins high und low setzen


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Sven (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
µC Atmel Atmega8

Ich habe eine Frage, die ich hier in einem kleinen Beispiel 
veranschaulichen möchte.
Ich betreibe auf dem Atmega8 den Timer 1 16-bit.
Nun möchte ich bei einem Compare Match den Pin PB1 (OC1A) auf high 
setzt.
Im Programm schreibe ich an der Stelle also dies:

TCCR1A |= (1<<COM1A0) | (1<<COM1A1); 
OCR1A = 100;
TIMSK |= (1 << OCIE1A);


In dem Beispiel wird bei erreichen also des Timers von TCNT1=101 das 
Compare Match A ausgelöst und diese ISR aufgerufen:

ISR (TIMER1_COMPA_vect){
TIMSK &= ~(1 << OCIE1A);
TCCR1A &= ~(1 << COM1A0); // Bit löschen, sodass beim nächsten mal auf low geschaltet wird
TCCR1A |= (1 << FOC1A); // Force Output schaltet Bit wieder auf low
TCCR1A |= ~(1 << COM1A0); // würde beim nächsten erreichen wieder high werden
}            


Die ISR schaltet den Compare Match wieder aus, bis er hypothetisch 
irgendwann wieder eingeschaltet wird (an einer Stelle des Programms).
Wird jetzt aber bei erreichen des Timers von 101 beim nächsten mal der 
Pin wieder auf low gesetzt?
Ich meine, die ISR wird nicht angesprungen, klar, weil ja im TIMSK 
Register das entsprechende Flag gelöscht ist. Aber durch die gesetzten 
COM1A0 und COM1A1 schaltet die Hardware dann trotzdem den Pin um?

Danke.

Ach ja, ich habe das jetzt so aus dem Kopf geschrieben nur als Bsp, d.h. 
nicht compiliert. Evtl. sind noch kleine Fehler drin... aber vom Prinzip 
her sollte es durchsichtig sein.

LG
Sven

Autor: Alex S. (thor368)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Tach Sven,

ich bin selbst nicht in der Syntax drin aber ich verstehe was du meinst.
Natürlich arbeitet der tiemr auch ohne interrupt. Du brauchst also 
keinen interrupt, damit der OC das bit wiederum cleart.

Thor

Autor: Sven (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Nabend Thor!

Ok, erst einmal danke!

Das heißt im Klartext, wenn ich nicht möchte, dass das OC cleared, 
genügt es nicht, das Flag OCIE1A im TIMSK Register zu löschen (TIMSK &= 
~(1 << OCIE1A)), sondern ich muss auch COM1A0 und COM1A1 löschen (TCCR1A 
&= ~(1 << COM1A0) | COM1A1)), sonst wird der Pin jedes Mal bei der 
Übereinstimmung gesetzt.
Ist das so richtig verstanden?

Autor: Alex S. (thor368)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ja, so in etwa. Wenn du allerdings die COM bits löscht, dann wird wieder 
das Port register dominant. Es gibt mehrere Lösungen für das Problem:

Wenn du die COM bits löscht, dann musst du das Port Register auf den 
gewünschten Wert setzen. Möglichst (versteht sich) vorher sonst hast du 
da nervöses Gezappel auf dem Pin.

Da kannst aber auch den timer anhalten, indem du den prescaler auf 0 
setzt. Dann wird kein weiterer OC mehr auftreten.

Wenn es dich nicht stört, dass weitere OCs auftreten du aber möchtest, 
dass das bit dabei gesetzt bleibt kannst du auch einfach die COM bits so 
konfigurieren, dass sie das bit immer weiter setzen. Dann findet auch 
keine weitere Änderung mehr statt.

Thor

Autor: Sven (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Danke Thor, kapiche ;-)

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net