www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DS1820 fragen zur Programmierung


Autor: Oliver D. (highspeed-oliver)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

da ich mal eine device nach Datenblatt und ohne Anleitung programmieren 
wollte, möchte ich gerne wissen was T command heisst.
Im Datenblatt steht geschrieben, das  für ein initiieren einer 
Temperatur Messung und das Analog Digital umsetzen ein Convert T [44h] 
ausgelöst werden muss. (Heisst das ich muss in einem bestimmten Abstand 
auf dem 1 Wire Bus  1000 0100 senden?) Sorry das ich frag, aber ich habe 
noch nie mit soetwas gearbeitet.

Was darf ich darunter vestehen?


Während des Umwandlungsprozesses erhalte ich dann ein 0 Signal. Wenn er 
fertig ist ne 1.
Die Temperatur steht in 2x 1 byte register.

korrekt?

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver D. wrote:
> Temperatur Messung und das Analog Digital umsetzen ein Convert T [44h]
> ausgelöst werden muss. (Heisst das ich muss in einem bestimmten Abstand
> auf dem 1 Wire Bus  1000 0100 senden?) Sorry das ich frag, aber ich habe
> noch nie mit soetwas gearbeitet.
>
> Was darf ich darunter vestehen?

Ja, du musst zuerst ein Resetsignal- und dann die 0x44 schicken. Die 
bits werden pulsbreiten moduliert übertragen. Für die dauer der 
Temperaturmessung hält der DS1820 die Datenleitung auf low. Wenn er 
fertig ist, setzt er sie wieder auf high.

> Während des Umwandlungsprozesses erhalte ich dann ein 0 Signal. Wenn er
> fertig ist ne 1.
> Die Temperatur steht in 2x 1 byte register.

> korrekt?

Wenn die 0,5Grad genauigkeit genügt, ja.

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Niels Hüsken wrote:

> Ja, du musst zuerst ein Resetsignal- und dann die 0x44 schicken. Die

Ich vergass das SKIP-Rom-Kommando zwischen Reset und T-Kommando. Die 
Reihenfolge lautet also:

Resetsignal (low >500ms)
0xcc senden
0x44 senden und auf high warten...

Dann pad auslesen:
Resetsignal (low >500ms)
0xcc senden
0xbe senden und 9Byte vom bus lesen.

Autor: Oliver D. (highspeed-oliver)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok,

und wie lange sind die Zeiten zwischen den Befehlen?

ALso wenn ich es richti verstanden habe muss ich z.B.
das 44h command senden, welches so ausschaut:
1000 0100

Dann sende ich erst ne 1, dann 0, ...Wie lang ist der Abstand zwischen 
den einzelnen bits?

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver D. wrote:
> ALso wenn ich es richti verstanden habe muss ich z.B.
> das 44h command senden, welches so ausschaut:
> 1000 0100

Bitte überprüfe dieses Bitmuster nochmal. Es stimmt nicht ganz.

Um eine "1" zu senden, hälst du den Buspin für 1-15us low. Ich hab 7us 
genommen. Um eine "0" zu senden hälst du den Buspin für 60-120us low. 
Ich hab hier 75us eingesetzt. Zwischen den einzelnen Bits sollten 70us 
liegen. Die Bytes werden lsb-first geschickt (niedrigst-wertiges Bit 
zuerst).

Ich muss oben gemacht Angaben leider wieder korrigieren: ein Resetsignal 
ist 500us lang nicht 500ms.

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nehm mal das lese-prozedere vorne weg:

Du legst den Datenpin für 1us auf low. Danach auf hochohmig, dann lässt 
du 4us verstreichen. Hat der Temperatursensor die Datenleitung jetzt 
noch auf low gezogen, ist das eine "0". Ansonsten "1".

Bevor du das nächste Bit lesen kannst, musst du erst warten, bis der 
Temperatursensor den Datenbus wieder freigibt, also high führt UND 80us 
warten.

Autor: Christoph S. (mixer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Warte gerade auf eine bestellung mit einem ds18s20 aber weis noch nicht 
genau, wie ich ihn ansteuere. Das mit dem bitmuster ausgeben ist mir 
klar, aber gibt es da einen befehl oder muss ich da jedes bit einzeln 
mit sbi und cbi ausgeben und dazwischen eine warteschleife schalten??

MFG Mixer

P.S.: Assembler, bitte!

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph S. wrote:

> Das mit dem bitmuster ausgeben ist mir
> klar, aber gibt es da einen befehl oder muss ich da jedes bit einzeln
> mit sbi und cbi ausgeben und dazwischen eine warteschleife schalten??

Sei mir nicht böse, aber das ist eine selten dämliche Frage. Wie soll 
denn so ein Assemblerbefehl deiner Meinung nach aussehen? Wozu hätte ich 
dann mir die Mühe gemacht und das Timing das Busses beschrieben? 
kopfschüttel

Es gibt ein DS1820-Pendant mit SPI-Interface, das ja soziemlich jeder 
Atmel-Kontroller unterstützt. Das wäre zwar einfacher, aber du würdest 
immernoch nicht drumherumkommen, die Bits einzeln zu verschicken.

> P.S.: Assembler, bitte!

pfft...programmier gefälligst selber!

Autor: Christoph S. (mixer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin hald noch Anfänger!!

Das mit dem Senden kann ich mir ungefähr vorstellen, aber wie kann ich 
die daten empfangen?
Immer eine bestimmte zeit warten, dann mit sbis und sbic den zustand am 
eingang abfragen und dafür in einem register ein bit setzen?
Oder geht das anderst?
Vielleicht auch ne blöde frage, aber was will man als anfänger sonnst 
machen?

MFG Mixer

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.