Temperaturfühler DS18B20

Begonnen von pic18, 24.11.2022, 12:44:03 CET

⏪ vorheriges - nächstes ⏩

pic18

Hallo, ich bekomme seit einiger Zeit  falsche Temperaturwerte vom DS18B20. Hat hier jemand Erfahrung damit gemacht? Es werden mehrere Fühler abgefragt. (bis zu 20 St.) Jeder Fühler liefert dann einen Temperaturwert von 85°C was einen Bin-Wert von 101010.. entspricht. Die Serial-Nr. sowie die EEProm Werte werden richtig ausgelesen, was auf ein richtiges Timing beim Lesen und Schreiben hinweist. Das Programm hatte früher die richtigen Werte geliefert. Falls Interesse besteht werde ich die entsprechenden Programmteile hochladen.
Viele Grüße
Pic18

Peter

Hallo
Habe ein ähnliches Problem mit dem Temperaturfühler.
Habe nur einen aber der liefert mir ab und zu eine
Temperatur von -0.5 Grad C.
Und dann plötzlich stimmt die Temperatur wieder. Habe bis jetzt auch
noch keine Lösung gefunden. Habe schon im Code danach gesucht und die Hardware
gegen alles möglich abgeschirmt. Der Fehler bleibt trotzdem. Auch mit einem anderen DS18B20 Typ
das selbe problem. Woodoo Zauber  lachen

pic18

bin noch auf Arbeit, -0,5°C klingt nach Timing Problem. Evtl. rufst Du einen Interrupt während des Lesens auf? Kannst du dir auch noch gleichzeitig die Serial-Nr. anzeigen lassen?
Wenn Du magst, dann schicke ich Dir meinen Programm-Code hoch.

Peter

Ja das wird meistens gesagt das es am Timing liegt. Habe
aber alle Interupts wärend der Auslesung des DS abgeschaltet.
Ändert sich aber nichts. Nein lasse mir nicht die Ser.Nr. anzeigen.
Wofür auch, bei einem brauche ich die nicht. Klar Code kannst du immer
hochladen, dann können wir da mal drüber schauen. Ist immer besser wenn man
ein Problem hat, das man den Code hochläd.
Da ich alle 10min die Temperatur abfrage und das 24Std/7Tage lang, kommt
das am Tag etwar 1-2 mal vor. Manchmal erst nach mehreren Tagen.
Wenn es ein Timming problem wäre dann müsste es öfter auftreten.

pic18

Vielen Dank, ich glaube ich habe den Fehler gefunden. Ich hatte einen Pointer-Fehler. In case ds18b20Conv hatte ich ow_sn(0) aufgerufen, und in ow_sn( ) eine Verzweigung auf Skip_Rom (ausgeklammert), was wohl falsch war.

Code: c
char sn_liste[sn_max][8];
Code: c
void ow_sn(char* sn1)
{
    ow_reset();

    //if (!*sn1) write_byte(Skip_Rom);
    //else
    {
        write_byte(Match_Rom);
        writeln_ow(sn1);
    }
}

Code: c
            case ds18b20Conv:    //Temperatur einlesen vorbereiten
                    //ow_sn(0); //FALSCH mit (0) sollte ..write_byte(Skip_Rom) ausgeführt werden
                    ow_reset(); //NEU
                    write_byte(Skip_Rom);//NEU
@Peter, ich bin immer noch der Meinung dass das Timing nicht zu 100% passt. Ich kann dir gerne meine Zeiten schicken.

Peter

Welche Zeiten meinst du ?
Hier mal der Code zum einlesen der Temperatur:

Ow_Reset(PORTC, 0)                   ' Onewire reset signal
      Ow_Write(PORTC, 0, 0xCC)             ' Issue command SKIP_ROM
      Ow_Write(PORTC, 0, 0x44)             ' Issue command CONVERT_T
      Delay_ms(750)

      Ow_Reset(PORTC, 0)
      Ow_Write(PORTC, 0, 0xCC)             ' Issue command SKIP_ROM
      Ow_Write(PORTC, 0, 0xBE)             ' Issue command READ_SCRATCHPAD

      temp =  Ow_Read(PORTC, 0)
      temp = (Ow_Read(PORTC, 0) << 8) + temp

      Display_Temperature(temp)

Das ist eigentlich alles. Unter Display_Temperature(temp) wird nur der Wert
in Grad umgewandelt. Kann man eigentlich nicht viel falsch machen.

pic18

Die Fühlerabfrage läuft seit über eine Woche ununterbrochen fehlerfrei. Ich frage alle paar Sekunden die Temperaturwerte ab und gebe sie auf LCD-Anzeige und über Internetabfrage aus. Der Temperaturwert von 85°C wird angezeigt bei einer fehlende Spannungsversorgung (VDD) bzw fehlenden Pull-up Widerstand. Die -0,5°C zeigen eine fehlende Masseverbindung oder Datenverbindung beim DS18S20 (mit 0,5°C Auflösung)
ds18b20.png

Peter

Wenn da irgendo eine Verbindung fehlt dann müsste doch
der Fehler ständig da sein. Ist aber nur ab und zu da.
Hört sich nach einem Wackelkontakt an. Da hab ich ja was
zu suchen um den Fehler zu finden. Ich glaube am schnellsten geht
es wenn ich die Platine neu mache und schauen ob der Fehler weg
ist.
Danke dir zuerst einmal für den Tip. Werde berichten was draus wurde.

Peter

picass

Wackelkontakt = kalte Lötstelle
Die müsste vorwiegend im Bereich der Zuleitung des Datensignals liegen.
Was sagt denn ein Oszillogramm des Datensignals? Dessen Amplitude könnte ggf. in einem kritschen Grenzbereich liegen.
Grüße, picass

pic18

Ich meine wenn es nur zeitweise Aussetzer sind, das es ein Timing Problem ist. Die Delay - Funktion war die von Microchip? ich kann mich erinnern, das ich da früher Probleme hatte. Außerdem müssen auch Taktzyklen zum Ein- und Ausspringen der Funktion dazugezählt werden, was je nach Taktfrequenz auch eine entsprechende Zeit in Anspruch nimmt. 
Ich kann ja heute Abend mal eine Unterprogramme hochladen.


Peter

Werde mir mal die Zeiten anschaun. Ist ja nicht der erste den ich verbaue und
nur bei dem gibt es Probleme. Werde mal die Übertragung zum Sensor mit loggen und
schauen ob ich da was sehe.
Benutze ja die eigenen Librarys die im Compiler drin sind für das 1-Wire Protokoll. Und damit gbt
es eigentlich keine Probleme und auch keine Zeitprobleme. Ich glaube nicht das es ein Timeing problem
ist aber werde es auch überprüfen.

Schnellantwort

Name:
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau