PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum DS18S20!



Peter_Holzer
15.02.2007, 21:22
Hallo an Alle!

Ich habe vor mit einem DS18S20 und einem PIC16F628A eine Temperaturabhängige Steuerung zu entwickeln. Ich hab mir dazu beim Conrad eine DS18S20 ausgesucht. Das Programm dazu möchte ich in Assembler verfassen. Der DQ Pin wird mit einem 4k7 Widerstand gegen +5V gezogen. Leider ist jetzt die ganze Sache mit dem Temperatur messen aufwändiger als ich sie mir vorgestellt hatte. Aber das ist ja immer so! :-)

I hätte dazu jetzt ein paar Fragen, und zwar:

Erstens:

Ich hab mich heute intensiv mit dem Datenblatt auseinandergesetzt und bin zu folgendem Entschluss gekommen: Als erstes muss der PIC einen 480µs langen Resetimpuls (0V) schicken, danach ist die DQ Leitung wieder auf +5V. Anschließend antwortet der DS18S20 mit einem 60-240µs andauernden Precense Puls (0V). Danach ist die DQ Leitung wieder auf +5V und der DS18S20 ist aktiv. Anschließend muss man den Befehl READ-ROM [33h] zu dem DS18S20 schicken. Jeder Impuls muss min. 60µs andauern. Danach sendet der DS18S20 einen 64-Bit Code in welchem der 8-Bit Family Code, der 48-Bit Seriennummer und die 8 CRC-Bits stecken. Jetzt ist der DS18S20 bereit für Funktion Kommandos.
Jetzt schicke ich den Befehl CONVERT T [44h] zu dem DS18S20. Jeder Impuls muss wieder 60µs anliegen. Anschließend wertet der DS18S20 die Temp. aus und speichert sie im Scratchpad (Byte 0 u. 1). Das kann bis zu 750ms dauern. Anschließend muss der PIC den Befehl READ-SCRATCHPAD [BEh] zum DS18S20 schicken. Jetzt sendet der DS18S20 die Daten Binär, beginnend mit dem LSB bis zum MSB, zum PIC. Jeder Impuls liegt wieder 60µs an und zwischen den Impulsen ist eine Pause von 1µs zur Entprellung. Danach muss man sie auf dem PIC speichern und man hatt die aktuelle Temp. im Byte 0 u. 1 des Scratchpads stehen. Danach kann man sie weiterverarbeiten.

Meine Frage jetzt:
STIMMT DAS SO WIE ICH DAS VERSTANDEN HABE?


Zweitens:

Wie schicke ich mit einem PIC zum Beispiel den CONVERT T [44h] Befehl? Muss ich nur den Binärcode [01000100] zum DS18S20 schicken, wobei jedes Bit wieder 60µs anliegen soll und zwischen den Bits 1µs Pause sein soll? Oder wie genau funktioniert das?


Ich Danke euch schon jetzt für eure Mühe und Hilfe!
MFG Peter Holzer

schally
13.04.2007, 11:46
Hi,
wollte mal wissen ob du nun schon weiter gekommen bist weil ich sitze genau vor diesem Problem...

mfg
schally

Peter_Holzer
13.04.2007, 18:25
Hi,

Ja ich habe das Problem schon gelöst!
Es funktioniert genauso, wie ich es beschrieben habe!

Mfg Peter

schally
13.04.2007, 18:31
hi,
hast du vvl noch den Code?

mfg
schally

Peter_Holzer
13.04.2007, 18:35
Hi,

Könnte ich dir den Code per e-Mail schicken?
Wäre bequemer für mich.

Mfg Peter

schally
13.04.2007, 20:13
Hi
habe dir meine Email Adresse per PN geschickt.

mfg
schally

hardware.bas
11.08.2010, 15:18
Ich habe soeben den ersten DS18S20 an einem Atmega8 in Betrieb genommen und es funktionierte unter Zuhilfenahme der BASCOM-Hilfe im RN-Wissen auf Anhieb. Temperaturanzeige in 0,5 grad-Schritten, alles ok.
Um nun die Genauigkeit zu erhöhen will ich die Bytes 7 und 8 nutzen. Leider fand ich dazu bisher kein BASCOM-Code, eine normale Formel würde mir jedoch auch reichen. Hat da jemand eine Quelle? VG Micha

