Forum: Mikrocontroller und Digitale Elektronik DS1820 läuft weg


von Pete K. (pete77)


Lesenswert?

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         
13
        else
14
          sprintf(buffer, "FC:%X;%X;%2i.%i",  gSensorIDs[i][0], gSensorIDs[i][1], cel, cel_frac_bits);
15
        //  uart_puts(buffer);
16
        strcpy(buffer_lcd[i],buffer);
17
      }
18
        else uart_puts_P("CRC Error (lost connection?)");                                          
19
    }
20
    // und neue Conversion starten
21
    for (i=0;i<dsSensors;i++)
22
    {  
23
      DS18X20_start_meas( DS18X20_POWER_EXTERN, &gSensorIDs[i][0]);
24
    }
25
26
    messStart=0;
27
  }

Hat jemand so ein Verhalten schon einmal gesehen?

von Peter D. (peda)


Lesenswert?

Zeile 42.

(ohne Source keine Hilfe möglich).


Peter

von Alex D. (allu)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Marvin (Gast)


Lesenswert?

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

von Alex D. (allu)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Pete K. (pete77)


Angehängte Dateien:

Lesenswert?

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 :-)

von Wolfgang-G (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

Wolfgang-G schrieb:

> Bin ich mit meiner Verfahrensweise auf dem Holzweg?

Nein.

von Pete K. (pete77)


Lesenswert?

Ich habe den ATMega mal ausgetauscht, aber daran lag es nicht.

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.