DS18B20-Fühler

Hallo,

ich möchte eine Temperaturmessung mit 2 DS18 Fühlern realisieren. Als Ausgabe möchte ich ein 2zeiliges LCD-Display nutzen. In der oberen Zeile soll die Innentemperatur angezeigt werden und in der unteren die Außentemperatur. Da man beide Fühler an einen Pin anschließen kann/soll (oneWire), frage ich mich, wie ich die Fühler dann auseinander halten, bzw. trennen, kann? Bis jetzt bekomme ich nur einen Wert in der oberen Zeile angezeigt und ich weiß nicht von welchem der beiden Fühler dieser stammt.

Gruß Andre

Hast du dir die Beispele der Libraris ma angesehen.

Da geht alles daraus hervor, auch mit mehreren Sensoren.

Hast du da nen Link zu?

Google defekt? Schau mal hier.

Gruß Tommy

apro1974: Hast du da nen Link zu?

Kennst du Google nicht ?

Ok, hier:DS18B20

apro1974: Da man beide Fühler an einen Pin anschließen kann/soll (oneWire), frage ich mich, wie ich die Fühler dann auseinander halten, bzw. trennen, kann?

z.B. über die eindeutige ID die jeder Sensor hat.

Bis jetzt bekomme ich nur einen Wert in der oberen Zeile angezeigt und ich weiß nicht von welchem der beiden Fühler dieser stammt.

Du schreibst leider nicht, welche lib Du benutzt. Miles Burton hat eine DallasTemperature und Paul Stoffregen eine OneWire.

HotSystems hat es schon geschrieben. Nutze ggfls. die Beispiele.

Beide libs funktionieren und bieten in der IDE unter DATEI - BEISPIELE - runterscrollen / Beispiele aus eigenen Bibliotheken / und dort nachschauen - eine Möglichkeit sich mit den Sensoren zu beschäftigen.

Da Du auch keinen Code zur Verfügung stellst, kann Dir nur empfohlen werden.

Hi

Dann will ich auch Mal ...

Die Sensoren haben eine einzigartige ID - meine 64 Bit lang. Nach dieser ID wird beim Suchen - gesucht. Dadurch ist sichergestellt, daß die Sensoren, sofern sich Diese nicht ändern, immer in gleicher Reihenfolge gefunden werden. (ist im Datenblatt beschrieben, wie Das GENAU funktioniert). Dein Problem ist, daß Dir die IDs nicht bekannt sind und Du auch nicht weißt, in welcher Reihenfolge Diese gefunden würden - keine Angst, weiß ich auch nicht :). Das ist auch der Grund, warum nach Austausch eines Sensor dieser sich 'irgendwo' einsortiert - eben nach Seiner ID. Solange Du aber die Sensoren nicht austauscht und Dir Keiner davon verstirbt, bleibt die Reihenfolge immer gleich - Du kannst also in der Lib mit dem Index (quasi die Nummer des Fund) arbeiten. Welcher Das nun ist ... halte Einen Sensor in der Hand - Der, Der jetzt warm wird, ist genau Dieser.

... selber habe ich die User-Bytes missbraucht um dort eine eigene ID einzubringen, mit Der ich die Sensoren unterscheide. So kann ich z.B. an der Heizung einen ausgefallenen Sensor '#12' durch einen neuen DS18B20 ersetzen, Dem ich die ID #12 einprogrammiert habe.

MfG

(deleted)

Peter-CAD-HST: du kannst den Sensor jeweils über einen Pin einlesen.

Warum sollte er das?

Gruß Tommy

postmaster-ino: ... selber habe ich die User-Bytes missbraucht um dort eine eigene ID einzubringen, mit Der ich die Sensoren unterscheide. So kann ich z.B. an der Heizung einen ausgefallenen Sensor '#12' durch einen neuen DS18B20 ersetzen, Dem ich die ID #12 einprogrammiert habe.

MfG

Interessant. Könnte man das auch den weniger programmierbegabten Leuten mit vertretbarem Aufwand näherbringen?

mfg

Frank

Hi

Schaue Dir die Beispiele an, ob Du damit alle ausgelesenen Daten angezeigt bekommst.
#0 Temperatur Low-Byte
#1 Temperatur High-Byte
#2 TH oder UserByte 1
#3 TL oder UserByte 2
#4 Config
#5 0xFF
#6
#7 0x10
#8 CRC (Prüfsumme)

Anmerkung: #0 + #1 x 256 (oder #0 || #1<<8 ) ist die Temperatur in 1/16tel Grad C
Davon lassen sich #2, #3, #4 auch wieder zurück schreiben.

