Forum: Mikrocontroller und Digitale Elektronik ADC Wert für Temperatur berechnen


von Max D. (jimbo)


Lesenswert?

Hallo zusammen,

habe an meinen cc2431 einen temperatur-sensor, nun möchte ich mir gerne 
diese an meinem lcd ausgeben lassen.
so habe die möglichkeit den temperatursensor als input für meinen adc 
anzugeben. habe ich auch gemacht. so jetzt bekomme ich einen hex-wert 
der mit der temperatur nichts zu tun hat.

deshalb wollte ich den wert über die geradengleichung berechnen.
also:
temp = m * adc-wert + t
m = (temp1 - temp2) / (adc1 - adc2)
t = temp1 - m * adc

blöd daran ist nur das ich keine vergleichswerte habe und auch keine 
möglichkeit sie durch geräte heraus zu finden. deshalb wollte ich fragen 
ob mir von euch jemand diese werte zukommen lassen könnte.

gruß, jimbo

von Falk (Gast)


Lesenswert?

Welcher Temperatursensor? Welche Schaltung? Meine Glaskugel ist gerade 
beim TÜV . . .;-)

MFG
Falk

von Max D. (jimbo)


Lesenswert?

oh tut mir leid

mhh, welcher sensor das ist weiß ich leider nicht.
hier der link zum datenblatt.
http://www.chipcon.com/index.cfm?kat_id=2&subkat_id=12&dok_id=240
dort das pdf "cc2430 data sheet".

interessant sind hier die seiten.
S.17 -> sensor werte, fehler usw.
S.125 ist die schaltung.

mehr hab ich leider auch nicht

von Falk (Gast)


Lesenswert?

Ich glaube du hast den falsch Link geschickt. In 
CC2430_Data_Sheet_rev2p0.pdf ist nur die Beschreibung des Prozessors 
drin. Zur Lösung des Problems bräuchte man schon die Beschreibung des 
Development boards.

MfG
Falk


von irgendein Rahul (Gast)


Lesenswert?

Der Prozessor scheint einen Onboard-Temperatur-Sensor zu 
haben...(zumindest stand das in der Beschreibung, die ich nur überflogen 
habe, unter dem Link...

von Karl H. (kbuchegg)


Lesenswert?

> blöd daran ist nur das ich keine vergleichswerte habe

Wieso hast du keine Vergleichswerte

Nimm ein Glas kaltes Wasser, Eiswürfel rein und warten
bis die Hälfte davon geschmolzen ist. Öfter mal umrühren.
Schon hast du deinen Vergleichswert für 0°C

Setze einen Topf auf den Herd und bringe Wasser zum kochen.
100°C

Was für Celsius gut genug war, wird wohl auch für dich gut
genug sein.

Du kannst ja dann immer noch Mutters Fieberthermometer
auspacken und mal schaun wie gut deine Werte waren.

von Jörg S. (Gast)


Lesenswert?

Frag doch mal beim Hersteller an, die werden doch mal ein Application 
Note oder sowas dafür haben...

von Max D. (jimbo)


Lesenswert?

guten morgen,

sorry! hier der link zum dk.
http://www.chipcon.com/index.cfm?dok_id=244&kat_id=6
dann CC2430DK/.../... User Manual.

ich habe das cc2430dk

zu kbuchegg:
ist schon ne gute idee aber für die formle brauche ich auch die adc 
werte und
ich glaube nicht das ich meinen chip da reinlegen kann ;-)
oder wie soll ich das verstehen.

gruß, jimbo

von irgendein Rahul (Gast)


Lesenswert?

>ich glaube nicht das ich meinen chip da reinlegen kann ;-)

Dann solltest du dir ein Thermometer besorgen...

von Max D. (jimbo)


Lesenswert?

du sorry ich versteh das nicht ganz.
wie bekomme ich die adc werte zu den, mit thermometer gemessenen werten.

gruß, jimbo

ps.: vorherige antwort war nicht gehässig gemeint.

von Peter D. (peda)


Lesenswert?

Max Dm wrote:

> blöd daran ist nur das ich keine vergleichswerte habe und auch keine
> möglichkeit sie durch geräte heraus zu finden. deshalb wollte ich fragen
> ob mir von euch jemand diese werte zukommen lassen könnte.


Steht doch alles im Datenblatt:

7.9 Analog Temperature Sensor


Peter

von Falk (Gast)


Lesenswert?

@ Max Dm

Du machst es einem aber nicht leicht. Die gesuchte Tabelle ist in 
CC2430_Data_Sheet_rev2p0.pdf Seite 18, nicht 17! Un dort sthet doch, was 
du wissen willst.

-40C = 0,648V
0C   = 0,743V
120C = 1,039V

-> 2,44 mV/K (steht direkt im Datenblatt)

