mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DS2405 1 Wire Auswerten


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sorry! hab da was in den Bildern vergessen.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian (Gast)
Datum:

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

Autor: Klaus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.