31. januarja, 2010

Kratka šola programiranja mikrokontrolerjev

MiniPin napajamo z enosmerno ali izmenično napetostjo od 9-15V. V vezje vtaknemo mikrokontroler ATTiny2313-20PU na mesto IC6, na mesto U1 vtaknemo 12 MHz kvarc ali resonator, stikalo S3 preklopimo v položaj AVR in že smo pripravljeni, da povežemo MiniPin s programatorjem in sprogramiramo mikrokontroler. Za programator lahko uporabimo Proggy programator ali pa si sami naredimo programator po načrtu, ki ga vidite na sliki 4. Tako Proggy kot Sample programator povežemo na MiniPin na konektor K6. V Bascomu je potrebno nastaviti (Options/Programmer) izbrani programator, kot vidite na sliki 5. V nastavitvah LPT-address morate nastaviti ustrezen naslov, ki ga najdete v BIOS nastavitvah.

 

Slike PZBA PZBA 11d - Kratka šola programiranja mikrokontrolerjev

KLIK za povečavo

V koliko boste uporabljali Proggy, boste nastavitve napravili tako, kot jih vidite na sliki 6. Pri teh nastavitvah poiščite na katerih USB vratih se nahaja priključen Proggy. To ugotovimo v Sistem/Upravitelj naprav/COM-LPT ports. V spodnjem oknu izberemo, kje se nahaja STK500.exe datoteka. To datoteko naloži program AVR-Studio, ki ga brezplačno snamemo iz spletne strani www.atmel.com. Instalacija AVR-Studia ni nič posebnega. Zdaj smo pa že res pri koncu nastavitev strojne in programske opreme. Prvi program, ki smo ga napisali v Bascom-u prevedemo (Compile ali tipka F7) in v primeru, da uporabljamo Sample programator kliknemo ikono Program Chip ali pritisnemo F4. Če pa uporabljamo Proggy lahko programiramo neposredno iz Bascom-AVR okolja.

Ne glede na uporabljeni programator nastavimo mikrokontroler, ki ga programiramo (ATTiny2313) in kliknemo Program. S tem smo sprogramirali mikrokontroler in če je bilo vse OK, bi na MiniPinu že morala utripati LEDica. Preden gremo na samo programiranje in Bascom se še malce ustavimo na t.i. Fuse in Lock bitih, ki znajo pri začetnikih povzročiti kar nekaj težav. Fuse in Lock biti so posebni – recimo temu konfiguracijski biti, ki (na žalost) niso nastavljivi iz programske kode pač pa jih nastavljamo ob postopku programiranja.

Slike PZBA PZBA 11e - Kratka šola programiranja mikrokontrolerjev

KLIK za povečavo

Slike PZBA PZBA 11f - Kratka šola programiranja mikrokontrolerjev

KLIK za povečavo

Slike PZBA PZBA 11g - Kratka šola programiranja mikrokontrolerjev

KLIK za povečavo

Slike PZBA PZBA 11h - Kratka šola programiranja mikrokontrolerjev

KLIK za povečavo

Lock biti so – kar že samo ime pove, biti, ki zaklenejo mikrokontroler. Zakleniti mikrokontroler pomeni, da njegove vsebine ne morete več prebrati, programirati oziroma niti programirati niti preverjati vsebine. V enem delu Lock bitov so tudi biti, s katerimi določamo t.i Bootloader, ki ga bomo omenili proti koncu tega poglavja. Morda se boste vprašali zakaj potrebujemo Lock bite, če pa kasneje ne moremo več prebrati ali celo huje niti sprogramirati mikrokontrolerja? Namen teh bitov je zaščita vsebine mikrokontrolerja pred nepooblaščenim branjem in kopiranjem programske kode iz mikrokontrolerja. Mikrokontroler še vedno lahko zbrišemo in ga sprogramiramo na novo.

