Mega2560 + DS18B20

Hi,

ich habe momentan das Phenomen, das ich an einem Bus immer nur einen Sensor erkennen kann.

Ich lasse das “Tester” programm aus den Beispielen laufen … und wenn ich mehr als einen Sensor angeschloßen habe, wird nichts mehr erkannt.

Zu meinem Projekt … ich habe 8 Bus Leitungen mit insgesamt 32 Sensoren - alle anderen funktionieren einwandfrei.

5V kommt von einem separatem Netzteil - GND sind miteinander verbunden und Datenkabel geht zum Arduino.

Kabel: Cat7
4,7k Widerstände an jeder Busleitung (mit 5V verbunden).

Delay(1000) kommt vor der Temperatur abfrage.

Hat jemand eine Idee? oder besser Ahnung, wo der Fehler ist?

Grüße
Mattes

Was verstehst Du unter 8 Busleitungen?
Alle am gleichen Pin oder an 8 verschiedenen Pins des Arduino?
Wie lange sind die Kabel?
Gibst Du uns den Sketch?

Grüße Uwe

Hallo Uwe,

der Sketch ist der "Tester" aus den beispielen der DallasTemerature Lib.
Nichts wildes also.

Angepasst habe nur das Delay zwischen request und auslesen und den PIN, und da ich ja einen Sensor "sehe" liegt es da sicher nicht dran.

8 Busleitungen an 8 verschiedenen Pins.

5 Leitungen gehen via einem Cat7 kabel rüber in den anderen Keller ... ca. 40-50 Meter schätze ich.

5V und GND teilen sich alle, nur Daten ist immer seperat mit jeweils einem vorwiderstand 4,7k.

beim request im steuersketch frage ich jeden bus der reihe nach ab und warte immer zwischendurch.

alle anderen sensoren funktionieren gut, nur an dem einem bus, da immer nur einer.

ich habe jetzt mal testweise 3 andere sensoren abgeklemmt, hat sich aber nichts geändert.

die sensoren an diesem bus zeigen laut lib -127,00 an.

mir fällt gerade ein, dass das Buskabel mit 5V verdrillt ist ... kann es das sein?

Mess mal die Spannung an den Sensoren, und den Widerstand der Kabel

Zeigt mir 5,18 Volt auf der VCC Leitung und 5,13 auf der Daten ... ist aber ein billiges Multimeter.

Übrigens auch wenn nur ein Sensor angeklemmt ist und dieser Daten liefert sind die Werte so.

Aktuell werden 0,00 °C angezeigt ohne das ich noch etwas geändert habe.

Hi

Ist dieser 'Bus' zufällig der Längste?
Klemme einen Keramik-Kondensator (Abblock-Kondensator) an den ersten Sensor.
Ggf. bricht Dir auf die Entfernung die Spannung weg, wenn die Sensoren was arbeiten sollen.
Du kannst auch versuchen, die Sensoren EINZELN zum Temperatur-Generieren anzusprechen (ok, dafür musst Du Diese bereits gefunden haben - die Lib hat aber den Such-Algorithmus dabei).

MfG

hi,

hm der längste Bus ... kann schon hinkommen.

deshalb habe ich das ja auf diverse Leitungen aufgeteilt, ein extra Netzteil angeschlossen und die Anzahl der Sensoren auf einer Leitung reduziert ... es sind auf dieser Leitung maximal 3 Stück, auf anderen, wo es auch funktioniert sind es 3-4, annähernd gleiche Länge der Leitung.

100nF zwischen VCC und GND?

Nur mal als ganz blöde Frage (es gibt ja auch defekte IC). Hast Du mal aus den funktionierenden Strängen die IC in den "bockigen" Strang gehängt, also alle ausgetauscht?

Gruß Tommy

Gibst Du uns trotzdem den Sketch.

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

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

#define TEMPERATURE_PRECISION 9 // Lower resolution

// 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);

int numberOfDevices; // Number of temperature devices found

