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
24.10.2015, 18:09
Beitrag #1
Zuordnung von DS18B20 Adressen
Hallo,
ich brauche mal Hilfe zu folgendem Problem.
Bisher habe ich mehrere DS18B20 Temperatur Sensoren wie folgt deklariert:
DeviceAddress Solaranlage = {0x28, 0xCC, 0x51, 0xF7, 0x04, 0x00, 0x00, 0xCD};
Mein Ziel ist es jetzt aber, um nicht ins Programm eingreifen zu müssen, die Sensordaten von einer SD-Karte zu lesen.
So weit so gut, allerdings deklariere ich ja die Sensoren normalerweise, bevor ich die void setup und die void loop starte.
Das einlesen geschieht aber erst in der void Setup.
Wie kann ich es realisieren, die Adressen der Sensoren einzulesen und diese dann erst zu deklarieren?
Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.10.2015, 07:26
Beitrag #2
RE: Zuordnung von DS18B20 Adressen
Moin...
Warum ist es erforderlich, zuerst die angeschlossenen DS Adressen zu ermitteln und dann die Daten von Karte zu lesen?

Ich nutze den Eprom Speicher dafür.
Da passen die IDs von mehr als 100 Sensoren rein.

Im Loop wird dann die aktuelle Sensor ID im Eprom gesucht und z.B. an 7ter Position gefunden.
Temperaturen[7] = aktuelle Temperatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.10.2015, 08:46
Beitrag #3
RE: Zuordnung von DS18B20 Adressen
(25.10.2015 07:26)Binatone schrieb:  Moin...
Warum ist es erforderlich, zuerst die angeschlossenen DS Adressen zu ermitteln und dann die Daten von Karte zu lesen?

Ich nutze den Eprom Speicher dafür.
Da passen die IDs von mehr als 100 Sensoren rein.

Im Loop wird dann die aktuelle Sensor ID im Eprom gesucht und z.B. an 7ter Position gefunden.
Temperaturen[7] = aktuelle Temperatur.

Moin,
also wenn du das EEPROM als Speicher nutzen tust dann mußt ja auch danach den Sensor der Lib bekanntgeben also so:
DeviceAddress sensor1 = {0x28 , 0xA8 , 0x3D , 0xB1 , 0x5 , 0x0 , 0x0 , 0xA0};
Aber da du hier ja die Adresse erst bereitstellen mußt sieht das sicherlich etwas anderster aus und genau das ist von Interesse wie das geht. Könntest du bitte von deinem Sketch diesen Teil hier posten ? ...thanks
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, 09:27 (Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2015 09:47 von Binatone.)
Beitrag #4
RE: Zuordnung von DS18B20 Adressen
ich hab den Code grad nicht bei mir, sorry...

Dann will ichs mal in Worte fassen:

Beim Setup werden die Sensoren initialisiert. (ausgelagert in eine Funktion, damit ich auch vom Loop aus drauf zugreifen kann)

Im Loop werden die Sensoren abgefragt und nacheinander ausgewertet.

Die Adresse des aktuellen Sensors kommt in ein Array (addr[1..8])
Dann beginnt die Suche nach dem Sensor im Eprom in einer Schleife ungefähr so:

for x ( 0..100) x=x+1
{
for y (0..7) y=y+1
{
byte B = eprom.read(x*10+y)
if ( addr[y]) == B
treffer = treffer +1
}
if (Treffer = 8 )
{
Adr_im_Eprom = x // Mit diesem Wert arbeitet das Programm dann weiter (1-100)
x=100 // um die Schleife zu verlassen
}
}

Dazu hab ich über den Serial Monitor die Möglichkeit, die Initialisierung zu starten, neue Sensoren anzumelden usw.
Ich benutze zwar 10 bytes im Eprom, obwohl ich nur 2 benötige, aber naja... hat sich halt so ergeben bei der Bastelei.
Mehr als 100 Sensoren werd ich ohnehin nicht anlegen, also was solls Big Grin

Binatone

Edit: ich seh es ein, das ist alles schlecht beschrieben....
Die sensoren werden doch nacheinander abgearbeitet, mit "DeviceCount" oder so ähnlich.
Falls ein Sensor ausfällt (Kabelbruch) kann sich die Reihenfolge der Sensoren verändern.
Folglich kann ich mit dem Sensor, der den Devicecount 5 bei intaktem System hatte, nicht immer die Position 5 zuordnen.
Wenn Sensor 3 weg ist, hat mein Sensor plötzlich Devicecount 4
Deswegen lege ich im Eprom alle 8 byte Adressen ab, und nutze die Position des Sensors im Eprom als meine ID (1-100) und eben nicht die deviceCount Nummer.

