Problem mit 1wire und DS18S20

OP #2536452
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Gast #2536534
Lesenswert?
• ▲
▼
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.
Gast #2536608
Lesenswert?
• ▲
▼
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.
OP #2536712
Lesenswert?
• ▲
▼
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.