Forum: Mikrocontroller und Digitale Elektronik PWM mit PCA beim P87C51FA-4B (Assembler)


von Daniel Schwalm (Gast)


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

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.