1Wire Sensor Identifizierung

Gast #3698678
Lesenswert?

Schönen guten Morgen,
ich bin gerade am Grübeln wie ich eine Temperatursensornetzwerk Software 
mäßig aufbauen sollte.
Wie aus dem Titel hervor geht möchte ich 1Wire Sensoren verwenden.
Ich habe bereits mit Hilfe der Codesammlung und das Durchstöbern Vieler 
Foren Beiträge den 1wire Bus soweit in griff das ich mehrere Sensoren 
mitsamt Id auslesen kann.
Nun zu meiner Frage wie wird in der Praxis vorgegangen um mehrere 
Sensoren zu Identifizieren?
Wird nach jedem Einlesen die Id verglichen und so dem Standort 
zugeteilt?
Oder wird beim einschalten eine Art Tabelle erstellt und dann anhand der 
Regenfolge mit der sich die Sensoren Melden gearbeitet?
Oder Denke ich viel zu kompliziert und es gibt noch eine viel 
einfacheren und effektiveren Weg?

Vielen Dank für Eure Hilfe

Tom
#3698699
Lesenswert?

Hei,

also ich hab auch mal nach einer Lösung gesucht.
Da ich auch einzelne Sensoren austauschbar machen wollte, ohne etwas am 
Programm zu ändern habe ich folgendes gemacht:

Jeder der Temperatursensoren hat ein E²prom mit zwei Byte (wenn ich mich 
recht erinnere) und da habe ich seine "Position" reingeschrieben.

Der µC sucht nun alle Sensoren im Bus und speichert die ID in ein Array, 
dann liest er dessen Temperatur aus und speichert diese ebenfalls in ein 
Array und zwar an die Adresse, die im E²prom hinterlegt ist.
Wird nun ein Sensor ausgetauscht, muss nur der µC neu gestartet werden, 
damit er den neuen Sensor mit ins Adressarray aufnimmt.

https://www.youtube.com/watch?v=-4rBRaiAmNc

Die Kette mit ca. 80 Sensoren habe ich per Peltierelement in Reihe 
gebracht.
Dazu einen einzelnen Sensor unter einen Schwellwert abgekühlt und diesem 
dann seine Position in der Kette ins E²prom geschrieben...
Die Sensoren werden dann natürlich wild durcheinander ausgelesen und 
nicht nach ihrer Position, aber das ist mir egal.


Grüße,

Tom
Gast #3698710
Lesenswert?

switch-abfrage:
1
    
2
if(CelsiusTemp==849||CelsiusTemp==850||CelsiusTemp==851)//kein Messergebnis
3
{
4
//  lcd_int(CelsiusTemp);      //char
5
//  lcd_goto(1,1);
6
}else{
7
 switch ((id[1]<<8)+id[7])// nach crc-wert sortieren
8
  {
9
case (CRCsensor01):tr_lub  =CelsiusTemp;break;
10
case (CRCsensor02):tr_rl   =CelsiusTemp;break;
11
case (CRCsensor03):tr_nob  =CelsiusTemp;break;
12
case (CRCsensor04):tr_wzl  =CelsiusTemp;break;
13
case (CRCsensor05):tr_rlu  =CelsiusTemp;break;
14
case (CRCsensor06):tr_erdrl  =CelsiusTemp;break;
15
case (CRCsensor07):tr_nol  =CelsiusTemp;break;
16
case (CRCsensor08):tr_vl1  =CelsiusTemp;break;
17
case (CRCsensor09):tr_erdvl  =CelsiusTemp;break;
18
case (CRCsensor10):tr_wzb  =CelsiusTemp;
19
error_tr_wzb=0;
20
break;
21
case (CRCsensor11):tr_leb  =CelsiusTemp;break;
22
case (CRCsensor12):tr_vlu  =CelsiusTemp;break;
23
case (CRCsensor13):tr_ww   =CelsiusTemp;
24
error_tr_ww=0;
25
break;
26
case (CRCsensor14):tr_lul  =CelsiusTemp;break;
27
case (CRCsensor15):tr_au   =CelsiusTemp;break;
28
case (CRCsensor16):tr_lel  =CelsiusTemp;break;
29
  }
30
}// if 850
31

32
//
#3698746
Lesenswert?

Hei,

nein, parasitäre Versorgung habe ich nie getestet.
Nur den Pullup-Widerstand musste ich variieren.
(oder hab einfach nach der Hälfte noch einen reingelötet. Weiß nicht 
mehr so genau.)
Da ich bis an die 100°C messen möchte, ist die parasitäre Versorgung eh 
nicht angebracht.

Was hast du mit Deiner Sensorkette vor?


Grüße,

Tom
Gast #3698763
Lesenswert?

Hotdog schrieb:
> Grundschüler schrieb:
>> switch-abfrage
>
> Kan dein Beispiel nicht verstehen!



nach dem Programmteil, in dem die Temperatur ausgelesen wird, kommt die 
switch Abfrage. Jeder Sensor hat 8byte id. Zur eindeutigen 
Identifizierung reichen byte1 und byte7. Jeder Sensor erhält ein 
entsprechendes define:

#define CRCsensor01 0x7f21//LuBoden
#define CRCsensor02 0x7f8e//Rücklauf
#define CRCsensor03 0x8f31//NoBoden
#define CRCsensor04 0x3bb2//178  //WZ-Luft
#define CRCsensor05 0x63fb//Ladepumpe

mit switch schaut das programm, welcher sensor gerade ausgelesen wurde 
und weist der Temperaturvariable dieses Sensors die gerade gemessene 
Temperatur zu.
Persönliche Seite #3698824
Lesenswert?

Wenn Du irgendwann einen Sensor austauschen musst, ist der Quellcode des 
Programms herauzusuchen. Dann muss er noch verstanden werden. Nun die 
entsprechenden Codebereiche anpassen, neu compilieren, Programmer 
suchen. Wie war noch die Anschlussbelegung meines Programmierinterfaces? 
Ach ja, steht ja in der Doku - wo ist die nur?...

Nicht wirklich erstrebenswert.
#3698872
Lesenswert?

Hei,

ja so ist es. Bei einem Bastelobjekt mit wenigen Sensoren und keiner 
allzu langen Lebensdauer mag ein manuelles Ändern noch möglich sein. 
Aber bei mehr Sensoren verliert man ganz schnell den Überblick. (eigene 
Erfahrung  ;-) )
Allerdings muss man bei meiner Methode eine Art Programmiergerät für den 
Sensor basteln, um ihm einmalig seine Position ins Hirn zu brennen... Da 
reicht aber schon ein einfacher Arduino+Widerstand.


Grüße,

Tom
Gast #3699023
Lesenswert?

Ich werde versuchen die Lösung von Tom (ID ins EEprom)zu verwirklichen.
Ich werde das so machen das ich ich die neuen Sensoren im Webinterface 
Adressieren kann.
Habe zwar das EEprom von den Sensoren noch nicht verwendet aber ich 
hoffe das es kein Hexenwerk ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren