Pages: [1]   Go Down
Author Topic: DS18B20 Problem nach ein paar Minuten  (Read 1154 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 62
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Leute,
also ich habe in zwischen hinbekommen, dass mein UNO mit Ethernet shield und zweiTemp Sensoren alles schön als client in eine DB schreibt. Aber etwas verstehe ich nicht. Ich habe heute einen dritten Sensor dran gebaut, an einem 20m Kabel. DAs ging auch problemlos. Aber nach 10-12 min. werden auf einmal keine Daten mehr ausgelesen, von keinem Sensor. Nehem ich den dritten wieder ab, läuft alles wieder. Wieso geht das zuerst, dann nicht mehr? Die Sensoren laufen im parasite Modus.

VG, Can
Logged

Offline Offline
Full Member
***
Karma: 5
Posts: 211
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
wenn der Widerstand zu gross ist, kann die Spannung in den Temperatursensoren nicht mehr genug ansteigen. ( Kondensator )
Werden die Sensoren oft abgefragt, haben diese dann keine Betriebsspannung mehr und antworten nicht.

Lösung: Widerstand verkleinern ( in Maßen ) oder die Anzahl der Abfragen begrenzen

Ich selbst habe eine 50m-Rolle 'Klingeldraht' angeschlossen und nach dem Verkleinern des Widerstandes funktionierte es.

Gruss
Kurti
Logged

Es gibt nur 10 Arten von Menschen: die, die das Binär-System verstehen und die, die es nicht verstehen.

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Kurti

wie fragt man diese Sensoren weniger ab?

Ich hab 7 Sensoren am BUS laufen und nach ca. 24h werden keine Teperaturen mehr ausgelesen.
Nach einem Reset läuft es wieder.

Der Wiederstand ist angepasst.

Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du mußt zuerst den nippel durch die lasche ziehen und dann den code hier posten.
Dann wird dir geholfen!

Du wirst sicher irgendwie einen interwall da drinne haben den mußt du verlängern, wie hängt davon ab wie du es derzeit machst.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok sorry

der ganze sketch passt nicht daher nur die betreffenden Auszüge

Auszug Setup.......
Code:

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <TimerOne.h>



float tempAbgas;
float tempVerbrennung;
float tempKessel;
float tempKesselrueck;
float tempSpeicher_oben;
float tempSpeicher_unten;
float tempReserve;
float tempaussen_Thermometer;
float temphkVorlauf_Thermometer;
float temphkRuecklauf_Thermometer;
float lambdaWert;
float lambdaLesen;
 
/////////////////   DS18B20
/////////////////   Data wire is plugged into pin D3 on the Arduino

#define ONE_WIRE_BUS 3

/////////////////   Setup a oneWire instance to communicate with any OneWire devices

OneWire oneWire(ONE_WIRE_BUS);

/////////////////   Pass our oneWire reference to Dallas Temperature.

DallasTemperature sensors(&oneWire);


/////////////////   Sensoren Thimmendorf

DeviceAddress kessel_Thermometer =         { 0x28, 0xFA, 0xC9, 0x96, 0x03, 0x00, 0x00, 0x7E };  //Adressen der Sensoren manuell eingeben
DeviceAddress reserve_Thermometer =        { 0x28, 0xC0, 0x97, 0x96, 0x03, 0x00, 0x00, 0x6B };  //Adressen der Sensoren manuell eingeben
DeviceAddress speicher_oben_Thermometer = { 0x28, 0xA6, 0xB7, 0x96, 0x03, 0x00, 0x00, 0xE2 };  //Adressen der Sensoren manuell eingeben
DeviceAddress speicher_unten_Thermometer =  { 0x28, 0x89, 0xA3, 0x96, 0x03, 0x00, 0x00, 0x13 };  //Adressen der Sensoren manuell eingeben
DeviceAddress tempKesselrueck_Thermometer =        { 0x28, 0xDC, 0xC0, 0x96, 0x03, 0x00, 0x00, 0x89 };  //Adressen der Sensoren manuell eingeben
DeviceAddress aussen_Thermometer =         { 0x28, 0xA5, 0x9E, 0x96, 0x03, 0x00, 0x00, 0xB0 };  // Außentemperatur
DeviceAddress hkVorlauf_Thermometer =        { 0x28, 0x18, 0xAC, 0x96, 0x03, 0x00, 0x00, 0xFA }; // Heizkreis Vorlauf
DeviceAddress hkRuecklauf_Thermometer =        { 0x28, 0x26, 0xC7, 0x96, 0x03, 0x00, 0x00, 0x65 }; //Heizkreis Ruecklauf


void setup ()
{

///////////////// DS18B20Anfang
///////////////// Start der library DS18B20

  sensors.begin();
 
///////////////// Auflösung des Sensors auf 9 bit 

  sensors.setResolution(kessel_Thermometer, 9);
  sensors.setResolution(tempKesselrueck_Thermometer, 9);
  sensors.setResolution(speicher_oben_Thermometer, 9);
  sensors.setResolution(speicher_unten_Thermometer, 9);
  sensors.setResolution(reserve_Thermometer, 9);
  sensors.setResolution(aussen_Thermometer, 9);
  sensors.setResolution(hkVorlauf_Thermometer, 9);
  sensors.setResolution(hkRuecklauf_Thermometer, 9);
 
/////////////////  Start abfrage DS18B20

  sensors.requestTemperatures();     

/////////////////  Temperatur DS18b20 in Varable ablegen

  tempKessel = sensors.getTempC(kessel_Thermometer);
  tempKesselrueck = sensors.getTempC(tempKesselrueck_Thermometer);
  tempSpeicher_oben = sensors.getTempC(speicher_oben_Thermometer);
  tempSpeicher_unten = sensors.getTempC(speicher_unten_Thermometer);
  tempReserve = sensors.getTempC(reserve_Thermometer);
  tempaussen_Thermometer = sensors.getTempC(aussen_Thermometer);
  temphkVorlauf_Thermometer = sensors.getTempC(hkVorlauf_Thermometer);
  temphkRuecklauf_Thermometer = sensors.getTempC(hkRuecklauf_Thermometer);



Auszug Loop......
Code:
               //DS18B20
sensors.requestTemperatures();//DS18B20
tempKessel = sensors.getTempC(kessel_Thermometer);
tempKesselrueck = sensors.getTempC(tempKesselrueck_Thermometer);
tempSpeicher_oben = sensors.getTempC(speicher_oben_Thermometer);
tempSpeicher_unten = sensors.getTempC(speicher_unten_Thermometer);
tempReserve = sensors.getTempC(reserve_Thermometer);
tempaussen_Thermometer = sensors.getTempC(aussen_Thermometer);
temphkVorlauf_Thermometer = sensors.getTempC(hkVorlauf_Thermometer);
temphkRuecklauf_Thermometer = sensors.getTempC(hkRuecklauf_Thermometer);


im weiteren Verlauf wird dann mit den in den Variablen gearbeitet

ich hoffe diese Bruchstücke reichen euch
jedenfalls hängt sicht die Temperaturabfrage nach ca. 20-30h auf und der Arduino muß neu gestartet werden.
Logged

Offline Offline
Sr. Member
****
Karma: 10
Posts: 359
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Zu deiner Frage wie man die Sensoren weniger abfragt.
Hast du ein Uhrmodul eingebaut? Dann z.B. könnte man jede Minute einmal abfragen (if sec < 1).
Oder aber mit millis().
Hier mal ein Beispiel von mir:

Code:
void SensorLesen(){
 jetzt = millis();
 if(jetzt - vorher > 30000){ //Sensoren werden nur alle 30 sec gelesen
  sensors.requestTemperatures();
  Temperatur[0] = sensors.getTempC(Sensor0); Temperatur[1] = sensors.getTempC(Sensor1);
  Temperatur[2] = sensors.getTempC(Sensor2); Temperatur[3] = sensors.getTempC(Sensor3);
  Temperatur[4] = sensors.getTempC(Sensor4); Temperatur[5] = sensors.getTempC(Sensor5);
  Temperatur[6] = sensors.getTempC(Sensor6); Temperatur[7] = sensors.getTempC(Sensor7);
  Temperatur[8] = sensors.getTempC(Sensor8);
   vorher=millis();
 }
}
« Last Edit: June 07, 2012, 09:53:48 am by maverick1509 » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

nein hab ich nicht ich bau das mal mit ein mal sehen wie es dann läuft melde mich wieder

vielen Dank
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 62
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Kurti,

vielen DAnk für deine prompte Antwort! Jetzt klappt das Auslesen perfekt. Ich habe den Widerstand auf 4.1kOhm reduziert und das delay um die Antworten zu erwarten auf 2000ms gesetzt. Jetzt habe ich bereits sieben Fühler, die alle pefekt laufen!
Logged

Offline Offline
Full Member
***
Karma: 5
Posts: 211
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo laserbrain,

Danke für Deine Rückmeldung.
Schön, dass Deine Fühler jetzt funktionieren.

Gruss
Kurti
Logged

Es gibt nur 10 Arten von Menschen: die, die das Binär-System verstehen und die, die es nicht verstehen.

Pages: [1]   Go Up
Jump to: