Forum: Mikrocontroller und Digitale Elektronik Problem mit Timer2 Atmega88


von Holm T. (Gast)


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

von Karl H. (kbuchegg)


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.

von Holm T. (Gast)


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

von Falk B. (falk)


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.

von Holm T. (Gast)


Lesenswert?

Danke Falk, so einen Mist hatte ich geahnt...was für ein Müll.

Ich klemme das Pin ab und schalte in der ISR..

Gruß,

Holm

von Falk B. (falk)


Angehängte Dateien:

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.

von Falk B. (falk)


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.

von Karl H. (kbuchegg)


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.

von Karl H. (kbuchegg)


Lesenswert?

Falk B. schrieb:

> Siehe Anhang.

Ach du Mist. Das hab ich noch gar nie bemerkt. Mea culpa, mea maxima 
culpa.

Wieder was gelernt. Danke.

von Holm T. (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.