- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 9 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 88

Thema: mehrere DS18S20 an einem 1 wire Bus

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    22.03.2005
    Beiträge
    91

    mehrere DS18S20 an einem 1 wire Bus

    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)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    35
    Beiträge
    1.614
    hast du ICQ? da könnte ich mal nen paar sachen besprechen und dann hinterher den code hier reinstellen...

    meine numma iss: 196004120
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  3. #3
    Gast
    Hoi!
    Japp habe dich autorisiert. Werde vermutlich morgen abend mal on sein.

    Gruß

    Sven

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    09.05.2005
    Beiträge
    35
    Hi,
    ich hol den Thread mal wieder aus der versenkung.
    Hat jemand von euch inzwischen das Auslesen von mehreren Ds1820 hinbekommen?
    Ein Sensor ist kein Problem, aber bei zwei bekomm ich das irgendwie nichtmehr hin! Achja, der Sensor ist über drei Leitungen angeschlossen, also nicht im parasite modus!
    Hier mal mein Code:
    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    
    Config 1wire = Portb.0
    
    Config Lcd = 40 * 4
    Config Lcdpin = Pin , Rs = Portb.6 , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , E2 = Portb.2
    
    
    Dim ___lcdno As Bit
    Dim T1 As Byte
    Dim T2 As Byte
    Dim I As Byte
    Dim Id1 As Word
    Dim Id2 As Word
    Dim Ar1(2) As Byte
    Dim Ar2(2) As Byte
    
     ___lcdno = 0
      Initlcd
      Cursor Off
      Cls
    
     ___lcdno = 1
     Initlcd
     Cursor Off
     Cls
    
    
    
    
    Id1 = 1wsearchfirst()
    Id2 = 1wsearchnext()
    
    Do
    1wreset                                                     'reset
    1wwrite &H55                                                'Match Rom command
    1wwrite Id1                                                 'Id von Sensor 1
    1wwrite &H44                                                'Convert T
    
    Waitms 300                                                  'warten bis convert T fertig ist
    1wreset                                                     'reset
    1wwrite &H55                                                'match rom command
    1wwrite Id1                                                 'id von sensor 1
    1wwrite &HBE                                                'scratchpad lesen
    Ar1(1) = 1wread(1)                                          'erstes byte auslesen, da steht Temp drin
    Ar1(2) = 1wread(1)                                          'zweites Byte auslesen, wenn 00000000 dann pos vorzeichen, wenn 11111111 dann neg vorzeichen
    
    
    
    1wreset                                                     'reset
    1wwrite &H55                                                'Match Rom command
    1wwrite Id2                                                 'Id von Sensor 2
    1wwrite &H44                                                'Convert T
    
    Waitms 300                                                  'warten bis convert T fertig ist
    1wreset                                                     'reset
    1wwrite &H55                                                'match rom command
    1wwrite Id2                                                 'id von sensor 2
    1wwrite &HBE                                                'scratchpad lesen
    Ar2(1) = 1wread(1)                                          'erstes byte auslesen, da steht Temp drin
    Ar2(2) = 1wread(1)                                          'zweites Byte auslesen, wenn 00000000 dann pos vorzeichen, wenn 11111111 dann neg vorzeichen
    
    
    
    
    
     ___lcdno = 0
    
    
       Upperline
        Lcd "Temperatur 1:" ; Ar1(2) ; " " ; Ar1(1)
    
       Lowerline
        Lcd "Temperatur 2:" ; Ar2(2) ; " " ; Ar2(1)
    
     ___lcdno = 1
    
      Upperline
       Lcd "ID 1:" ; Id1
      Lowerline
       Lcd "ID 2:" ; Id2
    
    
    
    Loop

    Ich bekomme immer als wert für das erste Byte 255 und für das zweite auch 255, das kann ja nicht stimmen.
    MfG
    Florian

  5. #5
    Gast
    Hallo avrflo,

    Dein Fehler liegt in der Deklaration von ID1 und ID2. Der DS18S20 besitzt eine Adresse die aus 8 Bytes besteht. Da Du nur ein WORD definiert hast, werden die DS18S20 nie richtig adressiert.
    Ich würde ID folgendermassen definieren:
    Code:
     
    DIM ID1(8) as Byte
    DIM ID2(8) as Byte
    
    ...
    
    ID1(1) = 1wsearchfirst()
    
    usw.
    Wenn alles klappt, kannst Du den Code ja mal hier reinstellen.

    mfg

    AVRWALLI

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    09.05.2005
    Beiträge
    35
    Hallo AVRWALLI,
    danke für den Tipp, man sollte das Datasheet halt genau lesen, jetzt klappts!
    Hab nurnoch ein kleines Problem:

    Ich bekomm ne Temperatur von 52°C raus, es ist zwar grad richtig heiß, aber 52 hats wohl doch nicht ganz, die Hälfte würde stimmen. Ist das irgandwie in nem anderen Datenformat codiert oder so?, ich versteh da das Datasheet auf S.3 net so ganz.
    Datasheet:
    http://pdfserv.maxim-ic.com/en/ds/DS1820-DS1820S.pdf

    Achja, hier mein Code, ich werd, wenn er komplett fertig ist nen neuen Beitrag aufmachen, wo dann der Code von der kompletten Wetterstation mit RTC, zwei Temp Sensoren und nem Drucksensor als Barometer drin ist.
    Hier also meine Code:

    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    
    Config 1wire = Portb.0
    
    Config Lcd = 40 * 4
    Config Lcdpin = Pin , Rs = Portb.6 , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , E2 = Portb.2
    
    
    Dim ___lcdno As Bit
    Dim T1 As Byte
    Dim T2 As Byte
    Dim I As Byte
    Dim Id1(8) As Byte
    Dim Id2(8) As Byte
    Dim Ar1(2) As Byte
    Dim Ar2(2) As Byte
    
    
     ___lcdno = 0
      Initlcd
      Cursor Off
      Cls
    
     ___lcdno = 1
     Initlcd
     Cursor Off
     Cls
    
    
    
    
    Id1(1) = 1wsearchfirst()
    Id2(1) = 1wsearchnext()
    
    
    Do
    1wreset                                                     'reset
    1wwrite &H55                                                'Match Rom command
    1wwrite Id1(1) , 8                                          'Id von Sensor 1
    1wwrite &H44                                                'Convert T
    
    Waitms 300                                                  'warten bis convert T fertig ist
    1wreset                                                     'reset
    1wwrite &H55                                                'match rom command
    1wwrite Id1(1) , 8                                          'id von sensor 1
    1wwrite &HBE                                                'scratchpad lesen
    Ar1(1) = 1wread(1)                                          'erstes byte auslesen, da steht Temp drin
    Ar1(2) = 1wread(1)                                          'zweites Byte auslesen, wenn 00000000 dann pos vorzeichen, wenn 11111111 dann neg vorzeichen
    
    
    Waitms 500
    1wreset                                                     'reset
    1wwrite &H55                                                'Match Rom command
    1wwrite Id2(1) , 8                                          'Id von Sensor 2
    1wwrite &H44                                                'Convert T
    
    Waitms 300                                                  'warten bis convert T fertig ist
    1wreset                                                     'reset
    1wwrite &H55                                                'match rom command
    1wwrite Id2(1) , 8                                          'id von sensor 2
    1wwrite &HBE                                                'scratchpad lesen
    Ar2(1) = 1wread(1)                                          'erstes byte auslesen, da steht Temp drin
    Ar2(2) = 1wread(1)                                          'zweites Byte auslesen, wenn 00000000 dann pos vorzeichen, wenn 11111111 dann neg vorzeichen
    
    T1 = Ar1(1)
    T2 = Ar2(1)
    
    
    
    
    
    
     ___lcdno = 0
    
    
      Upperline
    
        If Ar1(2) = 0 Then                                      'wenn byte 2 aus dem sensor = 0 dann temp pos, sonst neg
           Lcd "Temperatur 1:" ; " " ; T1
    
         Else
          Lcd "Temperatur 1:" ; "-" ; T1
    
        End If
    
      Lowerline
    
            If Ar2(2) = 0 Then                                  'wenn byte 2 aus dem sensor = 0 dann temp pos, sonst neg
           Lcd "Temperatur 2:" ; " " ; T2
    
         Else
          Lcd "Temperatur 2:" ; "-" ; T2
    
        End If
    
     ___lcdno = 1
    
      Upperline
       Lcd "ID 1:" ; Id1(1) ; Id1(2) ; Id1(3) ; Id1(4) ; Id1(5) ; Id1(6) ; Id1(7) ; Id1(8)
    
      Lowerline
       Lcd "ID 2:" ; Id2(1) ; Id2(2) ; Id2(3) ; Id2(4) ; Id2(5) ; Id2(6) ; Id2(7) ; Id2(8)
    
    Waitms 500
    
    Loop
    Gruß
    Florian

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    19.01.2005
    Beiträge
    17
    Hallo Florian,

    so lese ich den DS18S20 aus und rechne um:

    Code:
    Sub 18s20_auslesen
        1wreset Pinc , F                                        ' Reset
        1wwrite Skip_rom , 1 , Pinc , F                         ' Chip ansprechen
        1wwrite Read_ram , 1 , Pinc , F                         ' Befehl zum Auslesen des Rams
        Bd(1) = 1wread(9 , Pinc , F)                            ' 9 Bytes lesen
        1wreset Pinc , F                                        ' Reset
        Temp = Bd(2)
        Shift Temp , Left , 8
        Temp = Temp + Bd(1)
        If Temp > $f000 Then
          Temp = $ffff - Temp
          Temp1 = Temp + 1
          Grad = Temp1 * -0.0625
        Else
          Grad = Temp * 0.0625                                  ' Auflösung 12 Bit
        End If
    End Sub
    In Grad steht die umgerechnete Temperatur. Störe Dich nicht an de Parametern hinter den 1Wire-Befehlen, die geben nur an welcher Port und welcher Pin benutzt werden soll. Denke daran, es müssen 9 Byte ausgelesen werden.
    Ich hoffe, es hilft Dir weiter.

    mfg

    AVRWALLI

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    09.05.2005
    Beiträge
    35
    Hallo,
    ich habe es inzwischen auch hinbekommen, im Datasheet steht ja, dass die ausgeleseneTemperatur durch zwei geteilt werden muss. Ich lese nur die ersten zwei Bytes aus, das reicht ja, ich mache auch keine CRC Prüfung oder so, mir reichen 0,5° Genauigkeit. Im ersten Byte steht ja die Temp und im zweiten das Vorzeichen, mehr brauch ich nicht und es funktioniert auch so.
    Hier also mein endgültiger Code:
    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    
    Config 1wire = Portb.0
    
    Config Lcd = 40 * 4
    Config Lcdpin = Pin , Rs = Portb.6 , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , E2 = Portb.2
    
    
    Dim ___lcdno As Bit
    Dim T1 As Byte
    Dim T2 As Byte
    Dim I As Byte
    Dim Id1(8) As Byte
    Dim Id2(8) As Byte
    Dim Ar1(2) As Byte
    Dim Ar2(2) As Byte
    
    
     ___lcdno = 0
      Initlcd
      Cursor Off
      Cls
    
     ___lcdno = 1
     Initlcd
     Cursor Off
     Cls
    
    
    
    
    Id1(1) = 1wsearchfirst()
    Id2(1) = 1wsearchnext()
    
    
    Do
    1wreset                                                     'reset
    1wwrite &H55                                                'Match Rom command
    1wwrite Id1(1) , 8                                          'Id von Sensor 1
    1wwrite &H44                                                'Convert T
    
    Waitms 300                                                  'warten bis convert T fertig ist
    1wreset                                                     'reset
    1wwrite &H55                                                'match rom command
    1wwrite Id1(1) , 8                                          'id von sensor 1
    1wwrite &HBE                                                'scratchpad lesen
    Ar1(1) = 1wread(1)                                          'erstes byte auslesen, da steht Temp drin
    Ar1(2) = 1wread(1)                                          'zweites Byte auslesen, wenn 00000000 dann pos vorzeichen, wenn 11111111 dann neg vorzeichen
    
    
    Waitms 500
    1wreset                                                     'reset
    1wwrite &H55                                                'Match Rom command
    1wwrite Id2(1) , 8                                          'Id von Sensor 2
    1wwrite &H44                                                'Convert T
    
    Waitms 300                                                  'warten bis convert T fertig ist
    1wreset                                                     'reset
    1wwrite &H55                                                'match rom command
    1wwrite Id2(1) , 8                                          'id von sensor 2
    1wwrite &HBE                                                'scratchpad lesen
    Ar2(1) = 1wread(1)                                          'erstes byte auslesen, da steht Temp drin
    Ar2(2) = 1wread(1)                                          'zweites Byte auslesen, wenn 00000000 dann pos vorzeichen, wenn 11111111 dann neg vorzeichen
    
    T1 = Ar1(1) / 2
    T2 = Ar2(1) / 2
    
    
    
    
    
    
     ___lcdno = 0
    
    
      Upperline
    
        If Ar1(2) = 0 Then                                      'wenn byte 2 aus dem sensor = 0 dann temp pos, sonst neg
           Lcd "Temperatur 1:" ; " " ; T1
    
         Else
          Lcd "Temperatur 1:" ; "-" ; T1
    
        End If
    
      Lowerline
    
            If Ar2(2) = 0 Then                                  'wenn byte 2 aus dem sensor = 0 dann temp pos, sonst neg
           Lcd "Temperatur 2:" ; " " ; T2
    
         Else
          Lcd "Temperatur 2:" ; "-" ; T2
    
        End If
    
     ___lcdno = 1
    
      Upperline
       Lcd "ID 1:" ; Id1(1) ; Id1(2) ; Id1(3) ; Id1(4) ; Id1(5) ; Id1(6) ; Id1(7) ; Id1(8)
    
      Lowerline
       Lcd "ID 2:" ; Id2(1) ; Id2(2) ; Id2(3) ; Id2(4) ; Id2(5) ; Id2(6) ; Id2(7) ; Id2(8)
    
    Waitms 500
    
    Loop
    Gruß und Danke
    Florian

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    39
    Beiträge
    685
    Ich weiß, der Thread ist schon sehr alt.

    Die 2 Code's hier sind ja echt wunderbar =D>
    Habe diese nur noch mal zusammengefasst und auf eine Kommastelle gebracht.
    Also 2 DS1820 mit 0,1 Grad Auflösung.
    Wen es interessiert:

    Code:
      $regfile = "m32def.dat"
      $framesize = 32
      $swstack = 256
      $hwstack = 128
      $crystal = 16000000
      $baud = 9600
    
    Config 1wire = Portd.6
    
    Dim T As Integer
    Dim T1 As Integer
    Dim T2 As Integer
    Dim T3 As Integer
    Dim T4 As String * 10
    Dim T5 As String * 10
    Dim T6 As Single
    Dim T7 As Single
    Dim Id1(8) As Byte
    Dim Id2(8) As Byte
    Dim Ar1(9) As Byte
    Dim Ar2(9) As Byte
    Dim I As Byte , Tmp As Byte , Tmp2 As Byte
    Dim Crc As Byte
    
    Declare Sub Crcit
    Declare Sub Crcit2
    
    Id1(1) = 1wsearchfirst()
    Id2(1) = 1wsearchnext()
    
    
    Do
    Print " "
    1wreset
    1wwrite &H55
    1wwrite Id1(1) , 8
    1wwrite &H44
    
    Waitms 300
    1wreset
    1wwrite &H55
    1wwrite Id1(1) , 8
    1wwrite &HBE
    Ar1(1) = 1wread(9)
    1wreset
    Crcit
    If Crc = 0 Then
          Tmp = Ar1(1) And 1
          If Tmp = 1 Then Decr Ar1(1)
          T = Makeint(ar1(1) , Ar1(2))
          T = T * 50
          T = T - 25
          T1 = Ar1(8) - Ar1(7)
          T1 = T1 * 100
          T1 = T1 / Ar1(8)
          T = T + T1
          T = T / 10
          T6 = T / 10
          T4 = Fusing(t6 , "#.#")
    
    End If
    
    Waitms 500
    1wreset
    1wwrite &H55
    1wwrite Id2(1) , 8
    1wwrite &H44
    
    Waitms 300
    1wreset
    1wwrite &H55
    1wwrite Id2(1) , 8
    1wwrite &HBE
    Ar2(1) = 1wread(9)
    1wreset
    Crcit2
    If Crc = 0 Then
          Tmp2 = Ar2(1) And 1
          If Tmp2 = 1 Then Decr Ar2(1)
          T2 = Makeint(ar2(1) , Ar2(2))
          T2 = T2 * 50
          T2 = T2 - 25
          T3 = Ar2(8) - Ar2(7)
          T3 = T3 * 100
          T3 = T3 / Ar2(8)
          T2 = T2 + T3
          T2 = T2 / 10
          T7 = T2 / 10
          T5 = Fusing(t7 , "#.#")
    
    End If
    
    
    
    
    Print "Temperatur in der Botwanne:" ; " " ; T4 ; " " ; "Grad Celsius"
    Print "Temperatur am Gehäuse:" ; "  " ; " " ; T5 ; " " ; "Grad Celsius"
    
    Waitms 500
    
    Loop
    
    Sub Crcit
    
       Crc = 0
       For I = 1 To 9
          Tmp = Crc Xor Ar1(i)
          Crc = Lookup(tmp , Crc8)
       Next
    End Sub
    
    Sub Crcit2
    
       Crc = 0
       For I = 1 To 9
          Tmp2 = Crc Xor Ar2(i)
          Crc = Lookup(tmp2 , 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 , 21 , 75 , 169

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    27.02.2006
    Ort
    Gessertshausen
    Alter
    52
    Beiträge
    97
    Hallo Reeper,

    du scheinst dich gut auszukennen, darum zwei Fragen (gilt natürlich auch für andere, die mir dabei helfen können ) :

    Die Temperstursensoren (TS) werden ja mit 1wsearchfirst und 1wsearchnext angesprochen. Wird dann der erste in der Leitung als 1 erkannt, oder ist der mit der niedrigsten Seriennummer der erste ?

    Gibt es eine Möglichkeit, daß Bascom selber erkennt wieviele TS angeschlossen sind und diese dann ausgibt (also TS1 ... TSn) und wenn ja, wie würde diese aussehen ?
    Ich bräuchte das Prog für 10 Sensoren und das ganze zig mal zu kopieren und ewig viele Variablen du dimensionieren erscheint mir etwas irrwitzig.
    Rein pragmatisch würde ich mal nach allen in der Leitung suchen lassen und diese durch eine Schleife dann nacheinander 'abklappern'.
    Ok, vielleicht geht's auch nicht anders aber dazu habe ich nun doch zu wenig Ahnung. So weit bin ich mit meinen Mega32 Kenntnissen noch nicht.
    Gruß, Berni.
    www.befi-tec.de

Seite 1 von 9 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests