www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Temperaturmessung mit LM35 und PIC18F4550 auf LCD anzeigen


Autor: kirsch (Gast)
Datum:

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

Autor: Michael Fr. (nestandart)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einfach (gemessene-körper-Temperatur minus 12..15) addieren.

Autor: kirsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich versteh nicht was du genau meinst, kannst du das mal in in 
form einer gleichung herschreiben?

danke!

Autor: Panzerknacker 176-671 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht im Datenblatt vom LM35

Autor: kirsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe das dateblatt nun studiert, kann aber leider nichts finden was 
mir in irgend einer weise weiterhilft... kann mir wer helfen?

DANKE!

Autor: Joachim (Gast)
Datum:

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

Autor: Walter Kirsch (Firma: htl) (kirschi)
Datum:

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

Autor: Joachim (Gast)
Datum:

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

Autor: Walter Kirsch (Firma: htl) (kirschi)
Datum:

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

Autor: Joachim (Gast)
Datum:

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

Autor: Walter Kirsch (Firma: htl) (kirschi)
Datum:

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

Autor: Joachim (Gast)
Datum:

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

Autor: Walter Kirsch (Firma: htl) (kirschi)
Datum:

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

Autor: Joachim (Gast)
Datum:

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

Autor: Walter Kirsch (Firma: htl) (kirschi)
Datum:

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

Autor: Joachim (Gast)
Datum:

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

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.