Forum: Mikrocontroller und Digitale Elektronik DS18S20 / EEPROM auslesen / Wartezeit


von Günter R. (galileo14)


Lesenswert?

Hallo,

ich will mich jetzt mal mit dem EEPROM der DS18S20/DS18B20 befassen und 
diese auslesen bzw. beschreiben. Das Datenblatt sagt ja, daß bei 
Power-Up die EEPROM-Daten schon im Scratchpad bereitliegen. Will man die 
EEPROM-Daten jedoch explizit nochmals auslesen (d.h. vom EEPROM ins 
Scratchpad übertragen), so dauert dies komischerweise einige Zeit. Die 
Datenblätter sagen dazu, man könne nach dem Senden des Auslesebefehls 
"RecallEE" (0xB8) "read-time slots" senden und aus deren Antwort den 
Status herausfinden bzw. feststellen, wann die Übertragung beendet ist.

Das geht so ja auch beim Auslesen einer Temperaturwandlung; dort weiß 
man aber aus dem Datenblatt, daß dies max. 750 ms dauern kann; also kann 
man sich die "read-time slots" sparen und setzt dort einfach einen 
entsprechenden Delay (z.B. 800 ms oder 1000 ms), das wars. Das 
Datenblatt gibt jedoch überhaupt nichts her, wie lange diese Zeit bzw. 
der notwendige Delay beim EEPROM-Auslesen ist. Beim EEPROM-Schreiben 
sind es 10 ms, das steht im Datenblatt, aber fürs Lesen finde ich 
nichts.

Hat sich jemand mal damit befaßt und kennt den sicheren Delay-Wert bzw. 
eine Quelle, wo es steht? Ich konnte nichts finden.

Danke.

Günter

von Jörn P. (jonnyp)


Lesenswert?

Die Wandelzeit hat nix mit der Auslesezeit zu tun. Wandelzeit ist 
abhängig von der Auflösung und beträgt bei 12 Bit eben 750ms. Die Zeit 
für das Lesen ist doch unten im Datenblatt beschrieben. Man kann nach 
einem convert Befehl auch gleich lesen, nur erhält man eben die 
vorhergegangenen Werte.
Simples Beispiel:
Power up und direktes lesen des scratchpads zeigt eine "Temperatur" von 
85,0 Grad, ein Testwert.
Will man die aktuelle Tewmperatur muss man nach der Messung die 
Wandelzeit abwarten.

von Joachim B. (jar)


Lesenswert?

Jörn P. schrieb:
> Wandelzeit ist
> abhängig von der Auflösung und beträgt bei 12 Bit eben 750ms.

aber bei parasitärer Speisung darf auch nicht zu schnell abgefragt 
werden, die internen Kondensatoren müssen sich auch wieder aufladen 
können.

von Route_66 H. (route_66)


Lesenswert?

Jörn P. schrieb:
> Will man die aktuelle Tewmperatur muss man nach der Messung die
> Wandelzeit abwarten.

Hast du die Frage nicht verstanden?

von Peter D. (peda)


Lesenswert?

Günter R. schrieb:
> Das Datenblatt sagt ja, daß bei
> Power-Up die EEPROM-Daten schon im Scratchpad bereitliegen.

So ist es.
"RecallEE" wird daher (fast) jeder als nutzlos abhaken.

von Günter R. (galileo14)


Lesenswert?

Peter D. schrieb:
> Günter R. schrieb:
>> Das Datenblatt sagt ja, daß bei
>> Power-Up die EEPROM-Daten schon im Scratchpad bereitliegen.
>
> So ist es.
> "RecallEE" wird daher (fast) jeder als nutzlos abhaken.

Das mag schon so sein und ist im normalen Betrieb auch richtig. Ich will 
jetzt aber ins EEPROM schreiben (das macht ja wohl auch fast niemand), 
um z.B. eine Sensornummer dort abzulegen. Dabei wurde empfohlen, das 
hatte ich irgendwo gelesen, danach das EEPROM zurückzulesen, um den 
Erfolg der Operation zu verifizieren. Und dafür benötigt man RecallEE. 
Außerdem gehts mir hier auch um ein "akademisches Interesse": warum ist 
die Wartezeit dafür - im Gegensatz zu den anderen Zeiten für 
EEPROM-Schreiben oder die Temp-Wandlungszeit - im Datenblatt nicht 
angegeben? Das ist sonderbar und es wird ja kein Geheimnis sein. Aber 
offensichtlich weiß es keiner. Man kann es ja an einigen Exemplaren 
messen, das ist ja leicht. Wäre aber schön, wenn der Hersteller für 
diesen Wert auch einen definierten Maximalwert angegeben hätte, mit 
dessen Einhaltung man immer auf der sicheren Seite wäre.

Günter

von Carl D. (jcw2)


Lesenswert?

Vermutlich ist die Lesezugriffszeit des EEproms nicht signifikant 
gegenüber den üblichen Zeiten des 1wire-Protokolls.

Aber wenn man es genau wissen will, dann messen.
-EEprom mit 0xAA beschreiben
-Scratchpad mit 0x55 beschreiben
-Recall EEprom ausführen und sofort
-read Scratchpad hinterher
Ich vermute, daß 0xAA in der untersuchten Bytezelle steht.

von Günter R. (galileo14)


Lesenswert?

Carl D. schrieb:
> Vermutlich ist die Lesezugriffszeit des EEproms nicht signifikant
> gegenüber den üblichen Zeiten des 1wire-Protokolls.
>
> Aber wenn man es genau wissen will, dann messen.
> -EEprom mit 0xAA beschreiben
> -Scratchpad mit 0x55 beschreiben
> -Recall EEprom ausführen und sofort
> -read Scratchpad hinterher
> Ich vermute, daß 0xAA in der untersuchten Bytezelle steht.

Hallo Carl,

danke für diese Anregung. Ich denke auch, daß es bltzschnell geht und 
daß dein beschriebenes Experiment so ausgeht. Man weiß dann aber dennoch 
nicht, wie knapp man gerade noch Erfolg hatte oder wie eine 
Exemplarstreuung einen Mißerfolg bringen könnte (klar: sehr theoretische 
Überlegung).

Aber es geht noch einfacher und genauer. Im Datenblatt wird ja 
empfohlen, nach dem Copy-Befehl über "read-time slots" den Status 
abzufragen, damit erfährt man ja, wann die Copy-to-EEPROM-Operation 
abgeschlossen ist. Man nimmt sich einen freien Portpin, der durch 
Initialisierung zunäcbst low ausgibt, setzt ihn nach dem Copy-Befehl auf 
high, liest die read-time slots, bis der Status sagt "abgeschlossen" und 
setzt dann den Pin low. Dann muß man nur per Oszilloskop oder Zähler die 
Impulslänge messen und hat den Wert, und zwar recht genau. Read-time 
slots sind natürlich viel kürzer als das Lesen des gesamten Scratchpads. 
Das werde ich in Kürze mal machen und euch vom Ergebnis berichten.

Aber wie gesagt: ich wundere mich immer noch darüber, warum der 
Hersteller, der die internen Abläufe ja genau kennt, darüber keine 
Angaben macht.

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
Noch kein Account? Hier anmelden.