Forum: Mikrocontroller und Digitale Elektronik Ausgang mit boolschen Ausdruck


von Nils (Gast)


Lesenswert?

Moin,

ich nutze den Atxmega128A4U. Ich benutze einen Hardwaretimer um eine PWM 
zu erzeugen. Ich möchte jetzt, dass immer wenn die PWM auf LOW ist, ein 
anderer Ausgang freigegeben wird. Zum Testen einfach invertiert zur PWM 
schalten.

Als Test prüfe ich derzeit, ob die PWM den Schwellwert überschritten 
hat. In dem Fall wird der Ausgang auf HIGH gesetzt, andernfalls auf LOW.

Damit sollte ich eigentlich per Software eine (invertierte) Kopie der 
PWM bekommen. In der Theorie.

In der Praxis sieht diese Software PWM sehr schlecht und unregelmäßig 
aus.

Ich überprüfe die PWM mit folgendem Code:
1
if(!(TCD0_CTRLB & TC_WGMODE_SS_gc)) return true;
2
else if(TCD0_CNT < TCD0_CCA) return true;
3
else return false;

Ich könnte ein Hardware UND Gatter auf die Leiterkarte machen. Ich denke 
das muss aber auch in Software gehen.

Die Ausgänge vom Atxmega kann ich intern meines Wissens nach nicht 
verunden.

Ich habe zur Zeit bei 2Mhz eine Zykluszeit von wenigen mS (weil ich eine 
I²C Operation nicht als Interrupt laufen lasse). Das heißt bei 1kHz PWM 
ist diese bereits schneller als meine Zykluszeit und kann nicht sauber 
erfasst werden.

Auch wenn ich einen Timer Compare benutze - das Ergebnis muss ja 
verarbeitet werden.

Kann mir jemand mit Ideen helfen? Die einzige Idee, die ich habe, ist 
das ganze mit einer höheren CPU Takt zu probieren.

Nils

von Stefan F. (Gast)


Lesenswert?

> Die einzige Idee, die ich habe, ist
> das ganze mit einer höheren CPU Takt zu probieren.

Das würde dein Problem nur veringern aber nicht lösen.

Ich denke, du kommst nicht umhin, das PWM Signal durch Hardware erzeugen 
zu lassen.

von Klaus (Gast)


Lesenswert?

Ich empfehle Dir, gemäß der Netiquette, zu schreiben, für welches 
Problem das die Lösung sein soll.

von Paul B. (paul_baumann)


Lesenswert?

Nils schrieb:
> Zum Testen einfach invertiert zur PWM
> schalten.

Kannst Du da nicht sagen:
Ausgang 2 NOT PWM-Ausgang

Nils schrieb:
> Die Ausgänge vom Atxmega kann ich intern meines Wissens nach nicht
> verunden.

Wenn noch ein Pin als Eingang frei wäre, könnte man den PWM-Ausgang mit 
diesem Eingang verbinden und dort sagen:
IF Eingang = 0 Then
   Tralala
End IF

------------------------------------------------------------------------ 
-
Wie das in C aussehen müßte, weiß ich nicht -das beherrsche ich nicht.

mfG Paul

von Nils (Gast)


Lesenswert?

Paul B. schrieb:
> Nils schrieb:
>> Zum Testen einfach invertiert zur PWM
>> schalten.
>
> Kannst Du da nicht sagen:
> Ausgang 2 NOT PWM-Ausgang
>
> Nils schrieb:
>> Die Ausgänge vom Atxmega kann ich intern meines Wissens nach nicht
>> verunden.
>
> Wenn noch ein Pin als Eingang frei wäre, könnte man den PWM-Ausgang mit
> diesem Eingang verbinden und dort sagen:
> IF Eingang = 0 Then
>    Tralala
> End IF
>
> ------------------------------------------------------------------------
> -
> Wie das in C aussehen müßte, weiß ich nicht -das beherrsche ich nicht.
>
> mfG Paul

Ändert nichts daran, dass die PWM schneller ist als die Zykluslaufzeit. 
Das geht auch ohne zusätzlichen Eingang.

Klaus schrieb:
> Ich empfehle Dir, gemäß der Netiquette, zu schreiben, für welches
> Problem das die Lösung sein soll.

Zwei Heizungen sollen angesteuert werden. Die eine über PWM + PID, die 
zweite über Zweipunktregler. Es dürfen aber aufgrund der 
Leistungsbegrenzung niemals beide Heizungen gleichzeitig laufen. Die vom 
Zweipunktregler muss nicht sonderlich genau sein, deswegen die Lösung, 
dass diese heizen darf (Freigabe), wenn die PWM auf LOW ist.

von H.Joachim S. (crazyhorse)


Lesenswert?

Ich kenn mich zwar mit dem XMega überhaupt nicht aus, aber die haben 
doch sehr flexible Timer?
Also passende PWM-Art auswählen,
-Interrupt bei OV, beliebigen Pin zurücksetzen
-Interrupt bei PWM-Wert (dafür evtl 2. compare-Register benutzen und auf 
gleichen Wert wie das eigentliche PWM-Register setzen), beliebigen Pin 
wieder setzen.

Vielleicht geht auch was mit dem pinchange-int? Keine Ahnung, ob man den 
den PWM-Ausgang dafür direkt nehmen kann. Falls nicht, Brücke zu einem 
Eingang basteln.

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.