Hallo,
ich habe einen Mega644, der u.a. ein Beinchen benutzt, um 1-wire
Temperatursensoren auszulesen.
Das Auslesen klappt soweit (mit Unterstützung der Routinen von Martin
Thomas), die Werte werden alle 30 Sekunden ausgelesen und danach eine
weitere Conversion gestartet, diese dann 30 Sekunden später wieder
ausgelesen. Pullup 4k7 ist vorhanden.
Nun zeigt mir beim Start der Sensor noch den richtigen Wert an, steigt
dann aber über ein paar Minuten auf ca.34 Grad an.
Ich habe es mit mehreren Sensoren probiert, alle zeigen das gleiche
Verhalten.
Hier die ISR:
1
ISR(TIMER1_COMPA_vect)// Aufruf jede Sekunde
2
{
3
4
if(!has_changed)
5
{has_changed=1;
6
7
}
8
9
messStart++;
10
11
LED_TESTPORT^=(1<<LED_ERRPIN);
12
}
und die Hauptschleife:
1
// *** Messungen starten ***
2
if(messStart>=30)
3
{
4
5
// ************** DS1820 auslesen **************
6
for(i=0;i<dsSensors;i++)
7
{
8
if(DS18X20_read_meas(&gSensorIDs[i][0],&subzero,
9
&cel,&cel_frac_bits)==DS18X20_OK)
10
{
11
if(subzero)
12
sprintf(buffer,"FC:%X;%X;-%2i.%i",gSensorIDs[i][0],gSensorIDs[i][1],cel,cel_frac_bits);// gSensorIDs[i][1]= 1. Byte der Seriennummer
Temperaturanstieg, ja. Hatte zuviel Leben auf dem 1-Wire-Bus. Auch wenn
der DS1820 nicht gemeint war, hat er sich mit erhitzt. Außerdem braucht
das Teil 2-Wire oder 1-Wire mit einer kunstvollen
Versorgungsumschaltung.
Gruß allu
Der Sensor erwärmt sich nicht, wenn man keine Wandlungen macht.
Da können auf dem Bus noch 1000 andere Devices rumwuseln.
Während der Wandlung zieht er 1mA, das sind dann 5mW Heizleistung.
Macht man die Wandlungen schnell hintereinander sieht man einige zehntel
Grad Erwärmung an Luft.
Macht man die Wandlung nur alle 10s, ist die Erwärmung kleiner als die
Auflösung, d.h. <0,0625° beim DS18B20.
Wenn der Sensor heiß meldet, einfach mal anfassen, ob er wirklich heiß
wird.
Wenn er sich erwärmt, ist vielleicht die Software falsch (Zeile 42).
Peter
Ja, das Verhalten habe ich schoneinmal gesehen. Ein Kumpel hatte einen
mit gut 7.5V betrieben und sich dann gewundert, wieso der Sensor so warm
geworden ist. :)
Gruesse
Marvin
Peter Dannegger schrieb:
> Der Sensor erwärmt sich nicht, wenn man keine Wandlungen macht.> Da können auf dem Bus noch 1000 andere Devices rumwuseln.
Jeder Sensor muss seine eigene Adresse suchen, egal oder er gemeint ist
oder nicht. Und obwohl ich keine 1000 sondern nur pro Sekunde 2 mal nach
mehreren möglichen 1-Wire-Schlüsseln gesucht habe ... Rest steht oben
...
Gruß allu
Alex D. schrieb:
> Jeder Sensor muss seine eigene Adresse suchen, egal oder er gemeint ist> oder nicht.
Dabei kann er aber nicht 1mA ziehen, sondern höchstens nur einige µA.
Denn das geht auch ohne VCC, d.h. er versorgt sich allein über den
Pullup.
Es kann allerdings sein, daß in fehlerhafter Software der Pin hart auf
high gezogen wird, während er Low sendet. Dann fließt ein ordentlicher
Strom und der Chip erwärmt sich stark.
Daher meine Vermutung auf einen SW-Fehler.
Peter
Anbei der Source-Code, allerdings habe ich ein paar Sachen weggelassen,
die noch andere Sensoren auswerten (alle nicht am 1-wire Bus).
@Marvin: Es liegen gemessene 5V (ok, 4,98V) am Sensor an :-)
Bei Verwendung des DS18B20PAR hatte ich den Effekt, dass bei Betrieb mit
3,3V die Messung bis 50/60°C problemlos lief. Bei höheren Temperaturen
wurde wirres Zeug vom Fühler gesendet. Bei einer Spannung von ca. 4V
waren die Messwerte dann i.O.(hat sich offensichtlich erl.)
>Jeder Sensor muss seine eigene Adresse suchen, egal oder er gemeint ist>oder nicht.
Geht es auch anders? Ich hatte mal die Fühler (DS18B20) jeweils einzeln
angehängt und die 64-Bit Seriennummer ausgelesen.
Nun wollte ich, da ich die Nummer von den Fühlern kannte, nach Eingabe
der jeweiligen Seriennummer den Fühler auslesen, aber ohne Erfolg.
Bin ich mit meiner Verfahrensweise auf dem Holzweg?
MfG