INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
ds18B20
28.01.2016, 11:29 (Dieser Beitrag wurde zuletzt bearbeitet: 28.01.2016 11:30 von eddykett.)
Beitrag #1
ds18B20
Hallo,
ich möchte möchte eine Temperatur mit einem ds18B20 messen und ausgeben.
Ich hab mir Diverse Lib`s runtergeladen, unter anderen die Dallastemperaturecontrol.
Jetzt bin ich gerade dabei einen Testversuch zu starten.

Das Programm ist Dallastemperaturecontrol/Single.

Den Anschluß habe ich im Normal Mode gemacht (richtig angeschlossen) und den Widerstand (4,7K Ohm) zwischen +5V und den Datenpin gelötet.

So nur noch das Programm draufspielen und los gehts dachte ich ....

Denkst du dir Puppe Angry

Das Programm läuft zwar, und er sagt mir auch das Parasite Power is OFF, aber was mich wundert ist das der Sensor warm wird (ca 60 Grad C ) und dann natürlich auch diesen Wert ausgibt Huh

Ich werde heute Abend mal den Sensor in Parasite Mode Testen was dabei rauskommt.

Hat denn jemand evtl eine Ahnung was ich verkehrt gemacht habe weil es im Normal Mode nicht richtig Funktioniert ?

Danke schon mal im Voraus.
Mit freundlichen Grüßen Eddykett

Hier ist noch der Code dazu den ich benutzt hab.

Code:
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// arrays to hold device address
DeviceAddress insideThermometer;

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // locate devices on the bus
  Serial.print("Locating devices...");
  sensors.begin();
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");

  // report parasite power requirements
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");
  
  // assign address manually.  the addresses below will beed to be changed
  // to valid device addresses on your bus.  device address can be retrieved
  // by using either oneWire.search(deviceAddress) or individually via
  // sensors.getAddress(deviceAddress, index)
  //insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };

  // Method 1:
  // search for devices on the bus and assign based on an index.  ideally,
  // you would do this to initially discover addresses on the bus and then
  // use those addresses and manually assign them (see above) once you know
  // the devices on your bus (and assuming they don't change).
  if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
  
  // method 2: search()
  // search() looks for the next device. Returns 1 if a new address has been
  // returned. A zero might mean that the bus is shorted, there are no devices,
  // or you have already retrieved all of them.  It might be a good idea to
  // check the CRC to make sure you didn't get garbage.  The order is
  // deterministic. You will always get the same devices in the same order
  //
  // Must be called before search()
  //oneWire.reset_search();
  // assigns the first address found to insideThermometer
  //if (!oneWire.search(insideThermometer)) Serial.println("Unable to find address for insideThermometer");

  // show the addresses we found on the bus
  Serial.print("Device 0 Address: ");
  printAddress(insideThermometer);
  Serial.println();

  // set the resolution to 9 bit (Each Dallas/Maxim device is capable of several different resolutions)
  sensors.setResolution(insideThermometer, 9);

  Serial.print("Device 0 Resolution: ");
  Serial.print(sensors.getResolution(insideThermometer), DEC);
  Serial.println();
}

// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
{
  // method 1 - slower
  //Serial.print("Temp C: ");
  //Serial.print(sensors.getTempC(deviceAddress));
  //Serial.print(" Temp F: ");
  //Serial.print(sensors.getTempF(deviceAddress)); // Makes a second call to getTempC and then converts to Fahrenheit

  // method 2 - faster
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.print(" Temp F: ");
  Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit
}

void loop(void)
{
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");
  
  // It responds almost immediately. Let's print out the data
  printTemperature(insideThermometer); // Use a simple function to print out the data
}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.01.2016, 11:44
Beitrag #2
RE: ds18B20
Ich habe mir den Code jetzt nicht angesehen, da ich vermute, das ist der Beispielcode von Dallas.

Was du verkehrt gemacht hast kann ich leider auch nicht sagen, da du keine Kamera laufen hast. Wink

Wenn du die original Library von Dallas genommen hast und dann die einzelnen Beispiele zum testen nimmst, dann funktioniert es (vorausgesetzt du hast keinen Fehler gemacht) ganz sicher.

Nimm die hier gezeigte Library und setze den Normal Mode ein.

https://milesburton.com/Dallas_Temperatu...ol_Library

Eigentlich kann man da nicht viel verkehrt machen.
Und wenn dein Sensor heiß wird, hast du den bestimmt falsch angeschlossen. Evtl. ist der schon hin.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.01.2016, 12:21 (Dieser Beitrag wurde zuletzt bearbeitet: 28.01.2016 12:24 von eddykett.)
Beitrag #3
RE: ds18B20
Hi Hotsystems,

erstmal danke für die schnelle Antwort, und genau diese Lib ist das.
Angeschlossen habe ich den Sensor 100% auch beim ersten mal richtig, sonnst würden keine Messergebnisse zustande kommen denke ich.

Wenn ich so den Code versuche nachzuvollziehen
ist das ja die Abfrage ob der Sensor im Normal oder Parasite Mode angeschlossen wurde.

Code:
// gib Serial aus : Parasite power is
Serial.print("Parasite power is: ");
  // prüfe ob der Sensor im Parasite Mode ist, wenn ja schreibe Serial : An
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  // wenn nicht schreibe Serial : Aus
  else Serial.println("OFF");

Das heißt ja für mich das er von selber überprüft in welchen Mode der Sensor ist oder liege ich da falsch ?

Code:
// Include the libraries we need
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// arrays to hold device address
DeviceAddress insideThermometer;

/*
* Setup function. Here we do the basics
*/
void setup(void)
{
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // locate devices on the bus
  Serial.print("Locating devices...");
  sensors.begin();
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");

  // report parasite power requirements
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");
  
  // Assign address manually. The addresses below will beed to be changed
  // to valid device addresses on your bus. Device address can be retrieved
  // by using either oneWire.search(deviceAddress) or individually via
  // sensors.getAddress(deviceAddress, index)
  // Note that you will need to use your specific address here
  //insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };

  // Method 1:
  // Search for devices on the bus and assign based on an index. Ideally,
  // you would do this to initially discover addresses on the bus and then
  // use those addresses and manually assign them (see above) once you know
  // the devices on your bus (and assuming they don't change).
  if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
  
  // method 2: search()
  // search() looks for the next device. Returns 1 if a new address has been
  // returned. A zero might mean that the bus is shorted, there are no devices,
  // or you have already retrieved all of them. It might be a good idea to
  // check the CRC to make sure you didn't get garbage. The order is
  // deterministic. You will always get the same devices in the same order
  //
  // Must be called before search()
  //oneWire.reset_search();
  // assigns the first address found to insideThermometer
  //if (!oneWire.search(insideThermometer)) Serial.println("Unable to find address for insideThermometer");

  // show the addresses we found on the bus
  Serial.print("Device 0 Address: ");
  printAddress(insideThermometer);
  Serial.println();

  // set the resolution to 9 bit (Each Dallas/Maxim device is capable of several different resolutions)
  sensors.setResolution(insideThermometer, 9);

  Serial.print("Device 0 Resolution: ");
  Serial.print(sensors.getResolution(insideThermometer), DEC);
  Serial.println();
}

// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
{
  // method 1 - slower
  //Serial.print("Temp C: ");
  //Serial.print(sensors.getTempC(deviceAddress));
  //Serial.print(" Temp F: ");
  //Serial.print(sensors.getTempF(deviceAddress)); // Makes a second call to getTempC and then converts to Fahrenheit

  // method 2 - faster
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.print(" Temp F: ");
  Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit
}
/*
* Main function. It will request the tempC from the sensors and display on Serial.
*/
void loop(void)
{
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");
  
  // It responds almost immediately. Let's print out the data
  printTemperature(insideThermometer); // Use a simple function to print out the data
}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

Wo genau sollte ich den Normal Mode einsetzen wenn ich fragen darf ? Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.01.2016, 12:55
Beitrag #4
RE: ds18B20
Hi,
mach doch einfach mal hier die Suche nach:
DS18B20
und du wirst erstaunt sein wie oft das Thema hier schon behandelt wurde.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.01.2016, 13:26
Beitrag #5
RE: ds18B20
Und mich würde tatsächlich mal interessieren, warum der Sensor heiß geworden ist.
Welchen Sensor (Bauform) verwendest du?

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.01.2016, 16:07 (Dieser Beitrag wurde zuletzt bearbeitet: 28.01.2016 16:09 von eddykett.)
Beitrag #6
RE: ds18B20
Hallo Bitklopfer,

da hab ich auch schon gesucht, aber irgendwie bin ich nie auf nen richtiges Ergebnis gekommen an was es liegen könnte bzw hab ich die Lösung nicht gefunden Huh.

@Hotsystems,

da ich das schon oft gelesen hab bin ich erst mal froh nicht der Einzigste/Erste zu seinTongue.
(28.01.2016 13:26)hotsystems schrieb:  Und mich würde tatsächlich mal interessieren, warum der Sensor heiß geworden ist.
Welchen Sensor (Bauform) verwendest du?
Welche Bauform das genau ist kann ich Dir leider noch nicht mal sagen,
weil ich Wasserfeste bestellt hab.
Da der aber vermutlich Schrott ist werde ich den mal aufmachen, nachgucken und bescheid geben.

Hm, mir ging da nen bissen was durch den Kopf Idea ich weis aber nicht ob ich mit meiner Vermutung richtig liege.
Angeschlossen habe ich den Sensor mit Normal Mode,
wenn ich das Programm öffne ist ja die Lib On Wire mit eingebunden.

Wenn ich das richtig verstanden hab macht der Parasite Mode
das folgendermaßen:
1.Der zieht Pin(x) für Zeit (x) hoch (dadurch lädt sich vermutlich nen Kondensator im ds1820?)
2.dann schaltet Pin (x) ab und durch die vermutliche Entladung des Kondensators bringt er die Daten in den Arduino ?

Gäbe es die Möglichkeit dadurch das ich den Sensor im Normal Mode betreibe er aber vermutlich per Software in Parasite Mode betrieben wird das dass der Fehler ist? und er währe ja automatisch auch weg wenn ich den Sensor im Parasite Mode anklemme ?

Ich bin kein Programmierer und verstehe auch nicht wirklich soviel davon
aber jetzt war ich mal in der CPP von Dallas und hab mal nen bissel rumgeschnarcht weil die ganzen Befehle ja von dort kommen wie Zb. (isParasitePowerMode).
Egal wie oft ich mir das durchgelesen hab erschließt sich mir aus der CPP der Normal mode nicht Sad
zumindestens laut den Dallas Single Sketch den ich aktuell verwende.
Vielleicht ist ja hier jemand Unterwegs der mir das kurz und knapp erklären könnte
oder falls da nen Fehler drin ist im Interesse aller behebt?.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.01.2016, 16:46
Beitrag #7
RE: ds18B20
Hallo,
die DallasTemperature.h hatte ich auch schon im Einsatz und keine Probleme damit.
Dass dein Sensor warm wird aber dennoch Daten liefert ist für mich ein Ausnahmefall.

Natürlich muss zur verwendeten Betriebsart, Normal- oder Parasite- Mode, auch der Anschluss passen.

Ich habe einige dieser "wasserdichten" Sensoren hier liegen.
rot = VCC
gelb = Daten
schwarz = GND
so ist der Anschluss bei meinen. Vermutlich sehen deine auch so aus.
Kannst du zu 100% ausschließen das dein Sensor nie falsch angeschlossen war wenn er Spannung hatte?
Andererseits weiß man nie in welchen dunklen Kellern die wasserdichten Sensoren zusammen geschraubt werden und welche Bauteile da wirklich verwendet werden. Deshalb würde ich nicht ausschließen dass in der Hülse die Adern auch schon mal vertauscht sein können.

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.01.2016, 16:48 (Dieser Beitrag wurde zuletzt bearbeitet: 28.01.2016 17:27 von hotsystems.)
Beitrag #8
RE: ds18B20
(28.01.2016 16:07)eddykett schrieb:  Welche Bauform das genau ist kann ich Dir leider noch nicht mal sagen,
weil ich Wasserfeste bestellt hab.
Da der aber vermutlich Schrott ist werde ich den mal aufmachen, nachgucken und bescheid geben.

Also wenn der Wasserdicht (das ist doch die Bauform) ist, ist es der mit einem metallischen (Edelstahl) Gehäuse.

Und da kann man schon etwas falsch anschließen.

Das Problem mit dem "Normal Mode und Parasit Mode" kann ich nicht nachvollziehen, da dies bei mir mit dem Normal Mode sofort und richtig funktioniert hat.

Zitat:.... falls da nen Fehler drin ist im Interesse aller behebt?.

Das da ein Fehler drin ist glaube ich nicht, da viele andere das zum Laufen gebracht haben.

Wie hast du denn den Sensor angeschlossen?

Edit:

Versuch doch einfach mal das Beispiel "simple" aus der Library.

Das läuft ohne weitere Einstellungen im Normal Mode und wurde gerade wieder von einem anderen User hier im Forum getestet.

http://www.arduinoforum.de/arduino-Threa...Rat?page=3

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Probleme mit mehreren DS18B20 Fühlern Uwa 12 332 15.10.2016 15:26
Letzter Beitrag: ardu_arne
  DS18B20 Stefan 1 664 12.09.2015 09:50
Letzter Beitrag: Bitklopfer
  Welchen Wert zeigt ein DS18B20 über 125 Grad? Jetiman 3 827 02.08.2015 11:29
Letzter Beitrag: Jetiman
  Temperatursensor DS18B20 umprogrammiert? DaniDD 2 697 12.06.2015 10:42
Letzter Beitrag: DaniDD
  DS18b20 Luppi 8 2.026 20.11.2014 20:28
Letzter Beitrag: sepro
  Temperatursensor DS18B20 funzt nicht Tombir 5 1.692 12.10.2014 20:11
Letzter Beitrag: Tombir

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste