-
Leider hat mir das wenig weiter geholfen. Kann das Problem an der Hardware Liegen?
Eine andere Frage: Kann ich nicht einfach den Wert der von dem Sensor kommt als Spannung nehmen und damit irgend eine If -then tabelle etc. erstellen?
Beispiel: wenn volt = 3.5 then °C = 25
-
Dim Adw As Word
Dim Wertampin As Single
Dim Umes As Single
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Do
Adw = Getadc(5)
Wertampin = Adw * 0.0025
Umes = Wertampin * 10
Cursor Off
Upperline
Lcd "Umes= " ; Fusing(umes , "##.##") ; "V"
'Print "Umes= " ; Fusing(umes , "##.##")
Lowerline
Lcd "Wertampin= " ; Fusing(wertampin , "#.##") ; "V"
If Wertampin >= 2.3 Then
Lowerline
Lcd "Ue zu hoch "
End If
Waitms 100
Loop
End
Versuche mal diesen Code,
aber denke daran das dieser mit der internen Referenz arbeitet und sich den Wert vom ADC 5 holt.
Mir ist auch aufgefallen das in deinem Code nicht die referenzspannungsquelle angegeben ist.
-
Das ist schön. Umess ist immer zwischen 4.55Volt und 4.8Volt
Wertampin ist zischen 0.45volt und 0.48 Volt.
Was kann ich jetzt daraus schliessen?
Ich danke dir von ganzem Herzen für deine Hilfe.
-
Bascom mag es nicht so sehr, wenn du eine Berechnung zusammen mit einer typenkonvertierung in einer Zeile hast.
Bei "Z1 = 597 - W" hast du W als Word und Z1 as Single. Sowas gibt gelegentlich schöne Fehler in den Ergebnissen. Mache daraus mal zwei Schritte:
Z1 = W
Z1 = 597 - Z1
Ferner fehlt es deinem Programm noch an den Angaben für Stacksize, etc.
Eine endlose IF-THEN-Kette ist der Offenbarungseid eines Programmierers ;-) Mache die zur Veranschaulichung mal eine Grafik aus Messwert und Temperatur. Da es sich hierbei annähernd um eine Gerade handelt, sollte es nicht so schwer sein, eine passende Formel zu finden.
Aber immer Stück für Stück vorgehen ... zuerst den Messwert W auf das Display geben und in Relation zu den Angaben eines "echten" Thermometers setzen und schauen, ob die Resultate stimmig sind, was die Messwertänderung bei Temperaturänderungen angeht.
Gruß MeckPommER
P.S.: möglichst 2-3 Messungen machen bei einem möglichst großen Temperaturunterschied ... und dann deine Temperaturen und Messwerte posten ... wäre doch gelacht, wenn wir daraus keine Formel hinbekommen :)
-
Probier das mal:
$regfile "m48def.dat"
$crystal = 8000000
Config Pinc.4 = Input
Portc.4 = 0
Config Portb = Output
Config Portd = Output
Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0
Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto
Config Portc.0 = Input
Dim W As Word
Dim Z1 As Single
Dim Temp As Single
Do
Portb.1 = 1
W = Getadc(2)
Z1 = 597 - W
Temp = Z1 * 0.5
Temp = Temp + 25
Cls
Locate 1 . 1
Lcd Temp
Locate 2 . 1
Lcd W
Waitms 300
Loop
Verändern sich Deine Werte überhaupt mit der Temperatur?
mfg
Pidi
-
Wie MeckPommER schon sagte musst du dir jetzt min und Max Werte holen.
Dann werden wir schon eine Formel finden.
Dabei kannst du deinen Sensor mal in eine Wasserdichte Tüte Packen und ins Eiswasser ( sollte ca0°C haben) reinhalten. Dabei darau achten das der Sensor direkt an der Tüte anliegt und keine Luft dazwischen ist. Messwert notieren. Dann das gleiche noch einmal bei ca 50°C warmen Wasser.
Schön das erstmal soweit hinhaut....
-
Vielen Dank, das ihr mir so gut Helft.
Ich habe jetzt gerade mal von 8°C bis 50°C ein paar Werte ausgelesen:
8.5°C = 710
23.3°C = 758
25°C = 786
29.1°C = 805
40°C = 885
50°C = 929
Hoffentlich können wir (Ihr) damit etwas anfangen. Mathe war leider noch nie mein Spezialgebiet...
P.S. Pidi, ja die Werte ändern sich. Aber dein Programm zeigt als Tep auch immer nur -38.5 bei 8°C
P.P.S. die gesammte Elektronik befindet sich in einem Acrylglas Gehäuse. Die Temperatur unteschiede sind so einfach zu machen. Ich habe sogar so weit aufgeheizt, bis mir der Kleber wieder geschmolzen ist....
-
Sind das Widerstandswerte oder Spannungen in mV?
Mach noch mal bitte eine Skizze der Schaltung, dabei reicht mir die Beschaltung deines ADC Ports.
-
Hallo JeyBee,
na, da sind wir von falschen werten ausgegangen.
Versuch mal das hier:
$regfile "m48def.dat"
$crystal = 8000000
Config Pinc.4 = Input
Portc.4 = 0
Config Portb = Output
Config Portd = Output
Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0
Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto
Config Portc.0 = Input
Dim W As Word
Dim Z1 As Single
Dim Temp As Single
Do
Portb.1 = 1
W = Getadc(2)
Z1 = W
Z1 = 786 - Z1
Temp = Z1 * 0.189
Temp = Temp + 25
Cls
Locate 1 . 1
Lcd Temp
Locate 2 . 1
Lcd W
Waitms 300
Loop
-
Die Wete sind die Werte "W"
Grobe Skizze:
+5V
|
|
-
| |
| | 2.2K
| |
-
|
|
------------ zum ADC pin (Portc.2)
|
|
-
| |
| | Lm 335
| |
-
|
|
GND
Hilft dir das?