Vielleicht ist es jetzt verständlicher, sorry... is nich einfach Sad
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.10.2015, 10:35 (Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2015 10:40 von Jelimi.)
Beitrag #5
RE: Zuordnung von DS18B20 Adressen
Vielleicht hab ich mich falsch ausgedrückt, es geht um eine Heizungssteuerung mit 15 Sensoren.
Um diese möglichst einfach ändern zu können ohne ins Script einzugreifen lese ich alle Werte wie Temperaturen, Grenzwerte und Steuerzeiten aus einer SD-Karte ein.
D.h. auch jemand ohne Kenntnisse kann mit entsprechender Erklärung viele Parameter auf der SD-Karte ändern.
Und da auch mal ein DS18B20 kaputt geht (gerne in der Solaranlage wegen hoher Temperaturen) soll es möglich sein, einen neuen Sensor über schreiben der Adresse auf die SD-Karte nach Neustart des Programmes zu aktivieren und genau da komm ich nicht weiter.
Die Temperaturwerte u.s.w. einlesen und Variablen zuordnen ist kein Problem, 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

//alle DS18B20 Sensoren, die Adressen werden den einzelnen Fühlern zugeordnet
DeviceAddress Dachboden_0 = {0x28, 0xCA, 0xF8, 0xF7, 0x04, 0x00, 0x00, 0xBF};// Solaranlage (I)
DeviceAddress Dachboden_1 = {0x28, 0xCC, 0x51, 0xF7, 0x04, 0x00, 0x00, 0xCD};// Solaranlage (II)
DeviceAddress Dachboden_2 = {0x28, 0xE1, 0x2D, 0xDA, 0x04, 0x00, 0x00, 0x90};// Solarvorlauf auf dem Dachboden (III)
DeviceAddress Dachboden_3 = {0x28, 0x71, 0xBC, 0xF7, 0x04, 0x00, 0x00, 0xB6};// Solarruecklauf auf dem Dachboden (IIII)
DeviceAddress Dachboden_4 = {0x28, 0x9E, 0x47, 0x7F, 0x04, 0x00, 0x00, 0xA8};// Aussentemperatur Dachboden
DeviceAddress Keller_0 = {0x28, 0x7E, 0x09, 0x8E, 0x04, 0x00, 0x00, 0x34};// Gasbrenner neu
DeviceAddress Keller_3 = {0x28, 0xFE, 0xC6, 0x8E, 0x04, 0x00, 0x00, 0x93};// Kachelofen
DeviceAddress KellerNeu_0 = {0x28, 0xD6, 0x5A, 0x5A, 0x05, 0x00, 0x00, 0xB6};// Kessel oben
DeviceAddress KellerNeu_1 = {0x28, 0x98, 0xB5, 0x59, 0x05, 0x00, 0x00, 0xED};// Kessel halb oben
DeviceAddress KellerNeu_2 = {0x28, 0xE6, 0x46, 0x5A, 0x05, 0x00, 0x00, 0x06};// Kessel halb unten
DeviceAddress KellerNeu_3 = {0x28, 0x18, 0xCB, 0x59, 0x05, 0x00, 0x00, 0xC8};// Kessel unten


Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.10.2015, 10:44
Beitrag #6
RE: Zuordnung von DS18B20 Adressen
naja, ist das denn nicht egal, ob das Programm die Daten 1 sek später erst hat?
Man sorgt halt dafür, das die Ausgänge erst dann geschaltet werden, wenn die Daten geladen sind.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.10.2015, 10:57
Beitrag #7
RE: Zuordnung von DS18B20 Adressen
Klar ist das egal, die Zeit spielt keine Rolle.
Aber alles was ich bis jetzt versucht habe klappt nicht.
Weil ich die Sensoren ja mit DeviceAdress vor der setup deklariere , in der setup einlese und dann nicht noch ein zweites mal deklarieren kann.
Oder mach ich was falsch und das geht anders herum.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.10.2015, 11:58
Beitrag #8
RE: Zuordnung von DS18B20 Adressen
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 ?

Das lesen der Werte aus dem EEPROM oder von der SD Karte ist nicht das Problem, das ist händelbar.

@Jelimi, das mit dem deklarieren während dem Setup oder der Loop geht auch, wenn du dir mal die DS18B20 Beispiele durchschaust wo mit der Library mitgeliefert werden dann gibt es genug Code den man sich zu eigen machen kann. Dort werden auch nach einem Scan Sensoren abgefragt....hier mußt du dir nur die passenden Befehle raussuchen....fragt sich nun wer schneller ist....du mit dem recherchieren oder Binatone mit dem Code posten....Wink
Man darf gespannt sein.

@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.
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.360 09.01.2015 19:00
Letzter Beitrag: ArduPI
  Arduino UNO + DS18B20+ Temperaturschaltung robin 13 6.565 06.02.2014 19:47
Letzter Beitrag: robin
  Scanner für I2C-Adressen? alpenpower 2 3.978 11.09.2013 18:39
Letzter Beitrag: alpenpower

Gehe zu:


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