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.
@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.
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.
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.
Okay und wenn ich die 2 ersten Bytes auslese ist das dann ohne umrechnen direkt die Temperatur?
@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.
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.