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