-
DS1820 Wert verarbeiten
Hallo Leute,
ich bin gerade dabei mir eine Temperaturegelung aufzubauen. Als Temperaturfühler dient dazu ein DS 1820.
Ich habe das folgende prog aus dem www mal auf meinen Controller
übertragen, das funktioniert auch alles einwandfrei.
$regfile = "m8def.dat"
$crystal = 3686411
' LCD konfigurieren Port auf Ausgabe setzten und Pin's entsprechend zuordnen
Ddrd = &HFF
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM durch Software realisiert
Config 1wire = Portc.5
Dim Ar(2) As Byte
Cls
Do
1wreset
1wwrite &HCC
1wwrite &H44
1wreset
1wwrite &HCC
1wwrite &HBE
Ar(1) = 1wread(2)
Waitms 500
'Locate 1 , 1
'Lcd Hex(ar(2)) ; Hex(ar(1))
Locate 2 , 1
Shift Ar(1) , Right , 1
Lcd Ar(1)
Loop
End
Soweit so gut, nun möchte ich den Ausgelesenen Wert "AR" auswerten.
Wenn ich aber folgenden Code ergänze
If Ar > 10 then
Upperline
LCD "Temp. zu hoch"
end if
Nur so funktioniert das nicht weil der Wert AR irgendwie umgewandelt werden muss.
Aber wie?
bin für jede Hilfe und Programmbeispiele dankbar.
Neutro.
-
Du musst nach dem Starten der Konvertierung (1wwrite &HCC , 1wwrite &H44) dem Sensor etwas Zeit geben, fertig zu werden.
Hier solltest du ein Wait von 750ms einfügen, bvor du die Daten abfragst (1wwrite &HCC , 1wwrite &HBE). Ist zwar unschön, aberdas kann man später noch ändern.
Umgewandelt hast du den Wert schon irgendwie.
Shift Ar(1) , Right, 1 teilt dir den Wert durch 2. Aber das höchstwertige bit der Temperatur steht im niedrigstwertigen bit von Ar(2) und zusätzlich noch das Vorzeichen.
Deswegen geht man meistens hin und macht erst ein
Temp_int=MAKEINT(Ar(1),Ar(2)) eingefügt und dann wird geshiftet.
Dann kannst du auch abfragen, ob Temp_int größer als 10 ist.
Gruß
Rolf
-
@for_ro: Danke für die Hilfe, jetzt funktionierts.
Allerdings ist der Temp_int Wert doppelt so hoch wie die Temperatur; ist ja auch klar weil noch nicht durch zwei geteilt wurde. Aber das lässt sich ja leicht
umrechnen.
MfG
Neutro