Ich verstehe noch nicht das Protokoll der Datenübertragung. Bitte korrigiert mich, wenn ich etwas falsch darstelle. Um z.B. eine Temperaturwandlung zu starten, muss das Kommando 44h (0100 0100b) von einem µC gesendet werden. Ist es richtig, dass man, beginnend mit dem letzten Bit, den Ausgang eines µC-Pin (z.B. P1.0), an dem DQ des DS18B20 hängt, für 15µs (für 0) auf H setzt, dann 1µ auf L, wieder 15µs auf H (für 2. Null), 1µs auf L, jetzt 60µs auf H (für 1), 1µs auf L usw. bis alle 8 Bit gesendet wurden? Danach 750ms warten, bis die Wandlung beendet ist. Nun P1.0 auf Eingang schalten, um die Temperatur-Daten zu empfangen. Dabei entstehen für mich weitere Probleme: - woher weiß man, wann der DS18B20 zu senden beginnt - da die Daten vermutlich nach dem gleichen Schema, wie bei dem Senden, eintreffen, muss man unterscheiden, ob ein Impuls 15µs oder 60µs lang ist. Wie macht man das programmiertechnisch? Ich würde mich freuen, wenn mir jemand auf die Sprünge helfen könnte. MfG Wolfgang
Hi vielleicht hilft das hier weiter. http://www.peters-sven.de/projekte/ds1820/index.php Gruß MISZOU
Hallo Wolfgang, Du mußt zuerst einen Reset auf dem Bus auslösen. Anschließend mußt Du den gewünschen Baustein mit seiner Seriennummer adressieren, oder allen Bausteinen am Bus mitteilen, daß sie adressiert sind. Dann erst kommt das Komando zum Wandeln der Temperatur. Nach ca. 750 ms ist der bzw. sind die Thermometer dann mit der Wandlung fertig. Jetzt löst Du einen Reset aus, adressierst den Baustein und liest die Daten des Bausteins aus. Eine gute Informationsquelle sind die Applikationsberichte von Dallas oder aber der Bericht AVR318 von Atmel. Atmel beschreibt dort sehr genau, wie man mit einem AVR-Prozessor den one-wire Bus ansprechen kann. Gruß Joachim
>Anschließend mußt Du den gewünschen Baustein mit seiner Seriennummer adressieren, < gut gesagt, aber ich beschäftige mich mit der Materie z.Zt. noch auf einer viel tieferen Kenntnisstufe. Deshalb hatte ich in meiner Frage als Beispiel nur mal ein Kommando (44h) angeführt, welches in den DS18B20 geladen werden soll.Ist mein Ansatz richtig? Alle Beispielprogramme, die ich mir bisher angesehen habe, gehen davon aus, dass der Anwender die Funktionsweise und das Datenprotokoll schon verstanden hat. Deshalb bin ich an weiteren Hinweisen interessiert. (Vorzugweise unter Anwendung eines MSP430 oder AT892051) MfG Wolfgang
Hallo Wolfgang, man kann das Thema natürlich auch anders aufrollen. 1. Die Bausteine sind wired-or verknüpft. Wenn also kein Baustein etwas tut, ist der Pegel "H". Der Master und jeder Slave-Baustein können den Pegel auf "L" setzen. 2. Nur der Master darf senden. Er kann einen Reset senden, in dem er den Bus für 480µs auf L setzt. Anschließend ist 15-60µs Ruhe und dann setzt ein (bzw. mehrere) Slaves für 60 bis 240µs einen "presence"-Puls. 3. Der Master kann auch eine "0" senden. Dabei setzt er den Bus 60-120µs auf L. 4. Wenn der Master eine "1" senden möchte, setzt er den Bus für 1-15µs auf L und wartet dann bis zum Ende des Time Slots. 5. Wenn der Master ein Bit vom Slave lesen möchte, dann sendet er eine "1" und beobachtet den Bus 0-45µs nach Ende seiner Sendung. Wenn der Bus auf H bleibt, sendet der Slave eine "1"; bleibt der Bus auf L, sendet der Slave eine "0". Der Slave wird von sich aus nicht "senden", sondern immer nur bitweise antworten. Gruß Joachim
Hallo Joachim, danke für deinen Beitrag. Das ist verständlich und so hatte ich es mir gewünscht. Jetzt geht bei mir auch langsam das Licht an. Da muss ich gleich noch einige Fragen nachschieben: - was ist der "presence"-Puls und welche Bedeutung hat er? - Was versteht man unter Time Slots (kommt ja beides auch im Datenblatt vor) Nun hoffe ich, dass ich die Beispiele besser verstehe und werde demnächst mal versuchen, mich mit dem DS18B20 zu unterhalten. MfG Wolfgang
Hallo Wolfgang, der presence pulse ist die Antwort des Slave auf einen Reset. Man kann das als Anwesenheitssignal betrachten. Wenn nach einem Reset kein presence pulse kommt, ist am Bus kein Baustein angeschlossen. Ein time slot ist ein Zeitfenster in dem vom Master ein Bit auf den Bus geschrieben wird. Ein time slot ist zwischen 60 und 120 µs lang. Viel Erfolg bei deinen Versuchen. Für Fragen zur Software kann ich Dir den Applikationsbericht AVR318 von Atmel wärmstens empfehlen. Gruß Joachim
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.