Hallo Leute! Ich weiß das es zu diesem Thema jede menge infos zu im Internet gibt, wo man sich alles raus erlesen kann. Ich stehe hier aber im Moment echt auf m Schlauch. Ich seh wahrscheinlich den Wald vor lauter Bäumen nicht. Das Problem. Habe hier ne kleine Schaltung aufgebaut mit einem Atmega32 nem Display und drei Temperatursensoren von Typ DS18S20. Die Sensoren möchte ich jetzt auslesen und die Werte dann mal im Display ausgeben. Leider Funktioniert das nicht. Der code im Anhang ist in Bascom geschrieben. Die ausgegebenen Variable "T1" bleibt auf 0. Die Variable sc(1) hat den Wert 90 und sc(2) 171. Ich hoffe das mir hier einer weiterhelfen kann. Tschau Chris001
Die Funktion 1wverify wählt zwar den entsprechenden Sensor an, dient aber nur zur statischen Kontrolle ob der Sensor noch vorhanden ist, sich meldet. Die Funktion kann per Err ausgewertet werden. Zum gezielten auswerten eines Messwertes eines von vielen Sensoren muss der entsprechende 1wire-Befehl ausgewählt werden der speziell diesen Sensor anspricht. Unmittelbar danach kommt der Lesebefehl &HBE. Bin momentan nicht in meiner Hobbystube, deswegen ist dies hier nur aus dem Kopf und ohne genauere Hinweise. Kommen etwas später.
So hier die bessere Sequenz zum ansprechen eines gezielten Sensors. Ich benutzte anstelle deiner AR1(1) hier Idb(1) was Sensor-ID von Sensor B bedeutet. Anstatt verwirrende zahlen zu benutzen benutzte ich ID von Sensor A oder B oder C usw. Ebenso verwende ich Mwb als Synonym für Messwert Sensor B. 1wreset 1wwrite &H55 1wwrite Idb(1) , 8 1wwrite &HBE Mwb(1) = 1wread(9) Dein ermitteln vom Temperaturwert auf deine Art habe ich auch dort wo es auf keine Kommastellen ankommt. Allerdings ist der Wert abgerundet. Hier noch ein Ausschnitt bezüglich meiner Sensorüberwachung per 1wverify. 1wverify Idb(1) 'überprüfe ob Sensor funktioniert If Err = 1 Then 'wenn nein setze Fehlerflag Set Fehler.2 Else Reset Fehler.2 End If Fehler wird als Byte definiert und solange es kleiner 8 bzw bis max 8 Sensoren sind, passen die fehlerbits beqquem in die Variable Fehler. Mit entsprechend richtiger Behandlung der Variable Fehler.stelle kann ersehen werden ob ein oder mehrere Sensoren Probleme machen und welche es sind.
Ach so, du solltest die Wartezeit zwischen alle Sensoren sollen die temperaturermittlung starten und dem Auslesen eine längere Wartezeit als 200 mS anwenden. Ich nutze sicherheitshalber 700 mS.
Hallo ich da! Hab den Code in dem Sub jetzt mal so abgeändert: Messen: Disable Interrupts ' Alle angeschlossenen DS1820 zum Messen veranlassen 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 700 1wreset 1wwrite &H55 1wwrite Ar2(1) , 8 1wwrite &HBE Sc(1) = 1wread(9) If Sc(9) = Crc8(sc(1) , 8) Then T1 = Makeint(sc(1) , Sc(2)) T1 = T1 / 2 End If Locate 1 , 1 Lcd Sc(1) ; " " ; Sc(2); Locate 2 , 1 Lcd T1 ; " Grad Celsius" Enable Interrupts Return Leider funktioniert es nicht. In der Variable T1 steht 0. In sc(1) steht 190 und in sc(2) steht 174 Hab k.a. warum das nicht 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.