Za razliko od Lock bitov pa Fuse biti nastavljajo sledeče: Watch Dog (WD) časovnik (timer) (vklop/izklop), Bootloader Flash prostor, Brown out detektor (vklop/izklop) ter izbor oscilatorja mikrokontrolerja, ki je lahko zunanji, notranji RC ali zunanji kvarčni z različnimi frekvencami. Malce se pomudimo pri omenjenih izrazih. Watch Dog časovnik v slovenščini nima ustrezne besede razen morda kužapazi, ki je praktično neposredni prevod in nam ne pove nič o delovanju, zato ponavadi uporabljamo kar kratico WD časovnik. Namen WD časovnika v mikrokontrolerju je, da v ponavljajočih se časovnih periodah resetira mikrokontroler. Časovne periode so ponavadi reda nekaj 100 milisekund do nekaj sekund. Človek bi se vprašal, zakaj neki bi nekdo želel, da se program v mikrokontrolerju resetira tako pogosto? Spet pridemo do področja zahtevnih aplikacij, kjer se naj ne bi zgodilo, da bi mikrokontroler (ponavadi zaradi programskega hrošča) „zmrznil“. Zato so si načrtovalci mikrokontrolerjev umislili WD časovnik kot pomoč. Predpostavimo, da moramo napraviti zahtevno napravo, kjer je izredno pomembno, da mikrokontroler deluje tako, kot je predvideno. V programsko kodo bo izkušen programer vgradil na veliko mestih ukaz, ki resetira WD časovnik, kar bo pomenilo, da bo WD časovnik pričel šteti od nič. V kolikor bo WD časovnik (ne glede na programsko kodo) preštel do vrednosti, ki smo jo programsko nastavili, bo avtomatično resetiral mikrokontroler. Ker pa je izkušen programer na več mestih v programski kodi postavil ukaz za reset WD časovnika, do reseta ne bo prišlo nikoli. Razen v primeru, ki ga ni predvidel. Takrat bo WD časovnik program resetiral in ga pognal od začetka oziroma od tam, kjer je program „zmrznil“.

Brown out detektor (BOD) je del vezja v mikrokontrolerju, ki spremlja napajalno napetost. Ko napajalna napetost pade pod nastavljeno vrednost, BOD sproži reset signal mikrokontrolerja in ga drži toliko časa, dokler se napetost ne povrne na normalno vrednost. Tako prepreči eventuelno nepravilno delovanje mikrokontrolerja pri nizkih napetostih.

Pri izboru oscilatorja se ponavadi omejimo na dva: notranji RC oscilator in zunanji kvarčni kristal. RC oscilator (ime se nanaša na upor (R) in kondenzator (C), ki sta v mikrokontrolerju vezana kot oscilator) je uporaben za nezahtevne primere, kjer točnost taktne ure ni bistvena za delovanje mikrokontrolerja. RC oscilator na žalost nima dovolj dobre temperaturne stabilnosti in kaj hitro se bo frekvenca taktne ure spremenila. Je pa RC oscilator dovolj dober za krmilja in naprave, ki zahtevajo ponovljivost reda 100 milisekund. V redkih primerih boste takt ure generirali v drugih vezjih in ga boste vezali na ustrezni priključek na mikrokontrolerju. V tem primeru boste tudi v Fuse bitih izbrali zunanji oscilator. Pri tem vas moram opozoriti! V kolikor boste nastavili zunanji oscilator in ne boste dovedli taktnega signala na mikrokontroler, bo le-ta nedosegljiv s programatorjem in ga ne boste mogli preprogramirati. Običajno pa uporabljamo zunanji kvarčni kristal ali cenejši keramični resonator. Osebno imam rajši keramični resonator, saj bistveno ne zaostaja za kvarčnim kristalom kar se tiče frekvenčne stabilnosti. Celo več, keramični resonator je v primerjavi s kvarčnim kristalom neobčutljiv na udarce in trke, za nameček pa keramični resonator ne potrebuje dveh zunanjih kondenzatorjev, ki sta nujno potrebna pri kvarčnem kristalu. Izgled okna, kjer nastavljamo Fuse in Lock bite v AVR Studio programu vidimo na slikah 7 in 8. Zdaj ko smo zaključili z nastavitvami lahko nadaljujemo s programiranjem mikrokontrolerjev.

Priklop tipke, bipolarnih in FET tranzistorjev

Mikrokontrolerji za svoje delovanje potrebujejo signale iz okolice. Bodisi pridobijo signale s senzorjev, bodisi s tipk ali drugih elektronskih elementov. Tokrat bomo na naš mikrokontroler povezali tipko. Vezavo tipke vidimo na sliki 9. Tipke na sliki 9 smo vezali tako, kot so povezane na MiniPin razvojni plošči. To je hkrati običajna vezava tipk na mikrokontroler. Program, ki bo zaznaval pritisnjenost posamezne tipke bo razmeroma enostaven: ko bo stanje na posameznem vhodu enako 0V, bo to pomenilo, da je tipka pritisnjena. Poglejmo si kako to pisati v Bascom-u.

Config Portb = Output
Config Portd.0 = Input
Portb = 255
Dim Ledica As Bit
Dim Tipka As Bit
$regfile = "attiny2313.dat"
Do
If Pind.0 = 0 Then
   Portb.0 = Ledica
   Ledica = Not Ledica
   Wait 1
   Else
   Portb.1 = Ledica
   Ledica = Not Ledica
   Wait 1
End If
Loop

Tags: