- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 6 von 6

Thema: 2 DS1820 Problem

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.03.2006
    Beiträge
    48

    2 DS1820 Problem

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo

    ich versuche gerade 2 DS1820 Temp Sensoren auszulesen.

    Hab mir die Suche hier schon angeschaut. Und zahlreiches probiert. Die Sensoren sind auch Richtig rum angeschlossen. Doch ich bekomme als Temp wert immer -127 und als id immer 00000000.

    Den Code hab ich aus der Suche aus einem Beitrag

    Hier malder Code

    Code:
    $regfile = "m8def.dat"                                      'ATMega8 Declaration
    $crystal = 3686400                                          'hier Taktfrequenz eintragen
    
    Config 1wire = Portd.2                                      '1wire Bus an Port PD2
    
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0
    Config Lcdmode = Port
    Config Lcdbus = 4                                           '4 bit mode
    Config Lcd = 20 * 4
    Initlcd
    
    
    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
    
      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
    
    
      Locate 1 , 1
    
        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
    
      Locate 2 , 1
    
            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
    
      Locate 3 , 1
       Lcd "ID 1:" ; Id1(1) ; Id1(2) ; Id1(3) ; Id1(4) ; Id1(5) ; Id1(6) ; Id1(7) ; Id1(8)
    
      Locate 4 , 1
       Lcd "ID 2:" ; Id2(1) ; Id2(2) ; Id2(3) ; Id2(4) ; Id2(5) ; Id2(6) ; Id2(7) ; Id2(8)
    
    Waitms 500
    
    Loop

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    28.03.2006
    Beiträge
    48
    kann da keiner weiterhelfen? such mir schon nen Wolf das will einfach nicht klappen

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    09.10.2004
    Beiträge
    40
    Hi Luppi!

    Ich benutze den Code ihr(Hab ihn vor einiger Zeit ihr im Forum gefunden)
    Hab ihn gerade auf mein Board nochmal getestet und funkzt einwandfrei.
    Code:
    '**********************************************************
    'Compiler            : BASCOM-AVR
    'Hardware            : DS1820 an PD.6
    '                      LCD-Display
    'Chip type           : AT90S2313
    '**********************************************************
    
    $regfile = "2313def.dat"                                    'AT90S2313
    $crystal = 4000000                                          'Quarz 3.579MHz
    
    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 , T1 As Integer
    Dim V As Byte
    Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
    
    Config Lcd = 16 * 2
    Config 1wire = Portb.0                                      'DS1820 DQ an PB0
    
    Cursor Off Noblink
    Cls
    Waitms 1000
    Locate 1 , 1 : Lcd "Brutkasten"
    Locate 2 , 1 : Lcd "T="
    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 , 4 : Lcd "--  "                             ' we put "-- " on LCD
       Else
          If Crc = 0 Then                                       ' sensor present, check CRC
             Locate 2 , 4 : Lcd T                               ' CRC OK, print T*10 on LCD
          Else
             Locate 2 , 4 : 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 * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
          T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
       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
    Probier mal nur einen DS1820 Sensor

    Dieser Code für 0,5 Grad C ist klein,fein,gut
    www.qsl.net/dg1xpz/elektronik/avr/ds1820.html

    Gruß,MX3

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    28.03.2006
    Beiträge
    48
    ich bekomm da immer nur -- angezeigt.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    09.10.2004
    Beiträge
    40
    Hi!
    Bei Anzeige -- wird der Sensor nicht erkannt(Sensor oder Atmel defekt?,fehlerhaft verdrahtet ,schlechte Kontakte meißtens bei Steckboards)

    Bei Anzeige ** CRC Fehler(für 0.1 C Auflösung)
    Bei Anzeige 85 Vcc + 5V fehlt(an Pin 3)

    Bist du dir ganz sicher das alles richtig angeschlossen ist?
    Die Pinbelegung des DS1820 im TO92 Gehäuse ist
    BOTTOM VIEW also von UNTEN gesehen. Tausch mal Pin 1 mir Pin 3
    4,7K Ohm PullUp Wiederstand dran?

    Gruß,MX3
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken ds1820.jpg   beschaltung.jpg  

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    02.04.2006
    Beiträge
    14
    Hallo Luppi
    hatte das gleiche Problem, es wurde immer 127 Grad angezeigt, obwohl alles richtig angeschlossen war.
    Nimm mal das Hilfsprogramm MY AVR Quick von deren Webseite, Starte mal die Verbindung ob dein Kontroller gefunden wird, dann setzt wenn du hast den externen Quarz aktiv.
    Brenne dein Prog neu in den AVR danach hat´s bei mir funktioniert.

    HP

Berechtigungen

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

12V Akku bauen