Advertisement  

Wednesday, 24 July 2019
     
 
Main Menu
Home Home
Shop Shop
News News
BASCOM-AVR BASCOM-AVR
BASCOM-8051 BASCOM-8051
Products Products
Application Notes Application Notes
Publications Publications
Links Links
Support Center Support Center
Downloads Downloads
Forum Forum
Resellers Resellers
Contact Us Contact Us
Updates Updates
MCS Wiki MCS Wiki
Online Help
BASCOM-AVR Help BASCOM-AVR Help
BASCOM-8051 Help BASCOM-8051 Help
Contents in Cart
Show Cart
Your Cart is currently empty.
Search the Shop

Products Search

User Login
Username

Password

If you have problem after log in with disappeared login data, please press F5 in your browser

RSS News
 
     
 

 
   
     
 
AN #06 - Reading the DS1820 Temperature Sensor Print
Reading the DS1820 Temperature Sensor

This example is written by Bojan Ivancic.

It has 0.1 C resolution and with 8-bit CRC.

Download source code in Bas file

' ----------------------------------------------------------------
' Author : Bojan Ivancic
' Example measuring temperature using Dallas DS1820,
' with calculated for 0.1 C resolution and with 8-bit CRC!
' ----------------------------------------------------------------

$CRYSTAL = 12000000 ' we are using this frequency

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 1wire = P1.0 ' DS1820 on pin 12 (pull up)
cursor off noblink
cls

locate 1 , 1 : lcd "DEMO for DS1820"
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