Daraus ergibt sich die Temperaturgleichung

Theta = 0,743 + (V_ADC-0,743) * 2,44mV/K

wobei du V_ADC (ADC Eingangsspannung) vorher noch berechnen musst

V_ADC = ADC_value * Vref / 4096   (wend die Messung als 12 Bit MEssung 
durchgeführt wird)

Das ganze ist dann aber nur auf +/- 14C (!!!!) genau, weils eben ein 
Ultrabilligsensor ist. Ohne Kalibrierung ist das kaum brauchbar.

Entweder Kalibrierung (Dein Board auf zwei konstante Temperaturen 
heizen, dann messen) oder gleich nen kalibrierten, externen digitalen 
Sensor nehmen. LM75, LM74, und tausend andere.

MFG
Falk

von irgendein Rahul (Gast)


Lesenswert?

>wie bekomme ich die adc werte zu den, mit thermometer gemessenen werten.

Du musst die Spannung, die dein Thermosensor liefert mit dem ADC.
Da bekommst du einen bestimmten Wert, der der vom Thermometer 
angezeigten Temperatur entspricht.
Jetzt nimmst du dein Board und das Thermometer und gehst vor die Tür (da 
sollte es momentan etwas kühler sein.
Jetzt misst du wieder die Temperatur per ADC und liest sie am 
Thermometer ab. Es bietet sich an, nicht sofort zu messen, weil beide 
Gerätschaften sich erst auf die neue Umgebungstemperatur einstellen 
müssen.
Jetzt hast du zu zwei ADC-Werten die entsprechenden Temperatur-Werte.

Einfach geht es nur, wenn man einen Blick ins Datenblatt wirft...

von Karl heinz B. (kbucheg)


Lesenswert?

> ist schon ne gute idee aber für die formle brauche ich auch die
> adc werte

Was hindert dich daran, den Sensor auf eine bestimmte
bekannte Temperatur zu temperieren (daher Eiswasser
und kochendes Wasser) und bei der bekannten Temperatur
einfach mal den ADC Wert direkt auszugeben?
Dann hast du bei 2 bekannten Temperaturen die jeweiligen
ADC Werte und kannst die Koeffizienten für deine
lineare Gleichung berechnen.
Das hat sogar Alex kapiert.


von Max D. (jimbo)


Lesenswert?

mhh ok ist wirklich nicht so kompliziert.

Einfach geht es nur, wenn man einen Blick ins Datenblatt wirft...

ja das stimmt, hier habe ich ja temperatur und spannung.
bloß ich bekomme von meinem adc den wert 0x5c = 92 so jetzt wüßte ich 
aber nichts damit anzufangen wenn ich mir die tabelle auf seite 17 aus 
dem data sheet anschaue.


gruß, jimbo

von Peter D. (peda)


Lesenswert?

Max Dm wrote:

> bloß ich bekomme von meinem adc den wert 0x5c = 92 so jetzt wüßte ich
> aber nichts damit anzufangen wenn ich mir die tabelle auf seite 17 aus
> dem data sheet anschaue.


Du hast Dich wohl noch nie mit der Funktionsweise von ADCs beschäftigt.


Uin = Uref / 2^Auflösung * ADC-Wert

Bzw. unter Kapitel ADC sollte alles nötige stehen.


Peter

von irgendein Rahul (Gast)


Lesenswert?

>Du hast Dich wohl noch nie mit der Funktionsweise von ADCs beschäftigt.

Oder dem Inhalt des Datenblattes...

von Max D. (jimbo)


Lesenswert?

hallo peter,

danke! nein hab ich noch nicht, aber es gibt ja immer ein erstes mal.
probiere das gleich aus.

gruß, jimbo

von Max D. (jimbo)


Lesenswert?

hallo irgendein rahul. doch habe mich sehr wohl mit dem datenblatt 
beschäftigt. sehr ausgiebig sogar, aber nicht unbedingt mit adc's. ich 
möchte mich nochmal bei allen für die hilfe bedanken, aber auf solche 
antworten kann ich verzichten. also nochmals danke irgendein rahul!!!

von irgendein Rahul (Gast)


Lesenswert?

>ps.: vorherige antwort war nicht gehässig gemeint.

Meine schon... SCNR

Um noch mal nachzutreten: Deine Shift-Taste scheint einen Schaden zu 
haben...

von Max D. (jimbo)


Lesenswert?

sag mal hast du eigentlich irgendein problem.
ich frage hier um hilfe und du gibst dumme antworten. geh doch in einen 
anderen thread und nerv die leute da, oder auch sonst wo.
mal ehrlich bist du mit dem falschen fuß aufgestanden oder was soll das.

von Karl heinz B. (kbucheg)


Lesenswert?

Die Erfahrung zeigt nur, dass jene Leute, die
bei ihren Postings eine gewisse Sorgfalt ausser
acht lassen, es meistens auch in ihren Programmen
nicht allzu genau nehmen.

von irgendein Rahul (Gast)


Lesenswert?

Wenn jemandem die Grundlagen fehlen, wird er komischerweise immer 
schnell patzig, wenn man ihm diesen Mangel vor Augen führt.

Das gilt nicht nur in diesem Fall. Also nicht zu persönlich nehmen.

von Max D. (jimbo)


Lesenswert?

na ja, ich dachte das wäre eine normale frage. ich habe noch soviel 
andere sachen um die ohren, das ich mich jetzt nicht stunden mit diesem 
thema auseinander setzen wollte.
wenn ich dabei den eindruck erweckt habe das ich mich nicht vorher 
ausgiebigst damit beschäftigt habe, dann stimmt das auch. tut mir leid, 
dachte das sei schnell zu lösen.

aber das ist noch lange kein grund irgend welche dofen antworten zu 
geben, meiner meinung nach (nicht auf dich bezogen) und deshalb zu sagen 
das ich keine sorgfallt auf meine programmierung lege find ich schon 
etwas unfair. es ist nur so das man doch nicht bei jeder kleinigkeit von 
null anfangen muss. ist gibt wohl komplexere aufgaben die noch genug 
zeit in anspruchen nehmen.

gruß, jimbo

von Max D. (jimbo)


Lesenswert?

zu irgendein rahul.
ich weiß nicht wer jetzt von uns beiden angefangen hat patzig zu werden.
ja grundlagen fehlen mir mit adc's, sonst denke ich das ich nicht 
unbedingt ein anfänger bin.

aber jetzt ist es auch genung!

danke nochmal, werd mich jetzt damit auseinander setzen.

gruß, jimbo

von Falk (Gast)


Lesenswert?

@Karl heinz Buchegger

> Was hindert dich daran, den Sensor auf eine bestimmte
> bekannte Temperatur zu temperieren (daher Eiswasser
> und kochendes Wasser) und bei der bekannten Temperatur
> einfach mal den ADC Wert direkt auszugeben?

Die Tatsache, dass der Sensor im Controller sitzt un der ein wenig 
wasserscheu ist. UNd es ist auch kein Hummer, also kochendes Wasser ist 
auch icht so doll ;-)

