mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DS18B20 Einstiegsproblem


Autor: Wolfgang (Gast)
Datum:

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

Autor: M. M. (miszou)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

vielleicht hilft das hier weiter.

http://www.peters-sven.de/projekte/ds1820/index.php

Gruß MISZOU

Autor: Joachim Börke (joachimb)
Datum:

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

Autor: Wolfgang (Gast)
Datum:

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

Autor: Joachim Börke (joachimb)
Datum:

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

Autor: Wolfgang (Gast)
Datum:

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

Autor: Joachim Börke (joachimb)
Datum:

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

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.