hardware.bas
13.08.2010, 04:47
Jetzt laufen auch Mehrere an einem Bus. Problemlos, dank den BASCOM-Codeschnipseln hier im RN-Wissen. Das Problem mit der höheren Genauigkeit mittel Byte 7 und Byte (hab die Bytes, wie in den Codeschnipseln von 1 gezählt) konnte ich durch Verendung von Variablenvielfchen des Formel aus dem Datenblatt und entsprechender Variablendimensionierung in BASCOM lösen. VG Micha

linux_80
13.08.2010, 13:20
Hi,
kannst du hier etwas von Deinem Bascom-Code reinstellen, damit man sieht was Du gemacht hast?

Rone
13.08.2010, 23:23
Hallo!


Das Problem mit der höheren Genauigkeit mittel Byte 7 und Byte (hab die Bytes, wie in den Codeschnipseln von 1 gezählt) konnte ich durch Verendung von Variablenvielfchen des Formel aus dem Datenblatt und entsprechender Variablendimensionierung in BASCOM lösen. VG Micha

Sch... Rechtschreibreform!

MfG
Rone

hardware.bas
14.08.2010, 05:53
Fuer Rone:
Fuer die Tastatur will ich mich nicht entschuldigen, jedoch bin ich froh hier in einem Elektronikforum zu sein, was mich sehr interessiert, meine volle Kreativitaet fordert und meinen Beruf darstellt. Im Gegensatz zum frueheren stinklangweiligen Deutschunterricht. VG ein Praktiker
Für linux_80:
Die Lösung habe ich auf einem anderen Rechner, ich kanns jedoch übertragen. Dabei muss ich bemerken, daß ich keinen Anspruch auf Professionalität stelle. Die Lösung kann sicherlich noch wesentlich verschlankt werden:
Gezählt habe ich die Bytes ab 1, so daß ich die Formel aus dem Datenblatt wie folgt entnommen habe:
temperatur = byte1 - 0,25 + (byte8 - byte7)/byte8
Funktioniert natürlich nicht direkt, daher habe ich Folgendes gemacht:
temperatur = byte1*100-25+((byte8*100-byte7*100)/byte8)
Ergebniss ist Temperatur in C. mal 100.
Leider hab ich den anderen Rechner nicht hier, einige Variablen musste ich als WORD und INTEGER dimensionieren, da es negative, als auch über 255 liegende Werde gibt. VG Micha

hardware.bas
14.08.2010, 05:57
Fuer Rone:
Entschuldigung, wieder die Tastatur... nicht "Werde", sondern "Werte".
Das mit der Rechtschreibreform.... ist auch meine Meinung. VG Micha

hardware.bas
28.11.2010, 12:33
Um nicht weitere Treads zu eröffnen nutze ich Diesen, da es zum Thema
gehört. Also, die kutze Schilderung des Sachverhaltes:
Ich möchte 3 Stück 1wire-Sensoren DS18S20 an einen Atmega8
anschliessen. Da die Verkabelung einerseits sternförmig erfolgt, anderer-
seits genug Ports am AVR vorhanden sind, will ich auf die Adressierbarkeit
verzichten und 3 Ports auf 1wire dimensionieren. Wie kann ich jedoch nun
festlegen, welche "1wire-Prozedur" für welchen Port gilt, oder muss man
die entsprechenden Ports erst für der Ausleseprozedur dimensionieren.
Hat da jemand Erfahrungen? Vielen Dank und viele Grüsse. Micha

hardware.bas
28.11.2010, 17:49
Ich denke gerade, dass obige Frage einfacher gestellt werden kann:
Ist es möglich, am AVR mehrere 1wire-Busse zu betreiben und
wie würde das funktionieren? Vielen Dank und viele Gruesse. Micha