Forum: Mikrocontroller und Digitale Elektronik PWM Auflösung von 8bit auf 10bit mit PIC16F876


von Mirko (Gast)


Lesenswert?

Hallo,

habe das Beispiel von 
http://www.sprut.de/electronic/pic/programm/adcpwm.htm nachgebaut. Jetzt 
möchte ich die schlechte Genauigkeit der PWM-Ausgabe bei 8bit (20mV) auf 
10bit (5mV) verbessern! Dazu müssen aber wie am Ende des Links kurz 
erklärt wird, noch zwei weitere Register eingelesen und dann irgendwie 
ausgegeben werden!

Kann mir da bitte einer weiter helfen, bzw. Sagen, wie die ASM, 
umgeschrieben werden muss, damit meine PWM Auflösung mit einer 
genauigkeit von 10bit funktioniert?

Muss zum testen fast 70Km an die Uni fahren und wollt deshalb gleich 
eine richtige Lösung ausprobieren! Wäre deshalb über ausführliche 
Vorschläge sehr dankbar.

Ich brauche da unbedingt hilfe, schnell!!!!

Danke

von Mirko (Gast)


Lesenswert?

Damit ihr wisst wo mein Problem besteht, hier mal kurz die Hauptschleife 
mit derzeit 8bit PWM:

; Hauptprogrammschleife
Main
; Eingangsspannung wandeln
        BSF     ADCON0, 2      ; ADC starten
loop
        BTFSC   ADCON0, 2      ; ist der ADC fertig?
        GOTO    loop           ; nein, weiter warten
; Wert nach PortB schreiben
        movfw   ADRESH         ; obere 8 Bit auslesen
        movwf   PORTB          ; obere 8 Bit nach PORTB
; Wert an PWM übergeben
        MOVWF   CCPR1L         ; obere 8 Bit sind PWM
; Warten, damit der ADC sich erholen kann
        clrf    wait
warten
        DECFSZ  wait, f
        goto    warten
        goto    Main
        end

Mein Ansatz wäre nun hier dargestellt. dabei habe ich nun bei "Wert nach 
PortB schreiben 2 Zeilen eingefügt" Ist das Richtig, oder muss das 
Anders gemacht werden? Ich muss doch auch nur hier in der Hauptschleife 
was ändern, oder!?

; Hauptprogrammschleife
Main
; Eingangsspannung wandeln
        BSF     ADCON0, 2      ; ADC starten
loop
        BTFSC   ADCON0, 2      ; ist der ADC fertig?
        GOTO    loop           ; nein, weiter warten
; Wert nach PortB schreiben
        movfw   ADRESH         ; obere 8 Bit auslesen
        movwf   PORTB          ; obere 8 Bit nach PORTB
        end

        movfw   ADRESL         ; obere 2 Bit auslesen (von 10bit)
        movwf   PORTB          ; obere 2 Bit nach PORTB (von 10bit)
        end

; Wert an PWM übergeben
        MOVWF   CCPR1L         ; 10 Bit sind PWM
; Warten, damit der ADC sich erholen kann
        clrf    wait
warten
        DECFSZ  wait, f
        goto    warten
        goto    Main
        end
end


Gruß Mirko

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.