PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DS1820, suche ID-Nummern der Sensoren die Alarm Flag gesetz



Claus Mehrholz
29.10.2005, 10:29
Wie kann ich gezielt diejenigen Sensoren herausfinden, bei denen ein Alarmflag gesetzt ist? Auch hier sind mehrere Sensoren vom Typ DS1820 am 1-Drahtbus.
.
.
.
1WRESET
1WWRITE Alarm_search [&HEC]
?
?
?

…jetzt sollten die ID-Nrn. der Sensoren anstehen bei denen ein Alarmtemperaturwert (Scratchpad Byte 2 und 3) überschritten wurde...


Aber wie kann ich sie lesen bzw. speichern ??


Giebt es vielleicht ein Beispiel?

Beste Gruesse
Claus Mehrholz

01.11.2005, 21:45
natürlich mit nem 1wread befehl, aber ich muss erstmal drüber nachdenken, wie man mehrere id-s gleichzeitig ausliest, die teile senden dann ja ihre id....
ne aushilfslösung wenns dringend wäre, wäre sicherlich, das du es entweder manuell machst, oder aber, das du jedem einzeln sagst, er soll ne temp-conv machen, und danach fragst, ob er nen alarm hat, dann wüsstest du ja erstmal wer, ich werd mir aber nochmal gedanken machen

x-ryder
01.11.2005, 21:46
sorry, war ich ^^

Claus Mehrholz
02.11.2005, 20:43
tja, das dachte ich auch, das der 1wread befehl der richtige ist...
ist er auch, und doch kriege ich es nicht hin. Habe mal den Code
wie ich ihn bisher habe angehängt.

Wie bring ich denn den Code hier in ein Fenster?
Beste Grüße Claus

Claus Mehrholz
02.11.2005, 20:49
' ################################################## ###########################
' Zweck : Lesen der Alarm ID Nummern der DS1820 Sensoren am 1-Draht Bus
' : mit AVR Mega 32 auf STK 500 Bord
'
' Programm Name : C:\CMH\Eigene Dateien\AVRs\AVR_Bascom\...
' noch Progname : ...\Test_Progs\DS1820_Alarm_Sens_suchen.bas
' Stand : 28.10.2005
'
'
' Beschreibung : Den mittl. Pin des Temperatursensors mit PortD.0 verbinden.
' Pull Up Widerstand 4,7 kOhm zwischen PortA.0 und + 5 Volt
' nicht vergessen!
' __________________________________________________ __________________________

$regfile = "m32def.dat"
' Crystal = Taktfrequenz in Hz

$crystal = 3686400
$baud = 9600
Config 1wire = Porta.0 ' config PORTD.0 as 1-Wire Bus pin

' Definition der Konstanten zum Aufruf der DS1820 Befehle
Const Read_rom = &H33 'Read Rom
Const Skip_rom = &HCC 'Skip Rom
Const Convert_t = &H44 'Convert T
Const Read_ram = &HBE 'Read Sratchpad
Const Write_ram = &H4E 'Write Scratchpad
Const Copy_ram = &H48 'Copy Scratchpad
Const Recall_ee = &HB8 'Recall E²
Const Read_power = &HB4 'Read Power Supply
Const Match_rom = &H55 'Match Rom
Const Alarm_search = &HEC 'Alarm Search
Const Search_rom = &HF0 'Search Rom
'
Dim I As Byte ' Index für Zählschleife
Dim Anz_dev As Byte ' Anzahl der angeschlossenen Sensoren
Dim Busy As Byte ' Warte-Variable
Dim Sens_id_1(8) As Byte ' Sensor No 1 ID
Dim Sens_id_2(8) As Byte ' Sensor No 2 ID
Dim Sens_id_3(8) As Byte ' Sensor No 3 ID
Dim Alarm_id_1(8) As Byte ' Sensor No 1 Alarm ID
Dim Alarm_id_2(8) As Byte ' Sensor No 2 Alarm ID
Dim Alarm_id_3(8) As Byte ' Sensor No 3 Alarm ID
Dim Scrp1(9) As Byte ' Sceatchpad Sensor 1
Dim Scrp2(9) As Byte ' Sceatchpad Sensor 2
Dim Scrp3(9) As Byte ' Sceatchpad Sensor 3


' --- P r o g r a m m A n f a n g --- lesen der ID Nrn. am Bus ---

