Forum: Mikrocontroller und Digitale Elektronik PWM togglen - DDR oder TCCR ändern


von PWM (Gast)


Lesenswert?

Ich möchte meinem PWM Modul die Möglichkeit des Togglens spendieren, 
d.h. das ich mit einem Funktionsaufruf die Generierung des PWM Signals 
deaktivieren kann, um es später ggf. wieder zu aktivieren.

Prinzipiell gibt es ja hier zwei Möglichkeiten. Zum Einen kann ich das 
Generieren des Outputs mittels der COMx2:1 Bits deaktiveren. Zum Anderen 
kann ich auch das Data Direction Register ändern.

Was ist hier zu bevorzugen bzw. wie handhabt ihr das? Beim Deaktivieren 
der COMx2:1 Bits besteht ja prinzipiell die Möglichkeit, dass man das 
Ergebnis nicht vorhersagen kann, oder übersehe ich hier etwas? Ich würde 
dann nämlihc die DDR Variante "bevorzugen".

von Karl H. (kbuchegg)


Lesenswert?

PWM schrieb:

> Prinzipiell gibt es ja hier zwei Möglichkeiten. Zum Einen kann ich das
> Generieren des Outputs mittels der COMx2:1 Bits deaktiveren. Zum Anderen
> kann ich auch das Data Direction Register ändern.

Und was bringt dir letzteres?
Anstatt den Ausgangstreiber ständig High/Low zu schalten, schaltest du 
dann eben ständig den Pullup-Widerstand zu bzw. weg.


> Was ist hier zu bevorzugen bzw. wie handhabt ihr das? Beim Deaktivieren
> der COMx2:1 Bits besteht ja prinzipiell die Möglichkeit, dass man das
> Ergebnis nicht vorhersagen kann

Schon.
Aber nachdem der Timer mittels COM Bits von den Ausgängen abgekoppelt 
wurde, hast du sie wieder unter Kontrolle. Eine kurze Ausgabe über das 
Port Register bereinigt die Situation des 'Ich weiß ja nicht wie der 
Ausgangspin gerade steht'

von Uwe (Gast)


Lesenswert?

Register nur bei Compare match oder Overflow ändern (im IRQ Handler je 
nach modi ) dann sollte es keine Glitches geben.

von PWM (Gast)


Lesenswert?

Uwe schrieb:
> Register nur bei Compare match oder Overflow ändern (im IRQ Handler je
> nach modi )

Ich habe aber keinen IRQ Handler. Modus: Fast PWM.

Karl Heinz Buchegger schrieb:
> Und was bringt dir letzteres?
> Anstatt den Ausgangstreiber ständig High/Low zu schalten, schaltest du
> dann eben ständig den Pullup-Widerstand zu bzw. weg.

Ok, das ist natürlich Blödsinn.

Karl Heinz Buchegger schrieb:
> Aber nachdem der Timer mittels COM Bits von den Ausgängen abgekoppelt
> wurde, hast du sie wieder unter Kontrolle. Eine kurze Ausgabe über das
> Port Register bereinigt die Situation des 'Ich weiß ja nicht wie der
> Ausgangspin gerade steht'

Ich habe mir eben die Wordclock Sources angeschaut. Dort wird es exakt 
anders herum gemacht - erst wird der Port auf Low gepullt, dann wird per 
COM Bits die Ausgabe bzw. Generierung deaktiviert. Ist das nicht falsch 
herum und kann (wenn es "unglücklich" läuft) zu unerwünschen Effekten 
führen?

von Karl H. (kbuchegg)


Lesenswert?

PWM schrieb:

> Ich habe mir eben die Wordclock Sources angeschaut. Dort wird es exakt
> anders herum gemacht - erst wird der Port auf Low gepullt, dann wird per
> COM Bits die Ausgabe bzw. Generierung deaktiviert. Ist das nicht falsch
> herum und kann (wenn es "unglücklich" läuft) zu unerwünschen Effekten
> führen?

Ich bin jetzt nicht sicher, wie da die exakte Innenveraschaltung des AVR 
ist. Ob der Timer auf das Port-Register einwirkt oder ob beide auf den 
Ausgangstreiber gehen.

Ich schätze aber mal, dass es da tatsächlich ein Problem geben könnte, 
das nur deswegen noch keinem aufgefallen ist, weil es schon sehr 
unwahrscheinlich ist. Denn immerhin muss der Timer exakt just in dem 
Moment den Pin auf High schalten (also seinen 0-Durchgang haben), in dem 
zwar das Port Register schon auf Low-geschaltet wurde aber die COM-Bits 
noch nicht geändert wurden.

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.