Forum: Mikrocontroller und Digitale Elektronik DS2405 1 Wire Auswerten


von Sebastian (Gast)


Lesenswert?

Hallo ich bin mich gerade an das Thema 1 Wire Bus am rantasten.Jetzt 
hatte ich erstmal vor einen DS2405 zu besorgen und diesen dann an den 
Atmega8 anzuschließen.Um eine einfache Temparatur Messung zu 
realisieren.Dann möchte ich die aktuelle Temperatur über ein Display 
ausgeben.

Mein Problem an der ganzen Sache ist, dass ich nicht weiß wie ich die 
ausgelesenden Bits in einen Temperaturwert dann bekomme.Oder muss ich da 
garnichts mehr machen?

Für eine grobe Erklärung wäre ich wirklich dankbar.

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

@Sebastian

Also das Datenblatt hast du noch nicht angeschaut oder?

Wenn ja bist daraus schlau geworden?

Du musst dir ein paar Kernroutinen schreiben, Reset, Bit senden, bit 
empfangen, Byte senden, Byte empfangen.

Solche Routinen findest auch im netz bzw. hier.

Beim 1-wire Reset geht es darum das du die Datenleitung mind. 480µs auf 
low ziehst danach wieder auf high. Ein angeschlossener Sensor muss dann 
die Datenleitung für 60µs-120µs auf low ziehen. Das musst du dann 
Detektieren, weil das der Presence impuls ist.
Also das ist immer das erste wenn du ein Sensor ansprechen möchtest.

Bei der Datenübertragung musst für eine "1" einen kurzen impuls senden 
und
für eine null einen langen. Dabei bezieht sich der impuls wie lange du 
den impuls auf low ziehst.
Hier mal ein paar Bilder zur verdeutlichung.

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

Sorry! hab da was in den Bildern vergessen.

von Sebastian (Gast)


Lesenswert?

Ja das mit dem Reset usw. ist nicht das problem.Die Routine habe ich 
schon geschrieben.

Config 1wire = Portc.7

Dim Sp(9) As Byte

1wreset                                         ' Initialisierung
1wwrite &HCC                                    ' überspringe ROM-Befehl
1wwrite &H44                                    ' Temperaturmessung 
anstoßen

Waitms 500                                      ' warten bis Messung 
fertig

1wreset                                         ' Initialisierung
1wwrite &HCC                                    ' überspringe ROM-Befehl
1wwrite &HBE                                    ' Temperatur auslesen
Sp(1) = 1wread(9)                               ' Daten in ein Array 
lesen

Wait 1

Aber sind die Werte die ich auslese dann schon direkt die aktuelle 
Temperatur oder muss ich diese dann noch mit dem Programm berechnen?Das 
ist die einzige frage die ich habe.

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

http://pdfserv.maxim-ic.com/en/ds/DS2405.pdf

Laut Datenblatt ist das Teil aber kein Temperatursensor sondern ein 
Schalter.

Hier mal ein Bsp. DS18S20 hier müsste man die ersten beiden Bytes 
einlesen.

von Sebastian (Gast)


Lesenswert?

Okay und wenn ich die 2 ersten Bytes auslese ist das dann ohne umrechnen 
direkt die Temperatur?

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

@Sebastian!

Also ich habe das Lowbyte in meiner Routine mit 5 multipliziert.
Dezimal ergibt das dan den Temperaturwert.
Bsp.
     1Eh * 5 = 96h  ist aber dez. 150 entspricht 15°C

Warum mach ich das?
Nun im Datenblatt steht das 0.5°C = 01h ist oder AAh ist 85°C.

Bei Minusgraden muss man das Highbyte berücksichtigen das wird dann FFh.
Zu dem ist das Complement zubilden im Lowbyte dann erst kannst wieder 
mal 5 genommen werden.
Man gibt dann nur das Minuszeichen in abhänigkeit Highbyte's aus.

von Klaus (Gast)


Lesenswert?

@Sebastian!

Also ganz ohne Umrechnen wird es nicht gehen denk mal nur an die Ausgabe 
an ein LCD-Display.
Da musst den Temperaturwert vorher noch in einen Ascii-Code umwandeln.

von Sebastian (Gast)


Lesenswert?

Ja danke für Eure Antworten ich hatte irgendwie nichts gefunden ob es 
umgerechnet werden muss oder nicht.Weil das auslesen usw. stellt ja 
nicht wirklich ein Problem da, solange man die Zeiten beachtet.Habe 
jetzt mir aber mal das Datenblat vom  DS18S20 angeschauen und bin auch 
fündig geworden.Ich werde dann auch nur 1 Byte auslesen weil ich nur 
positive Messergebnisse haben werde.Und eine extra Berechnung für 
genauere Messergebnisse brauche ich auch nicht, da hab ich mir das auch 
gespart.

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.