 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
bojan_z Član


Pridružen-a: Pet 16 Maj 2008 20:28 Prispevkov: 256 Aktiv.: 1.23 Kraj: Maribor
|
Objavljeno: Tor Mar 08, 2011 11:58 pm Naslov sporočila: ATtiny2313 - težave |
|
|
Zdravo !
Po dolgem prebiranju tem o AVR-jih in vsega ostalega okoli teh mikroprocesorjih sem se odločil tudi jaz poskusit na tem.
Naredil sem AVR isp programator , moja prva tiskanina s toner transferjem je uspela , čeprav sem uporabil likalnik.
Prebil sem tudi prvi stik z BASCOM-om, na test boardu sem postavil ATtinx2313 7 seg display in se malo začel igračkat.
Uspeli so mi prvi programi.
Ugotavljal sem, da mi čas kot je Wait 1 ni 1 sekunda.
Pa sem malo šel "čarat po Bacsom-U" in v tistem delu programiranja čipa
ko piše Lock and Fuse Bit šel malo gledat kaj je tukaj.
Nastavil sem fusbit kla987 na ext clock 000 000 in naredil write fs.
Pa je mikro crknil.
Kaj sem naredil.
Kako ga naj ponovno oživim.
Kako naj pripravim mikro , da bo delal s točnim časom.
Imam še 1 mikro , tako, da sem lahko vaje-test nadaljeval.
Lep pozdrav Bojan
|
|
Nazaj na vrh |
|
 |
PrimozL Član


Pridružen-a: Tor 21 Mar 2006 10:55 Prispevkov: 404 Aktiv.: 1.72 Kraj: okolica Vipave
|
Objavljeno: Sre Mar 09, 2011 1:04 am Naslov sporočila: |
|
|
Živijo,
Nisem točno gledal, kaj pomeni tvoja nastavitev varovalk. Če si nastavil varovalke tako, da dela z zunanjo uro, se da problem enostavno rešiti.
Na XTAL1 pin pripelješ TTL signal z nekega oscilatorja, recimo 1-10 MHz in poženeš programator. Ko povezava s čipom spet deluje, nastaviš varovalke nastaviš tako, da uporablja notranjo uro.
Vedno pa lahko rešiš tak čip s paralelnim ali high-voltage programatorjem.
Kar se pa tiče točnih zakasnitev:
- notranja RC ura v AVRjih odstopa par %, pa še temperaturno je odvisna. Predlagam uporabo kristala ali pa vsaj resonatorja.
- povsem točne zakasnitve najlažje dosežeš s timerjem in prekinitvijo. Jaz si običajno v vsakem projektu nastavim prekinitev vsako 1 ms in potem programsko določam, kaj se bo takrat izvedlo. Na tak način brez težav narediš nek razvrščevalnik z ločljivostjo 1 ms, ki obvladuje več dogodkov (zakasnitev) vzporedno.
LP Primož.
|
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3387 Aktiv.: 15.99
|
Objavljeno: Sre Mar 09, 2011 9:12 am Naslov sporočila: |
|
|
Za "zaklenjen" čip je že predhodnik povedal.
O tistem "Wait 1" bom pa dodal tole:
katerikoli jezik uporabljaš (basic, C, asm) v vsakem primeru je potrebno prevajalniku povedati, s kakšno hitrostjo (taktom) mikro deluje. Glede na to bo prevajalnik znal preračunati, koliko taktov mora preteči, da mine željeni čas. Če mu tega ne poveš, bo prevajalnik (bascom) pri prevajanju programa uporabil privzeto vrednost, ki pa ni nujno, da je točna.
Tako bo recimo tvoj wait 1 dolg 8 sekund, 4 sekunde, 0,5 sekunde, 0,25 sekunde ali pa res 1 sekundo...
Poglej kako se v bascomu ta urni takt definira - v kakem primeru, čisto na začetku programa.
|
|
Nazaj na vrh |
|
 |
bojan_z Član


