Hallo
an meinem ATMEGA644P soll ein DS18S20 angeschlossen werden.
Die Board-Spannung beträgt 3V, liegt also an der untersten Grenze des
DS1820. Da ich festgestellt habe, dass dass der DS zwar ansprechbar ist,
jedoch keine Temperaturmessung mehr vornimmt, will ich ihn mit 5V, die
ich auch noch zur Verfügung stehen hab, versorgen.
Mein Problem:
Wie soll ich den DS mit dem AVR verbinden?
Zur Zeit mache ich es direkt, ich weiß aber nicht ob das auf dauer
vielleicht schlecht für den AVR ist, da im Datenblatt als max.
Eingangsspannung Vcc + 0.5V steht.
Viele Grüße
Richi
Der Sensor zieht nur runter, nicht hoch, und ist non-parasitär betrieben
mit Vih=2,2V zufrieden. Wenn der Pullup-R also an 3V hängt, dann darf
der DS mit 5V betrieben werden.
Danke für deinen Hilfe, das habe ich wohl im Datenblatt übersehen.
Ein weiteres Problem hätte ich noch:
Wenn ich den Convert_T Befel an den DS sende, dann kann man ja laut
Datenblatt erkennen, wann fertig gemessen ist. Nur wenn ich ein Bit
lese, ist das sofort 1, was fertig symbolisiert. Beim Ausesen der
Temperatur kommt immer der Standardwert 85°C.
Kann es sein, dass man vor dem Bit-lesen noch was machen muss?
Viele Grüße
Richi
Richard W. schrieb:> Kann es sein, dass man vor dem Bit-lesen noch was machen muss?
Dem DS sagen dass er gemeint ist. Sonst hört der nicht zu. Dass die
Leitung 1 ist besagt i.d.R. nichts, denn das ist sie im Ruhezustand
immer.
"If the DS18S20 is powered by an external supply, the master can issue
read-time slots after the Convert T command and the DS18S20 will respond
by transmitting 0 while the temperature conversion is in progress and 1
when the conversion is done."
So steht es im Datenblatt.
Vor dem Bit-Lesen wird der Convert T Befehl gesendet. Muss ich dann
wirklich neu adressieren? Welchen Befehl muss ich dann vor dem Bit-Lesen
senden?
Manual:
Step 1. Initialization
Step 2. ROM Command
Step 3. DS18S20 Function Command
Zu 2: Wenns nur einer ist, dann SKIP ROM.
Insgesamt wird die obige Sequenz zweimal fällig:
A: Messen (Function Command CONVERT T)
-750ms warten-
B: Auslesen (Function Command READ SCRATCHPAD)
> A: Messen (Function Command CONVERT T)> -750ms warten-> B: Auslesen (Function Command READ SCRATCHPAD)
Ich will es eben ohne 750ms warten machen, es ist ja der max-Wert.
Ich meine was ich nach dem CONVERT T machen muss, damit er mir sagt, ob
er fertig ist.
Richard W. schrieb:>> A: Messen (Function Command CONVERT T)>> -750ms warten->> B: Auslesen (Function Command READ SCRATCHPAD)>> Ich will es eben ohne 750ms warten machen, es ist ja der max-Wert.>> Ich meine was ich nach dem CONVERT T machen muss, damit er mir sagt, ob> er fertig ist.
Vergiss das nachfragen. In der Zeit in der du nachfragst ist der IC auch
schon fertig.
Nach dem CONVERT_T wartest du eine Zeit lang und holst einfach das
Ergebnis ab. Kommando READ_SCRATCHPAD.
Natürlich musst du den Chip addressieren oder eben einen SKIP-ROM
schicken, wenn du nur einen hast.
Karl heinz Buchegger schrieb:> Vergiss das nachfragen. In der Zeit in der du nachfragst ist der IC auch> schon fertig.
Öhm, das sind ein paarhundert Millisekunden, nicht Nanosekunden, und der
AVR ist ein bischen schneller als die ersten Zuses.
Laut Manual kann man bei nicht-parasitärem Betrieb den Sensorstatus
pollen (1-Bit Leseoperation). Ist aber eher untypisch und ich würde
nicht ausgerechnet damit anfangen.
In der Datei Thermo.c wird auch nur gewartet, zwar nur 100ms (erscheint
mir kurz).
Mir ist klar dass es mit 750ms warten getan wäre, aber die Methode mit
dem Pollen dauert nicht so lang. Mit den 1-Bit-Lesevorgängen haut es bei
mir nicht hin. Es kommt ja immer 1 obwohl der DS noch nicht fertig ist.
Richard W. schrieb:> In der Datei Thermo.c wird auch nur gewartet, zwar nur 100ms (erscheint> mir kurz).
Das geht, wenn man den DS18B20 verwendet, und ihn auf 9-Bit Genauigkeit
runterstellt.
> mir nicht hin. Es kommt ja immer 1 obwohl der DS noch nicht fertig ist.
Das passiert, wenn du den DS nicht korrekt ansprichst und er dich
ignoriert.
A. K. schrieb:> Karl heinz Buchegger schrieb:>>> Vergiss das nachfragen. In der Zeit in der du nachfragst ist der IC auch>> schon fertig.>> Öhm, das sind ein paarhundert Millisekunden, nicht Nanosekunden, und der> AVR ist ein bischen schneller als die ersten Zuses.
Du hast recht.
Der Grund warum das bei mir nie ein Problem war, besteht darin, dass ich
mit der Sequenz
while( 1 ) {
read
start Messung
mache irgendwas anderes
}
arbeite und den Chip sowieso nur alle 2 bis 3 Sekunden abfrage.
Schneller brauch ich die Temperatur nicht und der Selbsterwärmung des IC
ist es auch zuträglich, wenn er nicht ständig arbeiten muss.
Richard W. schrieb:> In der Datei Thermo.c wird auch nur gewartet, zwar nur 100ms (erscheint> mir kurz).
Erhöhe die 100 auf 1000
Die Demo soll zeigen, wie man den IC anspricht und keine fertige
Applikation sein.
Ich will, ich will, ich will - mit dem Fuss aufstampf ;-).
Dann mach es halt so, aber mach es richtig. Da keiner ausser dir weiss
was du machst, weiss auch keiner was du falsch machst.
Am richtig machen scheiterts ja auch.
Ich habe mich jetzt dazu entschlossen, doch die 750ms zu warten.
Ist auch 750mal so leicht. Auf die 100 ms kommts jetzt auch nicht drauf
an.
Vielen Dank an alle!!!
Gruß
Richi
Richard W. schrieb:> Am richtig machen scheiterts ja auch.> Ich habe mich jetzt dazu entschlossen, doch die 750ms zu warten.> Ist auch 750mal so leicht. Auf die 100 ms kommts jetzt auch nicht drauf> an.>> Vielen Dank an alle!!!>>> Gruß> Richi
[justMyTwoCents]
Im übrigen... ich habe nach frustrierenden 2 Tagen proggen, nochmal 1
Tag schaltungsaufwand... und dann ärgern über "ab und zu" falsche Werte
(7,5°) nach ca. einem halben Jahr "Nerven lassen" die DS18x20 in die
Tonne getreten und bin auf DS75/ML75 umgestiegen.... Eine Leitung mehr
opfen für ein gescheites TWI, war mir der ganze Ärger mit den DS18
Dingern einfach nicht wert! ;)
[/justMyTwoCents]