PROGRAMSKA OPREMA – SPLETNE STRANIVidez okna, kjer nastavljamo biteFuse in Lock v programu AVR Studiovidimo na slikah 7 in 8.Zdaj ko smo zakljuïili z nastavitvami,lahko nadaljujemo s programiranjemmikrokontrolerjev.2 Priklop tipke in bipolarnihin tranzistorjev FETMikrokontrolerji za svoje delovanjepotrebujejo <strong>si</strong>gnale iz okolice. Bodi<strong>si</strong>pridobijo <strong>si</strong>gnale s senzorjev bodi<strong>si</strong> stipk ali drugih elektronskih elementov.Tokrat bomo na naš mikrokontrolerpovezali tipko.Vezavo tipke vidimo na sliki 9.Tipke na sliki 9 smo vezali tako, kot sopovezane na razvojni plošïi MiniPin.To je hkrati obiïajna vezava tipk namikrokontroler. Program, ki bo zaznavalpritisnjenost posamezne tipke, borazmeroma enostaven: ko bo stanje naposameznem vhodu enako 0V, bo topomenilo, da je tipka pritisnjena.Slika 7. Biti Fuse, nastavitev oscilatorjanila. Je pa RC-oscilator dovolj doberza krmilja in naprave, ki zahtevajoponovljivost reda 100 milisekund. Vredkih primerih boste takt ure generiraliv drugih vezjih in ga boste vezalina ustrezni prikljuïek na mikrokontrolerju.V tem primeru boste tudi vbitih Fuse izbrali zunanji oscilator.Pri tem vas moram opozoriti! îeboste nastavili zunanji oscilator inne boste dovedli taktnega <strong>si</strong>gnala namikrokontroler, bo le-ta nedosegljiv sprogramatorjem in ga ne boste moglipreprogramirati. Obiïajno pa uporabljamozunanji kvarïni kristal alicenejši keramiïni resonator. Osebnoimam rajši keramiïni resonator, sajbistveno ne zaostaja za kvarïnim kristalom,kar se tiïe frekvenïne stabilnosti.Celo veï: keramiïni resonatorje v primerjavi s kvarïnim kristalomneobïutljiv na udarce in trke, zanameïek pa keramiïni resonator nepotrebuje dveh zunanjih kondenzatorjev,ki sta neobhodno potrebna prikvarïnem kristalu.Slika 8. Nastavitev bitov LockVentil 14 /2008/ 3291
PROGRAMSKA OPREMA – SPLETNE STRANItrenutek njegovega delovanja zelonatanïno definirati program. Zgorajopisani program namreï postavi logiïneenice na zaïetku programa (Portb= 255). V nadaljevanju programa patega ne naredimo veï. Zato bi kazalo,da bi program popravili tako, da bilogiïne enice vpisali v zanki Do-Loop,kot kaže naslednji program.Config Portb = OutputConfig Portd.0 = InputDim Ledica As BitDim Tipka As Bit$regfile = “attiny23<strong>13</strong>.dat”Slika 9. Vezava tipke na mikrokontrolerDoPoglejmo <strong>si</strong>, kako to pisati v Bascom-u.Config Portb = OutputConfig Portd.0 = InputPortb = 255Dim Ledica As BitDim Tipka As Bit$regfile = “attiny23<strong>13</strong>.dat”DoIf Pind.0 = 0 ThenPortb.0 = LedicaLedica = Not LedicaWait 1ElsePortb.1 = LedicaLedica = Not LedicaWait 1End IfLoopOpazili boste, da smo na zaïetkuprograma definirali, katera vratabodo vhodna oziroma izhodna. Natosmo na PORTB vpisali vrednost 255,kar je binarno 1111 111<strong>1.</strong> To smo naredilizato, da vse LED-ice ugasnemo.Zdaj že poznamo zanko Do-Loop, vkateri se nahaja stavek IF ELSE. Programje jasen: ïe bo logiïno stanjena prikljuïku Portd.0 = 0, potem seizvede prvi del IF stavka, v nasprotnemprimeru pa drugi. Pozorni bralciste opazili neskladje med zadnjimstavkom in programom. V programuje zapisano If Pind.0=0,mi smo pa zapisali, ïe bo stanje naprikljuïku Portd.0 = 0. Oboje je pravin zaïetnikom v programiranju sprvadela malce težav. Tukaj bo pomagalonekaj znanja o notranji zgradbimikrokontrolerjev AVR. Ti imajo 3registre, ki so vezani na posamezniprikljuïek. Obstajajo registri PORTx,PINx in DDRx. Register DDRx je namenjentemu, da AVR-ju doloïimo,ali bo doloïen prikljuïek vhodni aliizhodni. îe postavimo DDRx na 0,bo doloïen prikljuïek definiran kotvhodni, ïe postavimo DDRx na 1, botaisti prikljuïek izhodni.V register PORTx vpišemo vrednost naposameznem prikljuïku, medtem koiz registra PINx beremo vrednost naposameznem prikljuïku, ki je na shemioznaïen kot Portx.y. îe bi namestopisanega stavka If Pind.0=0 napisaliIf Portd.0=0, bi pravzaprav bralivrednost, ki smo jo nazadnje vpisalina Portd.0. Avtor Bascoma nam jedefinicijo prikljuïkov poenostavil zukazom CONFIG, kjer definiramo,ali je posamezni prikljuïek vhod aliizhod, kot je razvidno v programu.Ko boste omenjeni program prevedliin z njim sprogramirali mikrokontroler,boste videli, da sprva utripa LED-icana prikljuïku PortB.<strong>1.</strong> îe pritisnemotipko SW1, bo zaïela utripati LEDicana PortB.0. Pri tem boste verjetnoopazili, da se v primeru, da pritisnemotipko, ko je vklopljena LED-ica,ta ne ugasne. Razlog za to je v tem,da moramo mikrokontrolerju za vsakPortb = 255If Pind.0 = 0 ThenPortb.0 = LedicaLedica = Not LedicaWait 1ElsePortb.1 = LedicaLedica = Not LedicaWait 1End IfLoopKot smo opazili, nam program lepodeluje, vendar se v tem lepem delovanjuskriva past, ki jo elektronikipoznamo pod besedo odskakovanje.Kaj mislim s tem? Vsaka tipka alistikalo nista idealna, kar se odraža vodskakovanju kontakta. To pomeni,da stikalo ne preklopi iz logiïne1v0,paï pa je vmes veliko preskakovanjaiz1v0inobratno. Tega odskakovanjaponavadi ne zaznamo, saj današnjenaprave s programsko opremo ta efektuspešno prepreïujejo. V našem primeruje program tako napisan, da ignoriraodskakovanje. îe pa bi napisali malcedrugaïen program, bi ugotovili, da stikna tipkah prav neprijetno odskakuje,kar mikrokontroler z lahkoto zazna.In to odskakovanje lahko povzroïizaplete pri naši napravah. Zato so programerjiizumili naïin, ki prepreïujeneželeno zaznavanje odskakovanja.Ponavadi se odskakovanje programskoreši tako, da program spremlja stanjetipke v doloïenem ïasovnem intervalu– npr. 100 milisekund. îe programugotovi, da je tipka v npr. 100 milisekundahres pritisnjena, potem je to292 Ventil 14 /2008/ 3