Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

ATmega8, ds1820 in 1wire

 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
donkey
Novinec


Pridružen/-a: Pon Jul 2005 11:51
Prispevkov: 1

PrispevekObjavljeno: Pon Jul 11, 2005 12:45 pm    Naslov sporočila: ATmega8, ds1820 in 1wire Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Medo
Mojster


Pridružen/-a: Ned Jan 2004 14:59
Prispevkov: 22
Kraj: Laško

PrispevekObjavljeno: Pon Jul 11, 2005 8:42 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Carp3Di3m
Začetnik


Pridružen/-a: Sob Maj 2004 17:57
Prispevkov: 12

PrispevekObjavljeno: Sob Jul 16, 2005 9:45 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Stran 1 od 1

 
Pojdi na:  
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