-         

Ergebnis 1 bis 2 von 2

Thema: Sensor wird nicht erkannt

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    29
    Beiträge
    373

    Sensor wird nicht erkannt

    Anzeige

    ich möche den m32 mit dem 1wire DS18S20 betreiben und mit Bascom 1.11.7.7 (Demo) programmieren.
    Der Fühler hängt mit Pin 1 an GND und Pin 3 an +5V

    Displayansteuerung klappt wunderbar.
    Nur der 1wire Fühler funktioniert nicht

    Der Fühler(Pin 2) hängt an PortD.2 und ist über einen 4,7k an +5V.



    Code:
    $crystal = 8000000
    
    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 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
    Config Lcd = 16 * 4
    Config 1wire = Pd.2
    Cursor Off Noblink
    Cls
    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 , 247 , 182 , 232
    Data 10 , 84 , 215 , 137 , 107 , 53
    habt ihr vielleicht eine ahnung warum der Sensor nicht erkannt wird.
    denn am Display erscheint nur -- anstatt der Temperatur.
    Danke für eure hilfe

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    Hallo franzl,
    Code:
    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
    Es steht ja schon im Code "read bytes in array", dann solltest du es auch machen.

    Code:
    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 
       For I = 1 to 9
       Bd(I) = 1wread()                                        ' read bytes in array 
       Next
       1wreset                                                  ' reset the bus
    Bd(1) = Temperatur LSB
    Bd(2) = ---"--- MSB

    Wenn es auf 0,1 Grad genau sein soll brauchst du auch noch
    Bd(7) = Count Remain
    Bd( 8 ) = Count per Grad

    Berechnung siehe Datenblatt

Berechtigungen

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