hallo!
ich habe hier als grundlage eine schaltung von sprut.de benutzt.
ich möchte die Spannung einer Autobatterie messen und sie über ein
LC-Display
16x2 wiedergeben.
das programm hat nur einen Messbereich von 0-5V
ich benötige jedoch 11,5- 14,5V.
ich habe mir die schaltung so aufgebaut das ein festspannungsregler 5v
die versorgung für lcd und pic sicherstellt und ein spannungsteiler den
meßeingang
des pics versorgt.
bei ca. 12 volt werden mir also jetzt 4,08V angezeigt. hier sollten
jetzt eigentlich auch 12V auf dem LCD stehen.
im anhang sollte das programm zu finden sein.
ich hoffe ich habe es verständlich beschrieben und würde mich über
antwort freuen.
viele grüße, florian
@ flo (Gast)
>bei ca. 12 volt werden mir also jetzt 4,08V angezeigt. hier sollten>jetzt eigentlich auch 12V auf dem LCD stehen.
Da due einen [[Spannungsteiler] hast, musst du deinen ADC-Wert nch mit
dem Widerstandsverhältnis multiplizieren. Das Ganze muss in etwa hier
rein
>;*****************************************************>; Wandlung des ADC-Wert in Millivolt (bin�r)>; Der ADC-Wert steht in f1,f0>; Ergebnis steht in f1,f0
Aber von PIC-ASM hab ich keine Ahnung.
AVR-Tutorial: ADC
MFG
Falk
hallo falk!
danke für die schnelle antwort!
okay, wenn ich meinen angezeigten wert mit 2,9 multipliziere, komme ich
auf den wert den ich im lcd stehen haben möchte.
beispiel: bei 4volt am pic messeingang multipliziert mit 2,9 = hier
sollte das lcd 11,6 anzeigen.
also müsste ich jetzt mit 2,9 multiplizieren, ich weiß jedoch nicht
genau, wie der befehl lauten muss um ihn hier einzufügen. --->>>>
>;*****************************************************>; Wandlung des ADC-Wert in Millivolt (bin�r)>; Der ADC-Wert steht in f1,f0>; Ergebnis steht in f1,f0
viele grüße, florian
flo wrote:
> hallo falk!>> danke für die schnelle antwort!>> okay, wenn ich meinen angezeigten wert mit 2,9 multipliziere, komme ich> auf den wert den ich im lcd stehen haben möchte.>> beispiel: bei 4volt am pic messeingang multipliziert mit 2,9 = hier> sollte das lcd 11,6 anzeigen.>> also müsste ich jetzt mit 2,9 multiplizieren, ich weiß jedoch nicht> genau, wie der befehl lauten muss um ihn hier einzufügen. --->>>>
Das ist der falsche Weg.
Irgendwo in dem Code muss ja auch die Umrechnung vom ADC Wert
zu den (jetzt) 5Volt sein. Der ADC spuckt ja nicht die gemessene
Spannung an sich (also in Volt) aus, sondern eine ganze Zahl,
die diese Spannung repräsentiert.
Ich kenne den PIC nicht, aber ich schätze mal der wird auch
einen 10 Bit ADC haben. Das heist die ganzen Zahlen von
0 bis 1023 überstreichen (als Voltzahl ausgedrückt) 0V bis 5V.
Liegen 0V an, so meldet der ADC 0
Liegen 5V an, so meldet der ADC 1023
Das heist in dem bisherigen Code muss es eine Umrechnung
geben.
ein maximaler ADC Wert von 1023 entspricht 5 Volt
ein gemessener ADC Wert von M entspricht daher x Volt
-----------------------------------------------------------------
M * 5
x = -------
1023
Diese Umrechnung musst du im Code finden. Anstelle der 5V setzt
du dann deine 12 Volt ein.
Also: Die Berechnung an sich (die ja vorhanden sein muss)
korrigieren und nicht die jetzige Berechnung lassen und den
Wert im Nachhinein korrigieren.
@ Karl heinz Buchegger (kbuchegg) (Moderator)
>Also: Die Berechnung an sich (die ja vorhanden sein muss)>korrigieren und nicht die jetzige Berechnung lassen und den>Wert im Nachhinein korrigieren.
Sag ich doch. Allerdings wird da mal wieder ein wenig getrickst, um
Aufwand zu sparen.
>;*****************************************************>; Wandlung des ADC-Wert in Millivolt (bin�r)>; Der ADC-Wert steht in f1,f0>; Ergebnis steht in f1,f0
...
> call Sub16 ; f := 5xADC - 5xADC/64 - 5xADC/128> return ; fertig
Sprich f = ADC * (5+5/64 + 5/128) = ADC * 5,117
Das muss angepasst werden.
MFG
Falk
hallo nochmal!
danke karl heinz und falk!
ich komme der sache so langsam immer näher.
okay, ich habe jetzt mal die sub 16 und div2 werte geändert, aber nur
willkürlich, ich komme jetzt auch zur anzeige von 12 volt, aber je
weiter ich hochdrehe, ca 14,5volt, desto ungenauer wird die anzeige
wieder!
ich habe keine ahnung wie oft ich was sub bzw div soll um auf den
gleichen ausgabewert zu kommen den ich auch hineingebe.
kann mir da nochmal jemand helfen?
wenn noch ein paar werte benötigt werden, sagt bescheid!
ich wäre sehr dankbar für eine für mich verständliche lösung!
viele grüße, florian
Nehmen wir an, dein Spannungsteiler hat den Teilfaktor 0,29411
(R1=24k, R2=10k). D.h. dein 0-5V ADC misst dann 0-15V.
Gemäss der ADC Grundfomel für einen 10 Bit ADC
kann man hier ausrechnen, dass dein ADCwert mit 0,0166015625
multipliziert werden muss, um auf den Spannungswert in Volt zu kommen.
Durch clevere Anwendung von Festkommaarithmetik multipliziert man
statt dessen mit 1660 und erhält das Ergbnis in 100uV Schritten. Das
kann man dann wie gewohnt in ASCII umwandeln und ausgeben. Siehe
AVR-Tutorial: ADC
Da dieser PIC wahrscheinlich keinen Multiplikationsbefehl hat, muss man
das mit einem kleinen Programm nachbilden. Dazu gibt es sicherlich von
Microchip Application Notes.
MFG
Falk