Hallo
Ich habe einen Pic18F4550 und einen LM35 mit wem ich die aktuelle
Raumtemperatur messen will und auf dem LCD-Display ausgeben...
Das mit dem ausgeben auf dem lcd-display usw. funktioniert einwandfrei,
nur bekomme ich vom LM35 einen ADC-Wert von 12-15 wenn ich den finger
draufhalte.. wie rechne ich das auf eine Temperatur um??
Bitte um schnelle antwort, da es sich um ein Schulprojekt handelt
welches in 2 wochen fertig zum präsentieren sein sollte ;)
DANKE schonmal und lieben grüß
Wie sieht denn Deine AD-Wandlung aus? Ich bastel auch gerade mit dem
lm35 herum; er liefert wie im Datenblatt beschrieben 10mV/Grad; macht
bei Körpertemperatur 370mV (allerdings nur in Bereichen, wo man den lm35
besser nicht hineinsteckt). Kalte Finger haben da schon mal nur 25 Grad.
Was ist das für ein Wert von 12..15, den Du angesprochen hast?
ich habe den LM35 direkt auf dem adc pin 0... der code dazu:
/*
setup_adc_ports(an0);
setup_adc(adc_clock_div_16);
set_adc_channel(0);
mess = read_adc();
//mess2 = (float)mess/51;
printf(LCD_PUTC, "\fTemp: %2.3fV\n", mess);
delay_ms(50);
*/
der wert von 12 bis 15 ist der ADC-Wert...
12 bei raumtemperatur
~15 wenn ich mit dem finger drauf halte...
ein unterschied on 3°C --> die 10mV/°C stimmen also...
der float wert mess2 ist dazu da, den adc wert (0-255) in eine
temperatur umzuwandeln... nur wie rechne ich das jetzt um? das war meine
eigentliche frage ;)
mfg
Hallo!
Mit mess2 müsstest Du eigentlich richtig liegen; die vom adc gelieferten
Werte von 0...255 müssen in die möglichen Spannungswerte 0....5V
umgerechnet werden (Dreisatz); die Division mit 51 tuts auch. d.h. der
Wert, den Du erhältst entspricht einer Temperatur von bsp. 5V = 50C.
Passt das?
Joachim
ja, mess2 liefert die aktuelle spannung... aber bei 5V, die auf der lcd
angezeigt werden, zeigt mein messgerät nur 4.6V am adc-eingang an, macht
das was?
wie soll ich den adc-wert von 12 bis 15 umrechnen?
einen opv vorschalten um den bereich zu erhöhen?
aber ich denke mir es muss ja einfach mit vin, gnd und vout auch so
funktionieren... aber wie rechne ich das um, das möchte ich wissen^^
mfg und danke für eure antworten
Prüf erst mal Dein Meßgerät nach; danach die Spannung, die mit dem lm35
am adc anliegt und vergleiche sie mit der Anzeige auf dem lcd.
Mit den Werten 12...15 kommst Du hier nicht weiter; nimm die werte aus
dem mess2, der hat schon die richtige Skalierung. Teile den Wert aus
mess durch 5 (oder 5,1), dann hast Du direkt die Temperatur und kannst
sie auf dem lcd anzeigen. Mit dem int-Wert in das printf wid es nur
merkwürdige Ergebnisse zeigen
also.. ich habe heute in der schule nachgemessen und es sind bei dem
geeichten messgerät vom lehrer 4,9xx V ... also das müsste passen
gerade probiere ich zuhause was in dem post über mir steht:
"
Du hier nicht weiter; nimm die werte aus
dem mess2, der hat schon die richtige Skalierung. Teile den Wert aus
mess durch 5 (oder 5,1), dann hast Du direkt die Temperatur und kannst
sie auf dem lcd anzeigen. Mit dem int-Wert in das printf wid es nur
merkwürdige Ergebnisse zeigen
"
... dann hast du direkt die Temparatur und kannst sie auf dem lcd
anzeigen...
wenn ich was mache bekomme ich die Temperatur??
ich wäre euch sehr dankbar, wenn ihr mir die formel herschreiben würdet,
da ich das nicht so ganz verstehe wie du mir das da erklärt hast... :/
also z.B.:
mess = read_adc();
mess2 = (float)mess/51;
printf(LCD_PUTC, "\fTemp: %2.3fV\n", mess2);
was stimmt da nicht? sry dass ich mich so blöd anstelle aber ich komm
auf keinen grünen ast ;)
DANKE!!!
Vorausgesetzt, Du hast alles so weit eingestellt, daß der adc den
Wertebereich von 0-5V in mess auf die Werte 0...255 abbildet (ist aber
Standard bei 8bit)
Dann liefert der lm35 5V bei 50 Grad Celsius und (fast) 0V bei 0 Grad.
also 0 Grad = 0V =0 in mess
50 Grad = 5V = 255 in mess
Das ergibt in einem Diagramm eine Gerade durch den Nullpunkt; Steigung
(255-0)/(50-0)
Die 5,1 ist die Geradensteigung im Diagramm (255/50):
mess2 = mess/5,1 ergibt die Temperatur in Grad
also nicht durch 51 dividieren; dann sollte das auch mit dem printf in
dieser Form klappen, obwohl beim lm53 wie bei fast allen
Temperaturmessern die dritte Stelle hinterm Komma keinen Sinn macht.
hallo, danke für deine schnell antwort erstmal!
also wenn ich jetzt herschreib:
mess = read_adc();
mess2 = (float)mess/5.1;
printf(LCD_PUTC, "\fTemp: %2.2fV\n", mess2);
delay_ms(50);
dann bekomm ich am lcd einen wert von " Temp: 2.35V "
wenn ich mit dem finger draufhalte, dann kommen diese ergebnisse:
- Temp: 2.35V
- Temp: 2.54V
- Temp: 2.74V
- Temp: 2.94V
- Temp: 3.13V
nach temperatur sieht mir das aber nicht aus^^
mit dieser formel werden die adc werte von 12 bis ca. 16 einfach durch
5.1 dividiert.. das macht doch keinen sinn?
Irgendwas stimmt mit Deiner Schaltung nicht. Welchen Wert bekommst Du in
mess, wenn Du +5V , +2,5V und 0V anlegst? In mess sollte dann 255, 125
bzw 0 stehen ind in der Ausgabe über mess2 dann 50, 25 und 0.
Mir scheint, als wenn in mess der zehnfache wert stehen sollte;
Raumtemperatur 23,5 Grad, mit Finger drauf 31,3 macht mir mehr Sinn
ich hab gerade ein poti angeschlossen und bekomme deine werte... also
wenn 5V am poti abfallen, ist der adc wert 255... bei 2.5V -> 125 und
bei 0V -> 0 ...
der lm35 gibt ja pro °C 10mV mehr/weniger aus...
also bei 10 Grad gerade mal 0.1V liege ich da richtig? wenn ja, stimmen
deine theorien nicht :/
ich habe gerade die adc-auflösung auf 10Bit eingestellt und jetzt
bekomme ch mehr werte, also anstatt 12 bis 15 bekomme ich jetzt 49 bis
65... und daraus kann ich jetzt temperaturen von ~19°C bis 27°C
problemlos darstellen indem ich den adc-wert durch 2.23 dividiere...
es muss ja aber auch eine andere möglichkeit geben das andere mit 8 bit
adc auflösung auszurechnen?
gruß und danke ;)
'tschuldigung, ich hatte heute viel um die Ohren; bei 10 Grad liefert
der lm35 natürlich nur 0,1V; bei raumtemperatur dann um die 0,2V; macht
bei der Auflösung 5V->255 einen Wert von etwas über 10 in "wert"; von da
her liegt das richtig
Also noch mal:
eine 1 in "wert" entspricht (1/51)V am adc
1V entspricht 10 Grad C vom lm35
also ist eine 1 in wert 10Grad/51
macht also bei einer 12 in wert 12* 10/51 Grad = 23 Grad.
Ich hoffe, diesmal ist mir nicht der Kommafehler wieder
dazwischengekommen