Moin allerseits,
ich möchte eine Phasenanschnittsteuerung mit dem Timer 2 eines Atmega88
bewerkstelligen, dazu starte ich im Nulldurchgang den Timer 2 im CTC
Mode
und möchte OCR2B bei erreichen des entsprechenden Zündwinkels
beispielsweise auf High setzen. Wenn der Wert von OCR2A dann erreicht
wird mopse ich den Zähltakt und setze das Zählregister zurück. So weit
so gut.
....aber wie zum Teufel bekomme ich das von OCR2B gesteuerte OutputPin
PD3
wieder auf Low? Ich kann mit COM2B0 und COM2B1 setzen oder Rücksetzen
einstellen, der Pegel bleibt dann wo er ist. Wenn ich das auf Toggeln
einstelle toggelt das Pin auch, das klappt. Wenn ich aber High oder Low
eisntelle bleiben die Pegel im "scharfen" Zustand...
Wie geht das?
Gruß,
Holm
Holm T. schrieb:> wieder auf Low? Ich kann mit COM2B0 und COM2B1 setzen oder Rücksetzen> einstellen, der Pegel bleibt dann wo er ist. Wenn ich das auf Toggeln> einstelle toggelt das Pin auch, das klappt. Wenn ich aber High oder Low> eisntelle bleiben die Pegel im "scharfen" Zustand...
Wenn du dem Timer mittels der COM Bits die Kontrolle über das Port
Register gegeben hast, dann hat der auch die Kontrolle drüber. Wenn du
die Kontrolle wiederhaben willst, weil du selbst an den Pins fuhrwerken
willst, dann musst du ihm mittels COM Bits die Kontrolle wieder
entziehen.
Karl H. schrieb:> Holm T. schrieb:>>> wieder auf Low? Ich kann mit COM2B0 und COM2B1 setzen oder Rücksetzen>> einstellen, der Pegel bleibt dann wo er ist. Wenn ich das auf Toggeln>> einstelle toggelt das Pin auch, das klappt. Wenn ich aber High oder Low>> eisntelle bleiben die Pegel im "scharfen" Zustand...>> Wenn du dem Timer mittels der COM Bits die Kontrolle über das Port> Register gegeben hast, dann hat der auch die Kontrolle drüber. Wenn du> die Kontrolle wiederhaben willst, weil du selbst an den Pins fuhrwerken> willst, dann musst du ihm mittels COM Bits die Kontrolle wieder> entziehen.
Soweit schick, so schlau war ich auch... nur will ich das gar nicht. Ich
hatte erwartet das der Timer nach dem Stoppen und rücksetzen des TCNT2
Registers das Ding selbst wieder abdreht, macht er aber nicht. Ich habe
auch in der Doku nichts gefunden (außer offensichtlicher (copy&paste)
Fehler im PDF..).
Gruß,
Holm
@ Karl Heinz (kbuchegg) (Moderator)
>die Kontrolle wiederhaben willst, weil du selbst an den Pins fuhrwerken>willst, dann musst du ihm mittels COM Bits die Kontrolle wieder>entziehen.
Nein, es geht auch bei angekoppeltem OCRx. Dazu muss man die
COM2A1/COM2A0 Bits passend setzen, z.B. 10 für Clear. Dann löst man ein
OCRx Ereignis per Software aus, indem man das FOC2A Bit setzt. Damit
wird das Ausgangsbit gelöscht! Setzen und Togglen geht ebenso.
Nachtrag. Man MUSS es sogar so machen, denn wenn man das Pin vom OCRx
abkoppelt (COM2A1/0 auf 00) und meinetwegen wieder normal per Software
auf LOW schaltet und dann wieder ANkoppelt, ist es immer noch HIGH. Denn
diese beiden Informationen werden in getrennten FlipFlops gespeichert.
Siehe Anhang.
@ Holm Tiffe (holm)
>Danke Falk, so einen Mist hatte ich geahnt...was für ein Müll.
Wo ist das Problem? Sind halt 2 Schreibzugriffe statt einem. So what!
>Ich klemme das Pin ab und schalte in der ISR..
Würde ich nicht machen, damit hebelst du ja die Vorteile von Putput
COmpare aus.
Falk B. schrieb:> @ Karl Heinz (kbuchegg) (Moderator)>>>die Kontrolle wiederhaben willst, weil du selbst an den Pins fuhrwerken>>willst, dann musst du ihm mittels COM Bits die Kontrolle wieder>>entziehen.>> Nein, es geht auch bei angekoppeltem OCRx. Dazu muss man die> COM2A1/COM2A0 Bits passend setzen, z.B. 10 für Clear. Dann löst man ein> OCRx Ereignis per Software aus, indem man das FOC2A Bit setzt. Damit> wird das Ausgangsbit gelöscht! Setzen und Togglen geht ebenso.
Den einzigen Vorteil, den ich hier sehe ist
* Toggeln
* ich muss den exakten Pin in der Software nicht kennen. Obwohl. Den
muss ich sowieso kennen, weil ich das DDR Register besetzten muss.
Ansonsten sind das auch nicht weniger Schritte.
Aber vom Prinzip her hast du recht. So würde es auch gehen.
Falk B. schrieb:> @ Holm Tiffe (holm)>>>Danke Falk, so einen Mist hatte ich geahnt...was für ein Müll.>> Wo ist das Problem? Sind halt 2 Schreibzugriffe statt einem. So what!>>>Ich klemme das Pin ab und schalte in der ISR..>> Würde ich nicht machen, damit hebelst du ja die Vorteile von Putput> COmpare aus.
Das Problem ist das ich den Ganzen Kram dann wieder beim nächsten scharf
machen des Timers zurück kurbeln muß, das ist ein Haufen Salat für so
gut wie keinen Vorteil (ich habe "endlos" Zeit das in Software zu
machen).
Einen Vorteil hat das nur wenn ich wirklich exakt die Zeit halten muß,
für die Ansteuerung der Luftpumpe einer Lötstation ist das aber eher
Käse.
Gruß,
Holm