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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.