DeviceAddress tempDeviceAddress; // We'll use this variable to store a found device address

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

  // Start up the library
  sensors.begin();
  
  // Grab a count of devices on the wire
  numberOfDevices = sensors.getDeviceCount();
  
  // locate devices on the bus
  Serial.print("Locating devices...");
  
  Serial.print("Found ");
  Serial.print(numberOfDevices, DEC);
  Serial.println(" devices.");

  // report parasite power requirements
  Serial.print("Parasite power is: "); 
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");
  
  // Loop through each device, print out address
  for(int i=0;i<numberOfDevices; i++)
  {
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i))
	{
		Serial.print("Found device ");
		Serial.print(i, DEC);
		Serial.print(" with address: ");
		printAddress(tempDeviceAddress);
		Serial.println();
		
		Serial.print("Setting resolution to ");
		Serial.println(TEMPERATURE_PRECISION, DEC);
		
		// set the resolution to TEMPERATURE_PRECISION bit (Each Dallas/Maxim device is capable of several different resolutions)
		sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);
		
		 Serial.print("Resolution actually set to: ");
		Serial.print(sensors.getResolution(tempDeviceAddress), DEC); 
		Serial.println();
	}else{
		Serial.print("Found ghost device at ");
		Serial.print(i, DEC);
		Serial.print(" but could not detect address. Check power and cabling");
	}
  }
TTT();
}

// 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(){
  delay(3000);
  TTT();
  }

void TTT(void)
{ 
  // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  numberOfDevices = sensors.getDeviceCount();
  Serial.print("Found ");
  Serial.print(numberOfDevices, DEC);
  Serial.println(" devices.");

  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");
  delay(1000);
  
  // Loop through each device, print out temperature data
  for(int i=0;i<numberOfDevices; i++)
  {
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i))
	{
		// Output the device ID
		Serial.print("Temperature for device: ");
		Serial.println(i,DEC);
		
		// It responds almost immediately. Let's print out the data
		printTemperature(tempDeviceAddress); // Use a simple function to print out the data
	} 
	//else ghost device! Check your power requirements and cabling
	
  }
}

// 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);
  }
}

Tommy56:
Nur mal als ganz blöde Frage (es gibt ja auch defekte IC). Hast Du mal aus den funktionierenden Strängen die IC in den "bockigen" Strang gehängt, also alle ausgetauscht?

Gruß Tommy

Ja, ich habe auch die Kabel ausgetauscht, weil ich dachte, das da ggf. ein Fehler / defekt ist.

Die Sensoren funktionierten auch zusammen eine ganze Zeit nur jetzt plötzlich nicht mehr.

Es funktioniert immer nur ein Sensor an diesem BUS ... egal ob alt oder ganz neu.

Bin ab Morgen im Urlaub, werde aber nach dem Urlaub das ganze weiter verfolgen und hier berichten.

"

The message has the following error or errors that must be corrected before continuing:
Unable to publish the post. Please notice you can only post once every 5 minutes and only edit posts after 30 seconds. Once you reach 100 published posts this limit will be removed.

"

nervt

Hi

Mattes:
The message has the following error or errors that must be corrected before continuing:
Unable to publish the post. Please notice you can only post once every 5 minutes and only edit posts after 30 seconds. Once you reach 100 published posts this limit will be removed.

nervt

... ist in 40 Post's vorbei ... (ab 100 darfst Du posten, wann und wie Du willst)

Viel Spaß im Urlaub

MfG

Hi,

wie versprochen die Rückmeldung.

Nachdem ich jetzt ein brauchbares Multimeter habe, konnte ich nun doch Mal richtig messen, was denn da am Sensor noch ankommt.

Von ursprünglich ca. 3 Ampere waren am Verteiler im anderen Keller noch ca. 0.8 Ampere vorhanden.

Ich habe jetzt ein dickeres Kabel für VCC und GND verlegt und nun funktionieren alle Sensoren, auch die bereits abgeklemmten waren.

Danke für alle Hinweise ... nun muss ich die Daten noch via USB im Raspberry verarbeiten und anzeigen - läuft bereits mit den alten Sensoren.
Auch der Rest der Steuerung fehlt noch, aber das ist jetzt kein großes Problem mehr.

Hi

Mattes:
Von ursprünglich ca. 3 Ampere waren am Verteiler im anderen Keller noch ca. 0.8 Ampere vorhanden.

:o

Woher kommen jetzt Ampere? (= Strom, und dann gleich 3A)
Dachte eher, Du hast ein Spannungsproblem (was wiederum am Querschnitt/dem Leitungswiderstand liegen kann).
Spannungen (Formelzeichen U) werden aber in V angegeben, Volt.

