Code:' ############################################################################# ' 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
Lesezeichen