www.mikrocontroller.net

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


Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.