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