Forum: Mikrocontroller und Digitale Elektronik Was brauche ich von der Seriennummer DS18B20?


von Christian B. (chris001)


Lesenswert?

Hallo Leute!

Ich brauche nochmal eure Hilfe!
Ich möchte für eine Heizungssteuerung eine Schaltung mit mehreren 
DS18B20 aufbauen, die über einen Atmega8 ausgewertet werden.

Jetzt zu meinem Problem:

Wenn ich nur einen Sensor anschließe funktioniert alles. 
Beispielprogramm unter Bascom:

---
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
---

Um jetzt mehrere Sensoren auszulesen brauche ich ja die Seriennummer. 
Hab ich auch ausgelesen. Was brauche ich denn von der Nummer alles?
Reicht das die letzten zwei Stellen? Oder brauche ich alles was da 
ausgelesen wird. z.B 10E7A9710108006D?

Wie binde ich das in das oben stehende Programm ein?

1wreset
 1wwrite &H6D <------????
 1wwrite &H44
 1wreset
 1wwrite &H6D <-----????
 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

Ich dachte event. so. Aber es funktioniert nicht.

Kann mir jemand helfen?

Schö mit Ö...

Chris...

von Peter D. (peda)


Lesenswert?

Laut Datenblatt müssen alle 8 Bytes stimmen.

Du kannst aber auch den ROM-Suchalgorithmus benutzen. Dann mußt Du nur 
einmal feststellen, in welcher Reihenfolge die Sensoren gefunden werden.


Peter

von Christian B. (chris001)


Lesenswert?

Hi Peter!

Also so?

1wreset
 1wwrite &H0108006D <------????
 1wwrite &H44
 1wreset
 1wwrite &H0108006D <-----????
 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

Schö mit Ö...

Chris

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Christian Betzen schrieb:
> 1wwrite &H0108006D <------????

Äh, nööö.
Ich habe zwar keine Ahnung von Bascom, aber 1wwrite schreibt sicherlich 
nur ein Byte und nicht mehr.

Du musst also schon die komplette Seriennummer als Einzelbytes senden.
Im DS18S20-Datenblatt steht auch drin, was Du da senden musst.

1. Reset-Pulse
2. Skip-ROM
3. Messung durchführen
4. Reset-Pulse
5. Match-ROM
6. ROM-ID
7. READ-SCRATCHPAD
8. Daten lesen
9. weiter mit 4 bis alle Sensoren eingelesen wurden


Das ganze ab 4. kannst Du auch mittels SEARCH-ROM machen. Nach jedem 
Schritt ist genau ein Sensor aktiv und kann nach dem Scratchpad befragt 
werden.

von Tobi D. (fanti)


Lesenswert?

jup, habs grad ausprobiert,

du musst die komplette adresse in 2er päckchen schreiben, weil immer nur 
1 byte gesendet wird

nun noch bei deinem ersten programm das "skip rom" durch "match rom" 
ersetzen und es sollte klappen

von Pete K. (pete77)


Lesenswert?

Wie sollen die Sensoren denn befestigt werden und wo?

Du hast von Steuerung geschrieben, oder meinst Du eher ein Datalogger?

von Christian B. (chris001)


Lesenswert?

Die Sensoren sollen als Rohranlegefühler an den Heizungsrohren befestigt 
werden.
Um Vor- und Rücklauf zu messen.

von Wolfgang S. (wsm)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe vor einiger Zeit mal ein Multi-DS18... Progamm mit Bascom 
geschrieben. Genau das was du suchst.

Das Grundprogramm wurde dazu von mir modifiziert.

Da nur 1-dimensionale Arrays in BASCOM möglich sind, habe ich dies mit 
einem Trick umgangen.

Da die Messkurve nicht linear ist, habe ich auch noch eine 
Fehlerkorrektur ergänzt. Somit wird die quadratische Messkurve 
linearisiert.


Viel Erfolg.

W.

von Wolfgang-G (Gast)


Lesenswert?

>Fehlerkorrektur ergänzt. Somit wird die quadratische Messkurve
>linearisiert.
nur mal so-- womit vergleichst Du die Messkurve?
MfG

von Wolfgang S. (wsm)


Lesenswert?

Im Datenblatt siehst du eine quadratische Fehlerkurve als Abweichung von 
der linearen Zuordnung der temperatur zu den Messwerten.

Wenn du diese Fehlerkurve mathematisierst und den somit berechenbaren 
Fehler als Korrekturwert benutzt, dann wird deine Messkurve linear.

W.

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.