Pridružen-a: Pet 16 Maj 2008 20:28 Prispevkov: 256 Aktiv.: 1.23 Kraj: Maribor
|
Objavljeno: Čet Mar 10, 2011 7:51 pm Naslov sporočila: zakaj wait1 ni 1 sekunda |
|
|
Sem že pri novi težavi , prejšno še nisem rešil.
Imam Attiny 2313 in 7 seg display s skupno katodo.
ni na minipinu - imam navadno testno ploščo.
Priredil sem spodnji program, pa wait1 ni 1 sekunda.
Drugače pa program lepo izpisujena na display.
' Prikaz vrednosti od 0 do F na enem od 7 segmentnem displeju.
' Vrednosti morajo biti lepo vidne, če kakšna vrednost ne odgovarja, je
' napaka v tabeli za prevajanje.
'$regfile = "m16def.dat" ' specify the used micro
'$crystal = 11059200 ' used crystal frequency
$regfile = "attiny2313.dat"
$crystal = 12000000
$hwstack = 32
$swstack = 8
$framesize = 24
Dim I As Byte
Dim J As Byte
Dim K As Byte
Dim L As Byte
Dim S As String * 16
Config Portb = Output
Config Portd = Output
Do
For J = 0 To 2
If J = 0 Then
Portd.3 = 1
Reset Portd.4
Reset Portd.5
End If
If J = 1 Then
Portd.4 = 1
Reset Portd.3
Reset Portd.5
End If
If J = 2 Then
Portd.5 = 1
Reset Portd.4
Reset Portd.3
End If
For I = 0 To 15
Portb = Lookup(i , Minipin7seg)
' lookup ukaz potegne iz tabele tisto vrednost, ki odgovarja po zaporedju
' vrednosti argumenta lookup ukaza, torej spremenljivki i
'
Wait 1
Next
Next
Loop
Minipin7seg:
' 0 1 2 3 4 5 6 7
'Data &H41 , &HDD , &H64 , &H4C , &HD8 , &H40 , &H42 , &H5D
' 8 9 A B C D E F
'Data &H40 , &H58 , &H50 , &HC2 , &H63 , &HC4 , &H62 , &H72
'
Data &HBE , &H22 , &H9B , &HB3 , &H27 , &HB5 , &HBD , &HA2
Data &HBF , &HB7 , &HAF , &HBF , &H9C , &HBE , &H9D , &H8D
|
|
Nazaj na vrh |
|
 |
Vlado Član

Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 563 Aktiv.: 2.38 Kraj: Ljubljana
|
Objavljeno: Čet Mar 10, 2011 8:39 pm Naslov sporočila: |
|
|
Bojan,
pri fuse bitih moraš nastaviti na ext crystal in ne ext clock, pa zdi se mi da Tiny ima tudi divide by 8, to moraš izklopiti da ti bi proceor delal s taktom zunanjega kristala.
|
|
Nazaj na vrh |
|
 |
bojan_z Član


Pridružen-a: Pet 16 Maj 2008 20:28 Prispevkov: 256 Aktiv.: 1.23 Kraj: Maribor
|
Objavljeno: Čet Mar 10, 2011 9:36 pm Naslov sporočila: |
|
|
Se da to nastavit tudi v BASCOM u. en tiny2313 sem že "zafural" ne bi rad še tega.
je to tukaj
pripenjam sliko.
To tukaj moram nastavit preden prenese program v mikro.
Ker sem jaz nastavil sicer na ext osc.... in nato rekel write FS , pa je z mikrom konec.
Opis: |
|
Velikost datoteke: |
532.94 KB |
Pogledana: |
29 krat |

|
|
|
Nazaj na vrh |
|
 |
blay44 Član


Pridružen-a: Ned 19 Dec 2010 18:17 Prispevkov: 604 Aktiv.: 3.42
|
Objavljeno: Čet Mar 10, 2011 10:19 pm Naslov sporočila: |
|
|
Zakljenjne boš rešil tako, da med programiranjem pripelješ vsaj štirikrat hitrejši zunaji takt kot je hitrost programiranja.
Če pa si pomotoma nastavil notranji RC osilator na minimum(faktor deljenja) ga pač moraš lepo (štirikrat) počasneje programirati z nastavitvijo zakasnitve. Vsaj tako je pri Tiniyu.
LP
|
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3387 Aktiv.: 15.99
|
Objavljeno: Pet Mar 11, 2011 7:22 am Naslov sporočila: |
|
|
Malo bi pomagalo, če bi poskusil prebrati in razumeti, kar so ti ljudje povedali v prejšnjih postih....
Pa povej, koliko traja tvoj wait1, prosim . Zakaj moramo ugibati?
Tiny je po sliki nastavljen na interni 8MHz oscilator (fusebit KLA 987), ki ga potem deli z 8 (fusebit C), tako da je njegov osnovni takt trenutno 1MHz. Kolikor je tudi po defoltu nastavljen nov tiny 2313.
In če Bascom ne ve, da mikro dela z 1MHz, kako naj potem zna narediti sekundne pavze (wait1)?
|
|
Nazaj na vrh |
|
 |
bojan_z Član


