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