Mit (entsprechend vielen) Ampere kannst Du Dir auch böse dünne Kabel abbrennen - sollte man im Hinterkopf haben.
Auch, wenn das verwendete Netzgerät (beim Testen) Diese liefern kann - so hat mir meine neueste Errungenschaft binnen Millisekunden und 'Ampere ohne Ende' (also maximal 60 ...) ein Krokodil-Kabel chinesischer Quelle verdampfen lassen - man soll wohl doch wissen, was man tut, bevor man Es tut.
Akkus oder Kondensatoren sind hier ähnlich böse und liefern ebenfalls 'Ampere ohne Ende'.

MfG

Das Ampere das ist, was einen umbringt und weniger die Volt, ist mir klar und das man damit so einiges abfackeln kann ebenfalls.
Trotzdem danke für den sehr berechtigten Hinweis.

Ich hatte bisher Volt gemessen und 5,15V waren steht's an jeder Stelle der Leitung vorhanden, allerdings mit dem Schrott Multimeter gemessen.

Den Moment, wenn auf der Datenleitung das request Signal kam, konnte ich ebenfalls gut erkennen.

Also hab ich in meiner Not und Ratlosigkeit angefangen Ampere zu messen.
Und da war der Wert höher, je weiter ich zum Netzteil kam und niedriger je weiter entfernt ich von selbigen gemessen habe.

Ich habe dann auf Verdacht daß Kabel erneuert und plötzlich war alles okay.

Ich überlege noch, die Leitungen mit schmelzsicherungen abzusichern, bin aber bisher noch nicht so weit gekommen.
Ein Sortiment habe ich bereits vor meinem Urlaub bestellt und bekommen.

Hast du eine Idee, welche Sicherung Sinn macht?

Die Netzteile 5V (2a arduino, 1,5a Raspberry und 4a für Sensoren und Relais) wollte ich ursprünglich durch ein 20a Netzteil ersetzt.
Ausserdem 12v + 24v für eine separate Kessel Steuerung und Stetig regelnder mischermotorenen.

Alle Netzteile hängen an einem seperaten Sicherungsautomaten, 10a glaube ich.

Ausserdem sind da bereits 14 Relais mit diversen pumpen und mischermotorenen bzw. stellmotoren verbaut.

Hi

Im Haushalt würde man den IK messen (I=Strom, K=Kurzschluss, also den Kurzschluss-Strom an dieser Stelle).
Die vorgeschaltete Sicherung muß mit diesem möglichen Strom den Stromkreis in einer bestimmten Zeit unterbrechen, dafür ist das X-fache des Nennstrom nötig.
Bei Schmelzsicherungen nimmt man den 10-fachen Nennstrom als mindesten Kurzschluss-Strom an.

Du sollst jetzt NICHT mit Deinem neuen DMM im Keller messen, auf wie viele Ampere Du kommst - dabei wird’s Dir wohl das Ampere-Meter zerlegen.
Viel mehr als 20A kommen aus einem 20A-Netzteil nun auch nicht (Ausnahme: dort ist ein fetter Elko am Ausgang verbaut).
Somit wirst Du wohl eine Schmelzsicherung mit dem Nennstrom, den Du benötigst, nur sehr schwer ausgelöst bekommen.
Aber reden wir hier nicht über Netzspannung, wo Dich die Spannung (AC>50V, DC>120V) umhaut - Strom brauchst Du -als Mensch- eh nicht viel - so feine Sicherungen gibt’s fast gar nicht :wink:
Somit musst Du sehen, daß Deine Verkabelung die 20A aushält - der schwächste Punkt MUSS die Sicherung bleiben - Sie erwärmt Sich im Fehlerfall deutlich mehr als Deine Kabel - und brennt irgendwann durch.
Das ‘irgendwann’ ist, je nach wirklich fließendem Strom, wörtlich zu nehmen!!
Benutze einen Sicherungssockel aus nicht brennbarem/schmelzbarem Material, keinen Plastik-Sockel, wie z.B. im Auto - wenn die Sicherung immer wärmer wird, schmilzt das Plastik der Sicherung (zumindest wird’s weich) - Da muß der Sockel die Sicherung ‘in Form’ halten, bis Diese wirklich ausgelöst hat.
Hier, auf Video – Haussicherung Test, ‘Das Gleichstromhaus’, kann man sehen, was so eine Flachsicherung Alles macht, bevor Sie auslöst :wink:
(Wenn ‘Er Da’ auch nicht sonderlich feinfühlig zu den Sicherungen ist gg)

MfG