Hallo Ich habe mal wieder eine Frage ...

Vielleicht hat von Euch ja schon jemand Erfahrungen mit mehreren Dallas Temperatursensoren an einem Bus. Bisher habe ich mich mal anhand des Datenblatts und einem Beispiel von der MCS Site reingearbeitet.

Das Beispiel habe ich für 0.1 Grad genauigkeit und Ausgabe auf einem LCD modifiziert. Funktioniert wunderbar.
Code:
' ----------------------------------------------------------------
' Example measuring temperature using Dallas DS1820,
' with calculated for 0.1 C resolution and with 8-bit CRC!
' Bascom 8051 AN
' ----------------------------------------------------------------
'-------------------------------------------------------------------------------
'Anschluß der iButtons an Portd.3 am AT90S8515 Board
'GND     Schirm
'DQ      Weiß
'Vdd     braun
'-------------------------------------------------------------------------------
$regfile = "8515DEF.DAT"
$crystal = 4000000


Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.4 , Db6 = Porta.5 , Db7 = Porta.6 , E = Porta.2 , Rs = Porta.0

'*******************************************************************************
Config Lcd = 16 * 2                                         'configure lcd screen
Config 1wire = Portd.3                                      ' DS1820 on pin 12 (pull up)

Declare Sub Read1820
Declare Sub Crcit
Declare Sub Temperature

Dim Bd(9) As Byte
Dim I As Byte , Tmp As Byte
Dim Crc As Byte
Dim T As Integer , Temp As Single
Dim V As Byte

Cls                                                         'clear the LCD display
Lcd " ITG 2005"                                             'display this at the top line
Waitms 5
Lowerline                                                   'select the lower line
Waitms 5
Lcd " Temp. Messung  "                                      'display this at the lower line
Wait 5

Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32            ' replace ? with number (0-7)
Cursor Off Noblink
Cls

Locate 1 , 1 : Lcd "DEMO f" ; Chr(245) ; "r DS1820"
Locate 2 , 1 : Lcd "Temp.="

Do
   Temperature
   Waitms 250
Loop

End


'//////////////////////////////////////////////////////////////////////////////
Sub Temperature                                             ' actual measuring

   1wwrite &HCC : 1wwrite &H44                              ' start measure
   Waitms 300                                               ' wait for end of conversion
   Read1820                                                 ' read 9 bytes

   If Err = 1 Then                                          ' if there is no sensor
      Locate 2 , 8 : Lcd "  --  "                           ' we put "-- " on LCD
   Else
      If Crc = 0 Then                                       ' sensor present, check CRC
         Locate 2 , 8 : Lcd Fusing(temp , "#.##") ; Chr(0) ; "C"       ' CRC OK, print T*10 on LCD
      Else
         Locate 2 , 8 : Lcd "  **    "                      ' CRC NOT OK, "** " on LCD
      End If
   End If
End Sub

'//////////////////////////////////////////////////////////////////////////////
Sub Read1820                                                ' reads sensor ans calculate
                                                   ' T for 0.1 C
   1wreset                                                  ' reset the bus
   1wwrite &HCC                                             ' read internal RAM
   1wwrite &HBE                                             ' read 9 data bytest
   Bd(1) = 1wread(9)                                        ' read bytes in array
   1wreset                                                  ' reset the bus

   Crcit                                                    ' ckeck CRC
   If Crc = 0 Then                                          ' if is OK, calculate for
      Tmp = Bd(1) And 1                                     ' 0.1C precision
      If Tmp = 1 Then Decr Bd(1)
      T = Makeint(bd(1) , Bd(2))
      T = T / 2
      Temp = Bd(8) - Bd(7)
      Temp = Temp / Bd(8)
      Temp = T + Temp
      Temp = Temp - 0.25
   End If
End Sub

'//////////////////////////////////////////////////////////////////////////////
Sub Crcit                                                   ' calculate 8 bit CRC
                                                            ' bigger but faster
   Crc = 0                                                  ' needs a 256 elements table
   For I = 1 To 9
      Tmp = Crc Xor Bd(i)
      Crc = Lookup(tmp , Crc8)
   Next
End Sub

'//////////////////////////////////////////////////////////////////////////////
Crc8:
Data 0 , 94 , 188 , 226 , 97 , 63 , 221 , 131 , 194 , 156
Data 126 , 32 , 163 , 253 , 31 , 65 , 157 , 195 , 33 , 127
Data 252 , 162 , 64 , 30 , 95 , 1 , 227 , 189 , 62 , 96
Data 130 , 220 , 35 , 125 , 159 , 193 , 66 , 28 , 254 , 160
Data 225 , 191 , 93 , 3 , 128 , 222 , 60 , 98 , 190 , 224
Data 2 , 92 , 223 , 129 , 99 , 61 , 124 , 34 , 192 , 158
Data 29 , 67 , 161 , 255 , 70 , 24 , 250 , 164 , 39 , 121
Data 155 , 197 , 132 , 218 , 56 , 102 , 229 , 187 , 89 , 7
Data 219 , 133 , 103 , 57 , 186 , 228 , 6 , 88 , 25 , 71
Data 165 , 251 , 120 , 38 , 196 , 154 , 101 , 59 , 217 , 135
Data 4 , 90 , 184 , 230 , 167 , 249 , 27 , 69 , 198 , 152
Data 122 , 36 , 248 , 166 , 68 , 26 , 153 , 199 , 37 , 123
Data 58 , 100 , 134 , 216 , 91 , 5 , 231 , 185 , 140 , 210
Data 48 , 110 , 237 , 179 , 81 , 15 , 78 , 16 , 242 , 172
Data 47 , 113 , 147 , 205 , 17 , 79 , 173 , 243 , 112 , 46
Data 204 , 146 , 211 , 141 , 111 , 49 , 178 , 236 , 14 , 80
Data 175 , 241 , 19 , 77 , 206 , 144 , 114 , 44 , 109 , 51
Data 209 , 143 , 12 , 82 , 176 , 238 , 50 , 108 , 142 , 208
Data 83 , 13 , 239 , 177 , 240 , 174 , 76 , 18 , 145 , 207
Data 45 , 115 , 202 , 148 , 118 , 40 , 171 , 245 , 23 , 73
Data 8 , 86 , 180 , 234 , 105 , 55 , 213 , 139 , 87 , 9
Data 235 , 181 , 54 , 104 , 138 , 212 , 149 , 203 , 41 , 119
Data 244 , 170 , 72 , 22 , 233 , 183 , 85 , 11 , 136 , 214
Data 52 , 106 , 43 , 117 , 151 , 201 , 74 , 20 , 246 , 168
Data 116 , 42 , 200 , 150 , 21 , 75 , 169 , 247 , 182 , 232
Data 10 , 84 , 215 , 137 , 107 , 53
Dies ist für einen Sensor. Nur würde ich gerne mehrere Sensoren auswerten und jedem in sein eeprom eine Nummer für die Messstelle zuordnen um den jeweiligen angesprochen zu identifizieren. Momentan stehe ich da noch etwas ratlos da, wie das gehen soll.

Bin auf Eure Ideen und Tipps gespannt.

Gruß

Sven

edit: Schreibfehler in Titel korrigiert

edit: Bitte verwende die Code-Tokens (übersichtlicher)