Pridružen-a: Pet 16 Maj 2008 20:28 Prispevkov: 256 Aktiv.: 1.23 Kraj: Maribor
|
Objavljeno: Sob Mar 12, 2011 4:54 pm Naslov sporočila: |
|
|
Sem že napisal, da sem začetnik v programiranju, pa kljub vsej literaturi, ki jo lahko prebiraš teško najdeš čisto začetne korake pri programiranju. Lepo je da napišeš tako in tako se naredi, korakov kaj vse je potrebno nastavit v določenem programu in kaj pri samem programatorju pa ne torej HW in SW nastavitve.
Tako se pač prebijaš skozi pasti in jih spoznavaš.
Zato pa tudi vprašujem kako in kaj.
Grem po vajah, ki sem jih našel na tem forumu, pa mi kar uspeva.
Uspel sem narediti kar nekaj vaj , zataknilo se mi je timer-ju.
Ko prižigam 7seg display mi le ta utripa.
prilagam program, je kombinacija dveh programov
ima attiny 2313 , 7seg displ s skupno anodo, ds1820
in uporabljam notranji takt.
$regfile = "attiny2313.dat"
$crystal = 1000000
$hwstack = 32
$swstack = 8
$framesize = 24
Dim I As Word
Dim J As Byte
Dim K As Byte
Dim L As Byte
Dim S As String * 16
Dim T As Integer
T = 0
Config 1wire = Portd.0
Config Portb = Output
'dodamo 7seg displey na PD.7
Config Portd = Output
' Prikazati želimo vrednost spremenljivke i
I = 4565
' Timer nastavimo tako, da se aktivira vsakih 5 ms in takrat prekine delo
' glavnega programa in zažene podprogram:
Const Timer0reload = 54
Config Timer0 = Timer , Prescale = 1024
Load Timer0 , Timer0reload
On Ovf0 Timer0_isr
Enable Ovf0
Start Timer0
Enable Interrupts
' GLAVNI PROGRAM
Do
' V glavnem programu si ne belimo glave z prikazovanjem na displej,
' samo skrbimo, da bo vrednost spremeljivke, ki jo je prekinitvena
' rutina dolžna prikazati, v skladu z deom programa
'Če med tem pritisnemo tipko, naj se vrednost spremenljivke i za ena poveča:
1wreset
1wwrite &HCC 'skip ROM
'1Wire ukaz
1wwrite &H44 'convert temperature
Wait 1
1wreset 'reset
1wwrite &HCC 'skip ROM
1wwrite &HBE 'READ Scratchpad
T = 1wread(2)
1wreset
T = T / 2
I = T
Loop
' PREKINITVENI PODPROGRAM
Timer0_isr:
Load Timer0 , Timer0reload
' V prekinitveni rutini vsakokrat prikažemo eno od 4 številk
' in to neodvisno od dela glavnega programa, zato ni utripanja, kadar
' glavni program dela kaj drugega
Dim Tis As Word 'Tisočice
Dim Sto As Word 'Stotice
Dim Des As Word 'Desetice
Dim Eni As Word 'Enice
'Iz spremenljivke i napolnimo spremenljivke tis, sto, des in eni
' in le te prikažemo:
Eni = T Mod 10
Des = T Mod 100
Des = Des / 10
Sto = T Mod 1000
Sto = Sto / 100
Tis = T / 1000
Incr K
If K > 2 Then K = 0
Portd = 0
If K = 0 Then
Set Portd.5
Portb = Lookup(sto , Minipin7seg)
End If
If K = 1 Then
Set Portd.4
Portb = Lookup(des , Minipin7seg)
End If
If K = 2 Then
Set Portd.3.3
Portb = Lookup(eni , Minipin7seg)
End If
Return
Minipin7seg:
Data &HBE , &H22 , &H9B , &HB3 , &H27 , &HB5 , &HBD , &HA2
Data &HBF , &HB7 , &HAF , &HBF , &H9C , &HBE , &H9D , &H8D
|
|
Nazaj na vrh |
|
 |
Vlado Član

Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 563 Aktiv.: 2.38 Kraj: Ljubljana
|
Objavljeno: Sob Mar 12, 2011 5:48 pm Naslov sporočila: |
|
|
Bojan,
ne zastopi narobe, ampak nobeden nima toliko časa da bo tebi držal tečaj Bascoma na forumu.
Ko sem ti svetoval pri nastavitvi fuse bitov sem menil da je dovolj da ti povem kateri moraš izbrati, ker če klikneš v Bascom na programator in odpreš fuse bite, boš tam kjer si nastavil zunanji oscilator hitro našel tudi opcijo za zunanji kristal!
Težko da kdo ima toliko časa da ti drži tečaj na forumu.
Praviš da si začetnik, vzel pa si si takoj primer ki vsebuje 1Wire, 7 segmentni displej kateri potrebuje timer . . .
Bascom je prijazen za uporabnika, vendar tudi pri njemu moraš prebrati data shet od procesorja, prav tako tudi malo Help Bascoma.
Tvoja prekinitvena rutina traja predolgoooooo, v njej moraš narediti tisto najnujnejše in se vrniti nazaj, vse ostalo pa v glavni zanki.
Pri uporabi 1Wire moraš vedeti da so timingi zelo zahtevni in ti se lahko zgodi da boš imel napačen podatek če imaš istočasno vklopljeno prekinitev.
Pri timeru moraš verjetno izračunati novo vrednost Timer0, ker je primer ki si ga uporabil imel verjetno drugo vrednost kristala.
|
|
Nazaj na vrh |
|
 |
bojan_z Član


Pridružen-a: Pet 16 Maj 2008 20:28 Prispevkov: 256 Aktiv.: 1.23 Kraj: Maribor
|
Objavljeno: Sob Mar 12, 2011 5:54 pm Naslov sporočila: |
|
|
Hvala za nasvet Vlado , bom poskusil.
Samo, da imam kakšen namig, kje naj iščem.
Tisto kar sem napisal, pa je bilo tako na splošno. Ko se prebijaš od teorije do prakse, naletiš kar na nekaj težav.
Upam, da se bom uspešno prebil skozi.
|
|
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 Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|