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
Zuordnung von DS18B20 Adressen
25.10.2015, 12:19 (Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2015 12:45 von Binatone.)
Beitrag #9
RE: Zuordnung von DS18B20 Adressen
(25.10.2015 11:58)Bitklopfer schrieb:  Hi,
ich will mal versuchen zu vermitteln...

@Binatone, du hast die Lösung wo gesucht wird nach meiner Ansicht der Dinge wohl gelöst. Gesucht wird deine Codezeile mit der Direktive:
DeviceAddress sensor1 = {0x28 , 0xA8 ,....
wie sieht diese "DeviceAddress" Zeile bei dir aus weil du hier die Werte die du aus dem EEPROM liest mit angeben mußt. Hast du das in einen String kopiert ?

Ich muss unbedingt mal den Code ausbuddeln, vielleicht später im EDIT ergänzen, mal sehen. Der ist nur mittlerweile so komplex, das würde hier nur verwirren.

ich erinnere mich grad, das da mehrere Funktionen in der Lib sind.
eine löst die Temperarturerfassung aus, eine kann die Auflösung der Sensoren verändern usw.
Eine gibt lediglich die Anzahl der angebunden Sensoren zurück.
Hat man die Temperaturerfassung ausgelöst, melden sich alle angeschlossenen Sensoren nacheinander mit ihrer Adresse (0x28,0xA8... und der gemessen Temperatur zurück.
Die Adresse wird eigentlich im Hex Format (FF,00,37,D3,42,BC,C3,FF) zurückgegeben.
Ich nehme einfach diese 8 Bytes und kopiere sie in ein Array (1..8) of bytes.

Dann suche ich im Eprom an den Stellen 1,11,21,31 (-101) nach dem ersten der 8 Bytes.
gefunden = byte zwei vergleichen + die nächsten 7 Bytes vergleichen
wenn alle 8 bytes zutreffend sind, nehme ich die Position im Eprom (1-100) als eigene kurze ID (zwischen 1 und 100)

nicht gefunden, weiter zur nächsten Gruppe (+10)

Diese einfache ID (1-100) kann ich im Programm einfacher einem Messpunkt zurordnen.


EDIT:
**********************************************

in den Deklarationen:

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


im Setup:

// Start up the library
sensors.begin();

// Grab a count of devices on the wire
numberOfDevices = sensors.getDeviceCount();
Serial.print(numberOfDevices);
Serial.println(" Sensoren gefunden...");


im Loop:

numberOfDevices = sensors.getDeviceCount(); //Anzahl Sensoren ermitteln
sensors.requestTemperatures(); // Temperatur-Anfrage

Dann für jeden Sensor:
if(sensors.getAddress(tempDeviceAddress, i))
{
printTemperature(tempDeviceAddress);
{

Die Funktion sieht dann so aus:
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
printAddress(tempDeviceAddress);
Serial.print(adrett);
Serial.print(": ");
Serial.println(tempC);


}

Dazu die Funktion printAddress:

void printAddress(DeviceAddress deviceAddress)
{
adrett="";
Serial.println("");
for (uint8_t i = 0; i < 8; i++)
{
Adressen[i] = deviceAddress[i];
}
match();


}

in "match()" wird dann im Eprom wie oben beschrieben nach den 8 Bytes (Adressen[0..7]) gesucht, und die "Position im Eprom" in eine globale Variable geschrieben. (X)

z.B
Sensor X (bytes 0-8 im Eprom) zum Sensor-Beispiel...

Sensor 0 (bytes 0-8 im Eprom) zur Schaltschranktemperatur
Sensor 1 (bytes 10-18 im Eprom) zur Aussentemperatur
Sensor 2 (bytes 20-28 im Eprom) zur Temperatur Wohnzimmer
Sensor 3 (bytes 30-38 im Eprom) zur Temperatur Schlafzimmer
usw...

Wie gesagt, der Code teilt sich in 5 Tabs auf...
Auch die Kommunikation zur SPS ist da drin, das wird hier nicht einfach.
Wenn ich das hier Copy n paste reindrücke, helfe ich niemandem damit
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.10.2015, 12:52
Beitrag #10
RE: Zuordnung von DS18B20 Adressen
(25.10.2015 10:35)Jelimi schrieb:  aber wie mach ich das mit der Adressierung der Sensoren, da die Zuordnung ja eben vor dem eigentlichen Programmstart und somit vor dem Lesen der Karte stattfindet.
Zur Info, so sieht die Zuordnung aus und die möchte ich eben nicht fest vorgeben sondern von der Karte lesen
Code:
DeviceAddress Dachboden_0 = {0x28, 0xCA, 0xF8, 0xF7, 0x04, 0x00, 0x00, 0xBF};
Hi,
ich glaube, Du meinst folgendes: So wie das aussieht ist DeviceAddress einfach ein Array. Du könntest das auch einfach so deklarieren und definieren:
Code:
DeviceAddress Dachboden_0 = {0, 0, 0, 0, 0, 0, 0, 0};
Später (z.B. im setup) kannst Du das dann mit den richtigen Werten überschreiben:
Code:
Dachboden_0[0] = <1.Byte>;
Dachboden_0[1] = <2.Byte>;
[...]
Dachboden_0[7] = <8.Byte>;

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.10.2015, 13:27
Beitrag #11
RE: Zuordnung von DS18B20 Adressen
(25.10.2015 12:19)Binatone schrieb:  ....
ich erinnere mich grad, das da mehrere Funktionen in der Lib sind.
eine löst die Temperarturerfassung aus, eine kann die Auflösung der Sensoren verändern usw.
Eine gibt lediglich die Anzahl der angebunden Sensoren zurück.
Hat man die Temperaturerfassung ausgelöst, melden sich alle angeschlossenen Sensoren nacheinander mit ihrer Adresse (0x28,0xA8... und der gemessen Temperatur zurück.
Die Adresse wird eigentlich im Hex Format (FF,00,37,D3,42,BC,C3,FF) zurückgegeben.
Ich nehme einfach diese 8 Bytes und kopiere sie in ein Array (1..8) of bytes.

Dann suche ich im Eprom an den Stellen 1,11,21,31 (-101) nach dem ersten der 8 Bytes.
gefunden = byte zwei vergleichen + die nächsten 7 Bytes vergleichen
wenn alle 8 bytes zutreffend sind, nehme ich die Position im Eprom (1-100) als eigene kurze ID (zwischen 1 und 100)

nicht gefunden, weiter zur nächsten Gruppe (+10)

Diese einfache ID (1-100) kann ich im Programm einfacher einem Messpunkt zurordnen.

....

Hi,
also so wie du das machst ist es wohl auch ein Weg um ans Ziel zu kommen.
Aber auch du mußt erst mal die Sensoraddresse im EEPROM ablegen um die Zuordnung zu realisieren.
Der andere Weg ist der von Jelimi indem er die Sensoradresse eben auf die SD schreibt und danach den Sensor gezielt abfragen will....so habe ich ihn verstanden.
Und um das während dem Setup oder zur Laufzeit (loop) zu realisieren dürfte der Hinweis von Thorsten in dem Post vor diesem hier wohl ans Ziel führen indem man untersucht ob das mit dem Address Aray so zutreffend ist weil dann ist es vollends ein leichtes die Adressen aus der SD Karte in das Array zu packen und dann den Sensor gezielt anzusprechen. Leider habe ich gerade ein anderes Projektchen auf der Pfanne sonst würde ich da mithäcken...
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
25.10.2015, 13:41
Beitrag #12
RE: Zuordnung von DS18B20 Adressen
(25.10.2015 13:27)Bitklopfer schrieb:  (...)
Aber auch du mußt erst mal die Sensoraddresse im EEPROM ablegen um die Zuordnung zu realisieren.
(...)
lgbk

Richtig...
Dazu bediene ich das ganze Dingen über den Seriellen Monitor.
Ist das System intakt, sprich alle X Sensoren anwesend, kann ich mit Eingabe "R" im Ser. Monitor alle EEpromdaten löschen auf Standard(255) und danach neu anlegen.
Dazu nimmt das Programm alle Daten und schreibt sie entsprechend in den Speicher.

Man kann sich halt nicht vertippen, bei all den vielen Zeichen und Zahlen Big Grin


Aber jetzt nochmal hierzu:

Bitklopfer schrieb:@Binatone, noch ne kleine technische Feinheit Eprom Speicher haben die ATmega's nicht mehr. Entweder ist das Flashmemory für den Programmcode oder eben EEPROM um Werte über den Stromlosen Zustand zwischenzuspeichern.
EEPROM kommt von Electrical Erasable... währen ein EPROM UV Licht zum löschen benötigt...das waren damals die Käferchen mit dem Glasfenster in der Mitte.

Ich liebe Deinen Humor bei so nem trockenen Stoff !

Big GrinBig GrinBig Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.10.2015, 13:48
Beitrag #13
RE: Zuordnung von DS18B20 Adressen
Also ich will eigentlich nur folgendes:
bisher steht fest im Programm verankert
DeviceAddress Dachboden_0 = {0x28, 0xCA, 0xF8, 0xF7, 0x04, 0x00, 0x00, 0xBF};
der Sensor ist auf dem Dachboden.

Jetzt ist er kaputt, ich habe aber noch einen mit einer anderen Adresse die ich kenne.
Diese schreib ich in ein Textfile auf meine SD-Karte und tausche den Sensor.
Jetzt kann ich aber die feste Zuordnung nicht mehr gebrauchen, sondern die neue soll einmalig beim Start des Programmes gelesen werden und dann eben in DeviceAddress Dachboden_0 geschrieben werden, mehr nicht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.10.2015, 13:55
Beitrag #14
RE: Zuordnung von DS18B20 Adressen
@Jelimi, ...ähm lies doch einfach mal die letzten Beiträge durch...da steht deine Lösung drin...Wink

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
25.10.2015, 14:01
Beitrag #15
RE: Zuordnung von DS18B20 Adressen
Das Problem ist, das die DS18B20 selbst die Reihenfolge (TempDeviceAdress) festlegen, in der sie antworten auf die Anfrage des Arduino.
Tauscht man einen Sensor von 10 aus, KANN sich auch die Reihenfolge verschieben.
Im Extremfall bekommt der Dachboden einen neuen Sensor, und plötzlich werden die Sensoren Wohnzimmer und Schlafzimmer vertauscht.

Hat man nur einen Sensor angeschlossen, kann das natürlich nicht passieren.
Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.10.2015, 14:05
Beitrag #16
RE: Zuordnung von DS18B20 Adressen
@Binatone, das mit der Reihenfolge ist wohl richtig, aber ich meine man kann auch gezielt einen Sensor unter angabe der Adresse abfragen ? Das wäre ja das Ziel der Geschichte.
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
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  DS18B20 - Zeit beim Auslesen verkürzen? ArduPI 3 1.358 09.01.2015 19:00
Letzter Beitrag: ArduPI
  Arduino UNO + DS18B20+ Temperaturschaltung robin 13 6.551 06.02.2014 19:47
Letzter Beitrag: robin
  Scanner für I2C-Adressen? alpenpower 2 3.960 11.09.2013 18:39
Letzter Beitrag: alpenpower

Gehe zu:


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