TH und TL werden beim ALARM_Search (0xEC) ausgewertet - nur Sensoren, Deren Temperatur oberhalb TH oder unterhalb TL ist, reagieren bei dieser Suche - man findet ‘direkt’ Sensoren, Die auf ein Problem hindeuten.
Wenn man Das nicht braucht, kann man die Bytes auch für eigene Zwecke missbrauchen.

MfG

bastler_th: Interessant. Könnte man das auch den weniger programmierbegabten Leuten mit vertretbarem Aufwand näherbringen?

Dann frage ich dich, warum nimmst du dir nicht ein einfacheres Hobby, bei dem wir dir nicht alles vorlesen müssen ?

(deleted)

bastler_th:
Könnte man das auch den weniger programmierbegabten Leuten mit
vertretbarem Aufwand näherbringen?

DATEI - BEISPIELE - BEISPIELE AUS EIGENEN BIBLIOTHEKEN - DallasTemperature

  • SetUSerData
  • UserDataDemo
  • UserDataWriteBatch

(deleted)

HotSystems: Dann frage ich dich, warum nimmst du dir nicht ein einfacheres Hobby, bei dem wir dir nicht alles vorlesen müssen ?

Danke für diese tolle Antwort. Kannst Du Deine schlechte Laune bitte woanders ablassen? Ich hatte nur eine Frage gestellt.

ofg

Edit: Danke an alle Anderen die konstruktive Antworten gegeben haben.

bastler_th: Danke für diese tolle Antwort. Kannst Du Deine schlechte Laune bitte woanders ablassen? Ich hatte nur eine Frage gestellt.

ofg

Edit: Danke an alle Anderen die konstruktive Antworten gegeben haben.

Na gerne immer wieder. Und ich habe nur darauf geantwortet.

Was hat das mit schlechter Laune zu tun, wenn ich dir klar machen möchte, dass man bei diesem Hobby auch lernen muss. Anders wird das nix.

Hi

Auch, wenn Es keine dummen Fragen gibt - so lässt sich durchaus erkennen, daß Sich zuvor keinerlei Gedanken dazu gemacht wurden, bis auf Einen: Bevor ich auch nur eine Sekunde meiner wertvollen Zeit verplempre, rotze ich das Fragment einer Frage, möglichst noch ohne Fragezeichen, in ein Forum und beschwere mich dann auch noch, daß da drauf Keiner eine mir schmeckende Antwort liefert.

Muß hier nicht, weder im Ganzen noch in Teilen, zutreffen, wäre aber schön, wenn Du Das Mal ‘gedanklich durchkaust’ - wie sich ‘die andere Seite’ so fühlt, wenn selbst die Beispiele zum Sensor in der IDE, Die die Lösung beinhalten könnten, noch nicht Mal gesucht wurden.
Zumindest entnehme ich Deinem Post nicht, daß Du bei dem Beispiel nicht zurecht kamst :wink:

MfG

Super, funktioniert.

#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS A0

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int heizung1 = 6;
int heizung2 = 7;

void setup()
{
  lcd.begin(16, 2);
  sensors.begin();
}

void loop()
{
  {
    sensors.requestTemperatures();
    lcd.setCursor(0, 0);
    lcd.print("innen:");
    lcd.setCursor(7, 0);
    lcd.print(sensors.getTempCByIndex(0));
    lcd.setCursor(11, 0);
    lcd.print("GradC ");
    lcd.setCursor(0, 1);
    lcd.print("aussen:");
    lcd.setCursor(7, 1);
    lcd.print(sensors.getTempCByIndex(1));
    lcd.setCursor(11, 1);
    lcd.print("GradC ");
    delay(1000);
  }
  { if (sensors.getTempCByIndex(0) < 27)
    {
      digitalWrite(heizung1, HIGH);
    }
    else if (sensors.getTempCByIndex(0) > 28)
    { digitalWrite(heizung1, LOW);
    }
  }
  {
    if (sensors.getTempCByIndex(0) < 26)
    {
      digitalWrite(heizung2, HIGH);
    }
    else if (sensors.getTempCByIndex(0) > 28)
    { digitalWrite(heizung2, LOW);
    }
  }
}

Sollte mal ein Fühler defekt sein, muss ich nur schauen, wo der neue sich dann ein reit (Index 0 oder 1).

Eine Frage stellt sich mir nach wie vor. Kann das LCD Display kein Gradzeichen (°) darstellen? Oder muss ich da ne andere Tastenkombi für drücken?
Macht es einen Unterschied, wenn ich die Fühler auf 9bit umstelle? Falls ja, wie ging das?

(deleted)