Anz_dev = 1wirecount()
Print ' nur Zeilenvorschub
Print ' nur Zeilenvorschub
Print " Folgende - " ; Anz_dev ; " - Sensoren sind am Bus: "
Print
Print " Sens ID von Temperatur Sensor 1 = ";
Sens_id_1(1) = 1wsearchfirst() ' 64 Bit-ID des ersten Sensors ermitteln
For I = 1 To 8
Print Hex(sens_id_1(i)) ; ' Print Id Nr. von Sensor 1
Next
Print
Print " Sens ID von Temperatur Sensor 2 = ";
Sens_id_2(1) = 1wsearchnext() ' 64 Bit-ID d. weiteren Sens. ermitteln
For I = 1 To 8
Print Hex(sens_id_2(i)); ' Print Id Nr. von Sensor 2
Next
Print
Print " Sens ID von Temperatur Sensor 3 = ";
Sens_id_3(1) = 1wsearchnext()
For I = 1 To 8
Print Hex(sens_id_3(i)); ' Print Id Nr. von Sensor 3
Next
Print

'----- Setzen von drei Alarm Werten --------------------------------------
'----- die Werte sollen so gewählt sein, dass mind. ein Alarm ansteht ----
1wreset ' 1-Wire Bus zurücksetzen (Reset)
1wverify Sens_id_1(1) ' gezieltes ansprechen von Sensor 1
1wwrite Write_ram ' Befehl &H33 = Write_Ram (Scratchpad)
1wwrite 27 ' Alarm wenn Temp höher als 27
1wwrite 23 ' Alarm wenn Temp tiefer als 23

1wreset ' 1-Wire Bus zurücksetzen (Reset)
1wverify Sens_id_2(1) ' gezieltes ansprechen von Sensor 2
1wwrite Write_ram ' Befehl &H33 = Write_Ram (Scratchpad)
1wwrite 52 ' Alarm wenn Temp höher als 52
1wwrite 50 ' Alarm wenn Temp tiefer als 50

1wreset ' 1-Wire Bus zurücksetzen (Reset)
1wverify Sens_id_3(1) ' gezieltes ansprechen von Sensor 3
1wwrite Write_ram ' Befehl &H33 = Write_Ram (Scratchpad)
1wwrite 11 ' Alarm wenn Temp höher als 11
1wwrite 44 ' Alarm wenn Temp tiefer als 44
1wreset
1wwrite Skip_rom
1wwrite Convert_t
Do ' Warteschleife um Temp. Wandlung im DS1820 abzuwarten
Busy = 1wread() ' Solange Busy ungleich &HFF; Wandlung läuft noch
Loop Until Busy = &HFF ' Temperaturwandlung fertig wenn Busy = &HFF
1wreset


'----- Suchen der Sensoren mit gesetztem Alarmflag ------------------

'----- A b -- h i e r -- k l a p p t -- e s -- n i c h t !!! --------
'--------------------------------------------------------------------
1wreset ' 1-Wire Bus zurücksetzen (Reset)
1wwrite Alarm_search ' Alarm ID's feststellen
Alarm_id_1(1) = 1wread(8) ' speichern der Alarm ID's 8 Bytes
Alarm_id_2(1) = 1wread(8) ' von evtl. allen Sensoren
Alarm_id_3(1) = 1wread(8) ' --- " ---"
1wreset

'----- Printen der ID-Nummern mit gesetztem Alarmflag ---------------
'----- Es kommt nur FF FF FF FF FF FF FF FF heraus ------------------
For I = 1 To 8
Print Hex(Alarm_id_1(i)) ; " "; ' Print ID's der Sensoren mit Alarn
Next
Print
For I = 1 To 8
Print Hex(Alarm_id_2(i)) ; " ";
Next
Print
For I = 1 To 8
Print Hex(Alarm_id_3(i)) ; " ";
Next
Print

End

Claus Mehrholz
06.11.2005, 09:26
Hallo zusammen,

klappt noch immer nicht, hat denn niemend hier mal diese Alarmflag setzerei bei Temperatur Über- oder Unterschreitung mit mehreren Sensoren DS 1820 genutzt bzw. ausprobiert?

Ich quäle mich schon zeit drei Wochen fast täglich damit herrum und kommme einfach nicht weiter.

Meine allerbesten Sonntagsgrüße aus Bad Honnef
Claus Mehrholz