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
Lesezeichen