Du musst erst von allen Sensoren die Adresse wissen (vorher auslesen)
Wenn Du die dann hast, kannst Du jeden Sensor gezielt ansprechen.
Hab das so gelöst:
(Der Code mit den Anführungsstrichen ist für eine genauere Messung)
Code:'' '-------------------------------------------------------------- ' Datei: City_el_Temperaturmessung_2_DS1822.BAS ' Demo: 3-Draht Temperaturmessung mit dem DS-18S22, mit 9-Bit Auflösung ' Port D ist fürs LCD-Display ' An PortC.6 "hängen" 2 "1-Wire" i-Buttons ' Lcd-Display 1x16 an PortC '-------------------------------------------------------------- $crystal = 8867238 Config 1wire = Portc.6 Const Ds1822 = &H22 Const Skiprom = &HCC ' überspringe ROM Kommandos Const Read_rom = &H33 ' Lese ROM Const Convertt = &H44 ' Start Temperaturmessung Const Match_rom = &H55 'Suche einzelnen Sensor Const Read_ram = &HBE ' Lese Scratchpad RAM Const Write_ram = &H4E ' Schreibe Scratchpad RAM Const Copy_ram = &H48 ' Kopiere Scratchpad RAM Const Aufloesung = &H5F ' Auflösung 11 Bit Const Th = 00 ' Alarmschwelle High Const Tl = 00 ' Alarmschwelle Low 'Dim Scratch(2) As Byte ' Sratchpad RAM Kopie Dim Lsb As Byte Dim Msb As Byte Dim I As Byte ' Index für Schleifenzähler Dim Temp As Word ' Temperaturwert 1. Sensor Dim Temp1 As Integer Dim Stemp_1 As Single Dim Stemp_2 As Single Deflcdchar 1 , 28 , 20 , 28 , 32 , 32 , 32 , 32 , 32 ' LCD Zeichen für °C Cls Cursor Off '******************************************************************************* '### Alle 1-Wire Devices initialisieren ### 1wreset 1wwrite Skiprom 'überspringe Adressierung 1wwrite Write_ram 'Scratchpad zum schreiben vorbereiten 1wwrite Th 'Alarmschwelle Max.Temp 1wwrite Tl 'Alarmschwelle Min.Temp 1wwrite Aufloesung 'Konfigurationsbyte ins Scratchpad schreiben... 1wwrite Copy_ram '...und im EEProm sichern '******************************************************************************* 'Beginn 1.Sensor Do 1wreset '1-Wire Bus reseten 1wwrite Skiprom 'Adressierung überspringen 1wwrite Convertt 'Temperaturmessung bei allen Sensoren einleiten 1wreset 1wwrite Match_rom 'Gezielten Sensor anwählen.... 1wwrite 34 'Werte stammen aus Sensor,Dezimal 1wwrite 211 1wwrite 182 1wwrite 22 1wwrite 0 1wwrite 0 1wwrite 0 1wwrite 234 1wwrite Read_ram '....und auslesen (Scratch Pad) 'Scratch(1) = 1wread() 'Scratch(2) = 1wread() Lsb = 1wread() Msb = 1wread() 'Temp = Scratch(2) 'MSB holen 'Shift Temp , Left , 8 'Platz für LSB machen 'Temp = Temp + Scratch(1) 'zu Word Format zusammenfügen 'Temp1 = Temp 'Integer Format 'Stemp = Temp1 / 16 Temp = Msb 'MSB holen Shift Temp , Left , 8 'Platz für LSB machen Temp = Temp + Lsb 'zu Word Format zusammenfügen Temp1 = Temp 'Integer Format Stemp_1 = Temp1 / 16 Locate 1 , 1 Lcd "T1:"; Lcd Fusing(stemp_1 , "##.#"); Lcd Chr(1) '############################################################################### 'Beginn 2ter Sensor 1wreset 'Reset i-Button 1wwrite Match_rom 1wwrite &H22 1wwrite &H2F 1wwrite &HC6 1wwrite &H16 1wwrite &H00 1wwrite &H00 1wwrite &H00 1wwrite &H88 1wwrite Read_ram 'lese Scratch Pad Lsb = 1wread() Msb = 1wread() 'Temp = Scratch(2) 'MSB holen 'Shift Temp , Left , 8 'Platz für LSB machen 'Temp = Temp + Scratch(1) 'zu Word Format zusammenfügen 'Temp1 = Temp 'Integer Format 'Stemp = Temp1 / 16 Temp = Msb 'MSB holen Shift Temp , Left , 8 'Platz für LSB machen Temp = Temp + Lsb 'zu Word Format zusammenfügen Temp1 = Temp 'Integer Format Stemp_2 = Temp1 / 16 'Scratch(1) = 1wread() 'LSB und MSB holen 'Scratch(2) = 1wread() 'Temp = Scratch(2) 'MSB holen 'Shift Temp , Left , 8 'Platz für LSB machen 'Temp = Temp + Scratch(1) 'zu Word Format zusammenfügen 'Temp1 = Temp 'Integer Format ' Stemp_a = Temp1 / 16 Locate 2 , 1 Lcd "T2:"; Lcd Fusing(stemp_2 , "##.#"); Lcd Chr(1) Loop







Zitieren

Lesezeichen