PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Digital Temp.Sensor DS1821 bzw. DS 18B20 via Bascom



DirkS
16.10.2005, 16:45
Hallo Leute,

ich möchte einen Temp. Sensor an einen Atmel Mega128 anschließen.
Nun habe ich da wenig Erfahrung. Ich habe zwar eine aufwendigen Messwertverstärker für einen "NTC Temperaturfühler SEMI 833 ET" an einer C-Control am laufen, doch ist mir das zuviel Aufwand.
Ich habe mir von Dallas den DS1821[1] bzw. DS18B20[2] ausgesucht.

Meine Frage ist nun, ob man das Ding mit Bascom zusammen verwenden kann, oder ob man Assembler brauch?

Was hat zur Folge, das der eine 8bit und der andere 12bit ausgibt (Converts temperature to 12-bit digital word).

Danke schon mal im Voraus.

[1] http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2794
[2] http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2812

x-ryder
16.10.2005, 18:01
es kommen mehr daten :-D ne, das bringt nix, der eine bringt zwar ne höhere auflösung, dafür isses aber trotzdem nur 8-bittig kalibriert, kauf den mit 8 bit und werde glücklich, mit bascom funzt das super

DirkS
16.10.2005, 18:08
Danke Dir!

Ich werde mich aber für den DS18B20 entscheiden, da der 0,5°C kann.
Gibt es irgendwo ein Bsp. wie man das Ding durch ein Programm auswertet?

x-ryder
16.10.2005, 19:51
... ich hab jetz nicht direkt eins, und dabei isses schwer nen vorgefertigtes zu haben, ich werd mal versuchen eins aufzutreiben

DirkS
16.10.2005, 20:08
Sorry, ich hätte ja mal selbst suchen können. Tante google mit DS1821 und bascom ergibt z.B. http://www.qsl.net/dg1xpz/elektronik/avr/ds1821.html
Damit komme ich weiter (hoffe ich)

DirkS
25.10.2005, 20:56
Hallo Leute,

kann mir einer den Unterschied zwischen den DS18B20 und den DS18S20 sagen?
Der einzige Unterschied den ich im Moment sehe und mit dem ich nichts anfangen kann "9- to 12-bit user-configurable resolution" für den DS18B20.

Des weiteren habe ich ein Programmteil der aus dem DS auch 0,1°C rausholt.
Kann mir das jemand ein wenig genauer erklären?

Danke



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

x-ryder
25.10.2005, 21:02
also: der b kann bis zu 0,0625° auflösen, du siehst das im programm natürlich nicht, weil du ja nur 9 statt 8 bytes liest, und dann später anders rechnest, oder auch nicht, allerdings ist das NUR die ausganbe, der iss trotzdem nur auf 0,5° genau

DirkS
25.10.2005, 21:25
Sorry,

deine Aussage verstehe ich nicht so ganz

x-ryder
25.10.2005, 21:28
der b bringt nicht viel mehr als der s, bloß das er ne größere auflösung bei der ausgabe hat