PWM Auflösung von 8bit auf 10bit mit PIC16F876

Gast #1303285
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.