Forum: Mikrocontroller und Digitale Elektronik 1Wire Sensor Identifizierung


von hotdog (Gast)


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

von hotdog (Gast)


Lesenswert?

Kleiner Nachtrag zum Schluss sollten ca. 30Sensoren am Bus Hängen!

LG
ToM

von Tom P. (booner)


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

: Bearbeitet durch User
von hotdog (Gast)


Lesenswert?

Klingt recht interessant!
Ich staune immer wieder was für gute Ideen hier im Forum eingestellt 
werden!

LG
ToM

von Grundschüler (Gast)


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

von Hotdog (Gast)


Lesenswert?

Tom P. schrieb:
> Die Kette mit ca. 80 Sensoren
Hast Du die Sensoren direkt versorgt?

TOM

von Hotdog (Gast)


Lesenswert?

Grundschüler schrieb:
> switch-abfrage

Kan dein Beispiel nicht verstehen!

TOM

von Hotdog (Gast)


Lesenswert?

Grundschüler schrieb:
> switch-abfrage

Kan dein Beispiel nicht verstehen!

TOM

von Tom P. (booner)


Lesenswert?

Hei,

ja, direkt versorgt. Bei 80 Stück in Reihe wollte ich kein Risiko 
eingehen und die parasitäre Versorgung brachte für mich keinen Vorteil.


Grüße,

Tom

von Konrad S. (maybee)


Lesenswert?

Hotdog schrieb:
> Kan dein Beispiel nicht verstehen!

Mach dir nichts draus, das hat er selbst auch nicht. Sonst hätte er es 
anders gemacht.

von Hotdog (Gast)


Lesenswert?

Tom P. schrieb:
> ja, direkt versorgt. Bei 80 Stück in Reihe wollte ich kein Risiko
> eingehen und die parasitäre Versorgung brachte für mich keinen Vorteil.

Kann ich verstehen!
Hast Du es auch nie versucht? NUR so au Interesse

Lg
Tom

von Konrad S. (maybee)


Lesenswert?

Ich habe mal gut 20 Stück an einem ca. 15m langen Kabel mit parasitärer 
Versorgung getestet: kein Problem. Beim Gegentest mit VCC meldeten 
dagegen einige Sensoren, dass sie parasitär versorgt werden.

von Tom P. (booner)


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

von hotdog (Gast)


Lesenswert?

Tom P. schrieb:
> Was hast du mit Deiner Sensorkette vor?

Ich möchte mit meiner Sensor Kette meine Heizung und Klimaanlage 
steuern!

von Grundschüler (Gast)


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.

von Christian H. (netzwanze) Benutzerseite


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.

von Tom P. (booner)


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

von hotdog (Gast)


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.

von (prx) A. K. (prx)


Lesenswert?

hotdog schrieb:
> Ich möchte mit meiner Sensor Kette meine Heizung und Klimaanlage
> steuern!

Anhand von 30 Sensoren??? Wohnst du im Buckingham Palace?

von hotdog (Gast)


Lesenswert?

A. K. schrieb:
> Anhand von 30 Sensoren??? Wohnst du im Buckingham Palace?

Nein bald in einem kleinem Häuschen!
Und ich neige zur Übertreibung. Mir wurde immer gelernt viel hilft viel 
;-)

von hotdog (Gast)


Lesenswert?

Habe noch eine Frage!
Gibt es ein spezielles Kommando um das EEProm zu schreiben!
Irgendwas mache ich falsch ich lese immer nur ff aus dem EEprom egal was 
ich vorher schreibe!

LG
TOM

von Konrad S. (maybee)


Lesenswert?

Dieser Link aus Temperatursensor liefert Beispiele für alle 
DS18B20-Funktionen: 
http://siwawi.bauing.uni-kl.de/avr_projects/tempsensor/

von Hotdog (Gast)


Lesenswert?

Danke für den Link werde wir die Beispiele ansehen!
Lg
Tom

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.