@for_ro
Dein Lösungsvorschlag ist ja auch vollkommen in Ordnung, da gibts nichts dran auszusetzen. Der Schönheitsfehler ist jedoch, daß für jeden Sensor zusätzlich eine laufende Nummer zugewiesen werden muß, mit der du ja dann die absolute Position des Romcodes in der Subroutine ermittelst. Aber das ist eigentlich unnötig, weil es gerade dafür Labels gibt.
@Alle
Für diejenigen, die nicht so richtig wissen, worauf ich hinaus will, poste ich hier noch einen funktionsfähigen Code zum Auslesen mehrer DS1820 Temperatursensoren. Das ist wohl die Bascom-Handbuchlösung, wie ich derzeit benutze und PicNick ebenfalls vorgeschlagen hat.
Code:
'*******************************************************************************
'*** Temperaturmessung mit mehreren DS1820 Sensoren ***
'*******************************************************************************
'*** Autor: Screwdriver ***
'*** Datum: 09.01.2008 ***
'*******************************************************************************
'*******************************************************************************
'*** Konfiguration ***
'*******************************************************************************
Config 1wire = Portb.4 '1Wire-Anschluß festlegen
'1wire Konstanten
Const Ds1820 = &H10
Const Skip_rom = &HCC
Const Read_rom = &H33
Const Convertt = &H44
Const Match_rom = &H55
Const Read_ram = &HBE
Const Copy_ram = &H48
Const Recallee = &HB8
Const Readpower = &HB4
'*******************************************************************************
'*** Variablen ***
'*******************************************************************************
Dim Temperatur_aussen As Integer 'Temperaturen mit einer Nachkommastelle
Dim Temperatur_kessel As Integer
Dim Temperatur_hzg_vl As Integer
Dim Temperatur_hzg_rl As Integer
Dim Scratch(9) As Byte 'Scratch-Pad DS1820 Sensoren
'*******************************************************************************
'*** Deklaration Unterprogramme ***
'*******************************************************************************
Declare Sub Ds1820_convert_all()
Declare Sub Ds1820_temperature_read(temperature As Integer)
'*******************************************************************************
'*** HAUPTPROGRAM ***
'*******************************************************************************
Do
Call Ds1820_convert_all() 'Alle Sensoren Temperaturwandlung
Waitms 750
Restore Aussensensor
Call Ds1820_temperature_read(temperatur_aussen)
Print Temperatur_aussen
Restore Kesselsensor
Call Ds1820_temperature_read(temperatur_kessel)
Print Temperatur_kessel
Restore Hzg_vl_sensor
Call Ds1820_temperature_read(temperatur_hzg_vl)
Print Temperatur_hzg_vl
Restore Hzg_rl_sensor
Call Ds1820_temperature_read(temperatur_hzg_rl)
Print Temperatur_hzg_rl
Loop
End 'end program
'*******************************************************************************
'*** Unterprogramme ***
'*******************************************************************************
Sub Ds1820_convert_all()
1wreset
1wwrite Skip_rom
1wwrite Convertt
End Sub
'*******************************************************************************
Sub Ds1820_temperature_read(temperature As Integer)
Local Ds1820_temp As Byte 'Zählvariable
Local Ds1820_data As Byte 'Bytevariable
1wreset
1wwrite Match_rom
For Ds1820_temp = 1 To 8 'Romcode aus Flash lesen
Read Ds1820_data
1wwrite Ds1820_data
Next Ds1820_temp
1wwrite Read_ram
Scratch(1) = 1wread(9) 'DS1820 auslesen
If Crc8(scratch(1) , 8) = Scratch(9) Then 'CRC8-Check
Temperature = Makeint(scratch(1) , Scratch(2))
Temperature = Temperature * 5 'Entspricht 10facher Temperatur
End If
End Sub
'*******************************************************************************
'*** DS1820 Romcodes ***
'*******************************************************************************
Aussensensor:
Data 16 , 135 , 205 , 170 , 0 , 8 , 0 , 158
Kesselsensor:
Data 16 , 121 , 191 , 192 , 0 , 8 , 0 , 154
Hzg_vl_sensor:
Data 16 , 5 , 16 , 219 , 0 , 8 , 0 , 143
Hzg_rl_sensor:
Data 16 , 101 , 203 , 192 , 0 , 8 , 0 , 206
Lesezeichen