Problem mit Timer2 Atmega88

Gast #4375270
Lesenswert?

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
#4375297
Lesenswert?

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.
Gast #4375313
Lesenswert?

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
#4375318
Lesenswert?

@ 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.
#4375327
Lesenswert?

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.
Angehängte Dateien:
#4375329
Lesenswert?

@ 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.
#4375347
Lesenswert?

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.
Gast #4375389
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren