|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
donkey Novinec
Pridružen/-a: Pon Jul 2005 11:51 Prispevkov: 1
|
Objavljeno: Pon Jul 11, 2005 12:45 pm Naslov sporočila: ATmega8, ds1820 in 1wire |
|
|
Lep pozdrav,
Delam na malem projektu in sem naletel na težavo. ATmega8 mi ne prepozna nobenega senzorja na 1wire portu.
Ima kdo kakšen namig čemu bi to bilo tako??
Napisal sem si kratek programček za štetje 1wire senzorjev:
[code]
$regfile = "m8def.dat" 'ATmega8
$crystal = 4000000
Config 1wire = Portc.5
Dim T As Word
While T < 5
1wreset
T = 1wirecount()
Upperline
Lcd "st. senzorjev"
Lowerline
Lcd " T =" ; T
wend
[/code]
LCD dela brez problemov, medtem ko je število 1wire senzorjev vedno 0. Priklopljen imam en DS1820 senzor na portu C.5, z pul up uporom 4k7 na vcc=5V.
Senzor deluje, ker sem ga sprobal z dtreg17 programčkom za serijski port. Tam lepo pokaže tempraturo.
Je še kdo naletel na podoben primer??
Mogoče mi lahko kdo napiše kratek delujoči programček in opiše točno shemo priklopa senzorja?
Hvala. |
|
Nazaj na vrh |
|
|
Medo Mojster
Pridružen/-a: Ned Jan 2004 14:59 Prispevkov: 22 Kraj: Laško
|
Objavljeno: Pon Jul 11, 2005 8:42 pm Naslov sporočila: |
|
|
Pozdrav!
Sam sem spremenil, kar program objavljen na straneh http://www.mcselec.com/an06.htm
Spremenil sem samo to, da deluje za AVr 2313, na PORTB 1 je priklopljen en DS1820, gre pa nekako tako:
Koda: | $crystal = 4000000 ' 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 = Portb.1
'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 |
|
|
Nazaj na vrh |
|
|
Carp3Di3m Začetnik
Pridružen/-a: Sob Maj 2004 17:57 Prispevkov: 12
|
Objavljeno: Sob Jul 16, 2005 9:45 pm Naslov sporočila: |
|
|
Tule je kar nekaj primerov uporabe tega seenzorja. Bascom AVR & Fast AVR.
http://www2.maxi.si/phpBB2/viewforum.php?f=10
Na tvojem mestu bi najprej usposobil LCD, nato priklopil samo en senzor in ga potem klical brez direktnega naslavljanja. Torej ne potrebuješ njegove addresse. Ko to dela, preberes njegovo addresso in jih sele nato uporabis vec na enem vodilu. Potem pa pocasi naprej.
(Za snemanje priponk na maxi forumu je potrebno biti registriran)
lp, CarpeD |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|