Forum: Mikrocontroller und Digitale Elektronik Temperaturabhängiges Timing-Problem mit DS18B20


von Daniel D. (datenstau)


Angehängte Dateien:

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.

von Daniel D. (datenstau)


Angehängte Dateien:

Lesenswert?

So, jetzt geht es ;)
Anscheinend ist es wichtig darauf zu achten, dass das Schreiben eines 
Bits  möglichst genau so lange dauert wie das Lesen.
Mit der angehängten 1wire.c geht es.

von Peter D. (peda)


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

von Daniel D. (datenstau)


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.

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.