@Max Dm

> bloß ich bekomme von meinem adc den wert 0x5c = 92 so jetzt wüßte ich
> aber nichts damit anzufangen wenn ich mir die tabelle auf seite 17 aus
> dem data sheet anschaue.

Es ist Seite 18!!!!

Und wie gesagt, man muss die Referenzspannung kennen. Ich nehme aml an 
sie ist 3.3V und der ADC arbeitet im 8 Bit Modus.

V_ADC = ADC * Vref / 256
      = 92 * 3,3 /256
      = 1,185 V

Uuups, ich merke gerade, dass ich einen grösseren Fehler in meiner 
Gleichung habe. Peinlich. Man solls halt immer gelcih richtig machen. 
OK, hier die richtige Gleichung.

Theta = -305,1 C + 409 C/V * V_ADC
      = -305,1 + 409 * 1,185
      = 179 C

Hmmm, haut nicht ganz hin, also ist die Referenz anders. Auch Wenn mans 
als 10/12 Ergebnis rechnet funktioniert es nicht.

MfG
Falk





      =





von Karl heinz B. (kbucheg)


Lesenswert?

> Die Tatsache, dass der Sensor im Controller sitzt un der ein wenig
> wasserscheu ist

Dann pack ihn wasserdicht in einen Plastiksack ein.
Wo ein Wille ist, ist auch ...

> UNd es ist auch kein Hummer, also kochendes Wasser ist
> auch icht so doll ;-)

Ist ein Argument. Dann nimm irgendeine andere Temp.
Schlimmstenfalls Körpertemperatur. Sollte doch bei
den meisten Menschen 37 Grad sein und kann mit einem
Fieberthermometer einfach kontrolliert werden.

von Falk (Gast)


Lesenswert?

> Ist ein Argument. Dann nimm irgendeine andere Temp.
> Schlimmstenfalls Körpertemperatur. Sollte doch bei
> den meisten Menschen 37 Grad sein und kann mit einem
> Fieberthermometer einfach kontrolliert werden.

Das ist aber jetzt nicht nett. Du empfiehlts also, den Controller ind 
den A**** zu schieben? ;-)

MFG
Falk


von fieser Rahul (auch Oskar genannt) (Gast)


Lesenswert?

>Das ist aber jetzt nicht nett. Du empfiehlts also, den Controller ind
>den A**** zu schieben? ;-)

Wenn's schön macht...(und funktioniert?!)

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