DS 18 B20 Temperatur auslesen

Moin Moin,

es ist mir ja schon fast etwas Peinlich. :cold_sweat:
Aber ich finde den Fehler nicht warum “er” mir immer nur sagt “Keine weiteren Adressen.”

Der Code stammt von http://playground.arduino.cc/Learning/OneWire-DE aber ich finde meinen Fehler nicht.

 #include <OneWire.h>
     
    // DS18S20 Temperaturchip i/o
    OneWire ds(10);  // an pin 10
     
    void setup(void) {
      // inputs/outputs initialisieren
      // seriellen port starten
      Serial.begin(9600);
    }
     
    void loop(void) {
      byte i;
      byte present = 0;
      byte data[12];
      byte addr[8];
     
      if ( !ds.search(addr)) {
          Serial.print("Keine weiteren Addressen.\n");
          ds.reset_search();
          return;
      }
     
      Serial.print("R=");
      for( i = 0; i < 8; i++) {
        Serial.print(addr[i], HEX);
        Serial.print(" ");
      }
     
      if ( OneWire::crc8( addr, 7) != addr[7]) {
          Serial.print("CRC nicht gültig!\n");
          return;
      }
     
      if ( addr[0] == 0x10) {
          Serial.print("Gerät ist aus der DS18S20 Familie.\n");
      }
      else if ( addr[0] == 0x28) {
          Serial.print("Gerät ist aus der DS18B20 Familie.\n");
      }
      else {
          Serial.print("Gerätefamilie nicht erkannt : 0x");
          Serial.println(addr[0],HEX);
          return;
      }
     
      ds.reset();
      ds.select(addr);
      ds.write(0x44,1);         // start Konvertierung, mit power-on am Ende
     
      delay(1000);     // 750ms sollten ausreichen
      // man sollte ein ds.depower() hier machen, aber ein reset tut das auch
     
      present = ds.reset();
      ds.select(addr);    
      ds.write(0xBE);         // Wert lesen
     
      Serial.print("P=");
      Serial.print(present,HEX);
      Serial.print(" ");
      for ( i = 0; i < 9; i++) {           // 9 bytes
        data[i] = ds.read();
        Serial.print(data[i], HEX);
        Serial.print(" ");
      }
      Serial.print(" CRC=");
      Serial.print( OneWire::crc8( data, 8), HEX);
      Serial.println();
    }

Hast du nicht bei Pin 11 Kabel drin?

Nein ist leider Pin 10 habe es gerade noch mal geprüft. :)

Teste doch diese Lib http://milesburton.com/Main_Page?title=Dallas_Temperature_Control_Library

Also ich bekomme diese Ausgabe:

Keine weiteren Addressen. R=28 A2 B3 EB 3 0 0 14 Gerät ist aus der DS18B20 Familie. P=1 90 1 4B 46 7F FF 10 10 92 CRC=92 Keine weiteren Addressen. R=28 A2 B3 EB 3 0 0 14 Gerät ist aus der DS18B20 Familie.

Ja. Kann ich auch nur empfehlen. Da man hat man das alles schön gekapselt und sie unterstützt so praktische Dinge wie nicht-blockierenden Zugriff. Da ist man dann für das Delay selbst verantwortlich und kann die Verzögerung mit millis() machen.

Aber fang erst mal ruhig blockierend an. Am besten in dem du den "Tester" Sketch bei den Beispielen laufen lässt. Der zeigt dir alle Sensoren und deren Adressen an.

Es gibt auch eine verbesserte OneWire Library: http://www.pjrc.com/teensy/td_libs_OneWire.html Kann man gleich dazu installieren

Fireman-HH: es ist mir ja schon fast etwas Peinlich. :cold_sweat: Aber ich finde den Fehler nicht warum "er" mir immer nur sagt "Keine weiteren Adressen."

Tja, anstelle eines PullUp-Widerstands, der 4.7 KILO-Ohm haben sollte, einen Widerstand mit 4.7 Ohm zu verwenden, sollte Dir wirklich peinlich sein.

Es sollte dir aber nicht peinlich sein, ein SainSmart UNO zu verwenden :D