PWM mit PCA beim P87C51FA-4B (Assembler)

Gast #302917
Lesenswert?

Hallo!

Ich habe ein kleines Problem mit der PWM-Erzeugung über das PCA
(Programmable Counter Array) beim P87C51FA-4B. Die Erzeugung des
PWM-Signals funktioniert ohne Probleme, doch bekomm ich den Pin, über
den das Signal ausgegeben wird, nie ganz auf 0. Es sind immer noch sehr
kurz 1-Phasen zu erkennen.

Das liegt daran, da der Pegel 1 wird, wenn der Compare-Wert
(CAPLn-Register) groesser oder gleich des Timer-Wertes ist. Also habe
ich bei höchst möglichem Compare-Wert (FF) trotzdem noch einmal die
Bedningung Compare-Wert=Timer-Stand erfüllt und bekomme eine kurze 1.

Nun habe ich in verschiedenen Dokumentationen gelesen, dass ich um
einen reinen 0-Pegel zu bekommen, den Pin direkt löschen muss (CLR).
Siehe unter anderem Intel PCA Cookbook:
http://www.intel.com/design/mcs51/applnots/27085101.PDF auf Seite
19-21. Leider funktionieren alle meine bisherigen Versuche nicht.

Meine Idee war:

mov A,meinWert                ; Vergleichswert laden
jz f1_aus          ; ist Vergleichswert 0?
mov CAPH0,A                   ; ins PCA-Array (8Bit PWM)
mov CAPM0,#%01000010          ; 8-Bit PWM einschalten
ljmp f1_end          ; Ausschalten ueberspringen
f1_aus:
mov CAPM0,#%00000000        ; 8-Bit PWM ausschalten
CLR P1.3          ; PWM-Ausgang auf 0 setzen
f1_end:

Ich habe auch einige andere Kombinationen probiert, z.B. das weglassen
von "mov CAPM0,#%00000000", da das direkte setzten des Pins laut
Dokumentation auch die PWM-Funktion unterbricht. Alles allerdings ohne
Erfolg.

Nun brtäuchte ich ein konkretes Beispiel für meinen Fall. Weiss jemand
wie ich das Problem lösen kann?

Danke schon mal!
Mit freundlichen Grüße,
Daniel

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