Forum: Mikrocontroller und Digitale Elektronik PIC PWM duty cycle aendern


von MartinK (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
also ich versuche gerade mit einer schleife eine led hell und dunkel zu 
faden. das mit dem pwm hab ich auch soweit verstanden und implementieren 
koennen, nur kann ich das verhaeltnis (duty cycle) im betrieb (mit 
meiner schleife) nicht aendern. wenn ich den wert per hand aendere und 
den pic neu brenne aendert die led die helligkeit, so wie es sein 
sollte.
fuer das verhaeltnis ist ja CCPR1L zustaendig, welches, soweit ich das 
gelesen habe, jederzeit veraenderbar sein sollte.
meinen code hab ich mit drangehangen, koennt ihr da bitte mal 
durchgucken ob ich einen grundlegenden fehler mache?
besten dank im vorraus.
mfg Martin

von Atlas (Gast)


Lesenswert?

Bist Du sicher, dass die LED überhaupt leuchtet?
Der Anschluss RC2 ist als Eingang konfiguriert.
Hier eine etwas veränderte Version Deines Programms.
Dieses funktioniert!

    MOVLW  B'00000100'
    MOVWF    T2CON           ; prescaler 1:1, Timer2 enabled

; Frequenzy 19.53 kHz
        BSF      STATUS,RP0       ; Bank1
        MOVLW    D'255'
        MOVWF    PR2              ; 3,9kHz
        BCF      STATUS,RP0       ; Bank1

; Verhältnis auf % einstellen
        MOVLW    D'64'
        MOVWF    CCPR1L          ; 25% von 255

; RC2/CCP1 auf Ausgang stellen
        BSF      STATUS,RP0      ; Bank1
        MOVLW  B'00000000'  ; PORTC output
        MOVWF  TRISC
        BCF      STATUS,RP0      ; Bank 0

; PWM MODE mit CCP1 initialisieren
        MOVLW   B'10001100'  ; dual output, half bridge mode
    MOVWF   CCP1CON    ; P1A, P1C actice high, P1B, P1D active high

START          ;Beginn Hauptprogramm
    INCF  R3,F
    MOVF  R3,W
    MOVWF    CCPR1L
    CALL  DELAY_10ms
    GOTO  START

    END

von MartinK (Gast)


Lesenswert?

Hallo, danke fuer deine antwort!
ja ich bin sicher, dass die led leuchtet. die haengt naemlich an RC5 und 
eine an RC4. denn das sind beim pic16f690 die pwm ausgaenge.
ich hab mal deine schleife versucht, also den zahlenwert in einem 
temporaeren register zu incrementieren und dann in CCPR1L zu kopieren, 
aber das funzt auch nicht.
die leds an portc 4 und 5 sind auch unterschiedlcih hell, weil die 
ausgaenge ja invertiert zueinander sind  und somit die pulsweite 
unterschiedlich ist.

nun frag ich mich, warum das nich klappt, einfach die pulsweite mit 
CCPR1L zu aendern? muss man evtl das pwm modul danach neustarten oder 
die ausgaenge oder so?

mfg martin

von Atlas (Gast)


Lesenswert?

Hallo,

mein oben angegebenes Programm habe ich auf einem 16F876 mit
einem Standard CCP-Modul laufen.
Vielleich solltest Du das ECCP-Modul des 16F690 ersteinmal auf
Standardbetrieb umschalten und es mit einer LED an P1A (RC5)
versuchen. Dazu ins Register CCP1CON den Wert B'00001100' laden.

MfG

von MartinK (Gast)


Lesenswert?

das war ja ne schwere geburt.
hab jetzt den ganzen tag rumgebastelt und es laeuft nun endlich so, wie 
ich es moechte.
dankeschoen fuer deine hilfe, es lag wohl zum einen an der 
initialisierung (die hat sich im simulator immer aufgehangen bzw 
wiederholt. habe das nun direkt ohne subroutine aufgerufen) und zum 
anderen an dem retlw, so dass die schleifen nicht durchlaufen wurden. 
(kA warum das so ist)
wie gesagt es haut jetzt hin =) ...puh
mfg

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.