@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







Zitieren

Lesezeichen