Temperaturabhängiges Timing-Problem mit DS18B20

OP #2965310
Lesenswert?

Hallo zusammen,

Ich versuche mit einem AtMega8 einen DS18B20 auszulesen.
Bei Raumtemperatur klappt das auch, jedoch bricht bei Temperaturen 
größer als 60°C die Verbindung zusammen.
Ab einer bestimmten Temperatur kann ich nicht mal mehr die Seriennummer 
auslesen, es kommen nur noch Einsen über den 1Wire-Bus.

Durch herumspielen und verlängern der Timingwerte konnte ich die 
Grenztemperatur zwar jetzt bis auf 80°C erhöhen, aber der Sensor sollte 
doch bis über 100°C funktionieren?

Da ich von einem Defekt des Temperatursensors ausging, habe ich 
mittlerweile auch einen weiteren 18B20 besorgt, der jedoch die selben 
Symptome zeigt.

Ich benutze das Pollin Evaluationsboard. Der mega8 läuft mit 16Mhz, UART 
mit 9600 Baud funktioniert auch.
Angehängte Dateien:
#2965486
Lesenswert?

Daniel D. schrieb:
1
  //2us auf 0 ziehen
2
  W1DDR |= W1PIN;
3
  _delay_us(5);
4
  W1DDR &= ~W1PIN;
5
  
6
  //innerhalb von 15us bit lesen
7
  _delay_us(19);
8
  uint8_t b= W1IN&W1PIN;

Wie kommst Du darauf, daß 5+19=24µs innerhalb 15µs sind?

Mach aus der 5 ne 2 und aus der 19 ne 12, dann stimmen die Kommtentare 
und somit auch das Timing (14 ist nämlich innerhalb 15).


Peter
OP #2965563
Lesenswert?

Peter Dannegger schrieb:
> Wie kommst Du darauf, daß 5+19=24µs innerhalb 15µs sind?
>
> Mach aus der 5 ne 2 und aus der 19 ne 12, dann stimmen die Kommtentare
> und somit auch das Timing (14 ist nämlich innerhalb 15).

Ja, das sieht komisch aus, besonders mit den Kommentaren dazu :D

Das kommt davon, dass ich irgendwann angefangen habe wahllos mit den 
Zeiten rumzuspielen, in der Hoffnung es würde besser werden... (von 60°C 
auf 80°C hab ich mich ja scheinbar gesteigert :D)

Die Kommentare waren meine ursprünglichen Zeiten frei nach dem 
Datenblatt. Da hatte ich glaube ich mal 2us + 12us stehen.

Ich glaube das Hauptproblem war tatsächlich, dass das Lesen und 
Schreiben bzw. das Schreiben einer 0 und einer 1 unterschiedlich lange 
gedauert haben.

Jetzt mit der oben angehängten 1wire.c geht es, auch wenn dort 20us auch 
schon deutlich über der Spezifikation sind... Ich werde das mal 
anpassen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren