|
|
|
| Mikrokontroleri |
Autor: Nebojša Matić |
|
E-mail: maticn@eunet.yu |
|
|
MIKROKONTROLER, ŠTA JE TO? Ili kakve veze imaju ormari, fioke i klikeri sa elektronikom.... Pretpostavimo da u kući imate ormarić sa četri fioke i da treba nekom da kažete da vam iz jedne od njih donese nešto, ništa prostije zar ne? Reći će te leva strana donji red i problem rešen! Dobro, sad pokušajte da to uradite bez odrednica, levo, desno, gore, dole i njima sličnim (mahanje rukama i nogama je takođe zabranjeno). Rešenja za ovu situaciju ima puno ali treba pronaći najbolje! Pokušajmo na sledeći način, označimo redove kao A a vrste kao B, ukoliko je A=1, podrazumeva se gornji red a za A=0 donji. Slično je i sa kolonama B=1, leva kolona i B=0 desna (Slika1).
Sada je već lakše objasniti iz koje fioke vam treba nesto, jednostavno će te reći
jednu od četri kombinacije 00, 01, 10 ili 11. Ovo svojevrsno imenovanje svake fioke
ponaosob nije ništa drugo do binarno predstavljanje brojeva, odnosno pretvaranje nama
bliskih brojeva iz decimalnog sistema u binarni. Zadržimo se malo na ovoj veoma važnoj
temi. Kao što se sa Slike2. vidi, prebacivanje iz binarnog u decimalni broj nastaje
izračunavanjem izraza sa leve strane. U zavisnosti od položaja u binarnom broju 0 ili 1
nose različite vrednosti koje se množe baš sa njima, njihovim sabiranjem dobijate broj
u decimalnom sistemu.
Ovim dobijamo “ormarić”
čije sve fioke možemo sasvim jasno označiti binarnim brojem sa četiri mesta ,a njihov
sadržaj binarnim brojem sa 8 mesta (Slika3). Ako bi smo se vratili u svet elektronike
dobili bi smo komponentu zvanu memorija.
Znači, potrebno je sa jedne strane izabrati koju memorijsku lokaciju želite, a sa druge strane sačekati odgovor. Pored čitanja memorijske lokacije memorija mora da obezbedi i pisanje u njih. Na koji način ovo izvesti? Probajmo sa uvođenjem nove linije koju ćemo nazvati kontrolna linija i označiti sa č/p. po početnim slovima reči “čitaj” i “piši”. Način rada je sledeći, ukoliko je č/p=1 onda se radi čitanje, a u suprotnom pisanje u memorijsku lokaciju. Sada kada imamo memoriju kao prvi element, pogledajmo šta nam još treba da bi smo “napravili” mikrokontroler. Za početak dodajmo još 3 memorijske lokacije u posebnom bloku koji će imati ugrađenu sposobnost da ih množi, deli, oduzima, sabira i prebacuje (Slika 4.).
Deo koji smo upravo dodali naziva se centralna procesorska jedinica (eng. Central Processing Unit), a njene memorijske lokacije registrima. Registri su dakle, memorijske lokacije čija je uloga da pomognu pri obavljanju raznih matematičkih operacija ili bilo kojih drugih operacija sa memorijskim lokacijama. U literaturi je već odomaćena skraćenica CPU tako da je i mi usvajamo. Pogledajmo trenutno stanje našeg mikrokontrolera, imamo dve nezavisne celine (memoriju i CPU), koje nisu međusobno povezane. Postavimo sebi sledeći zahtev: uzeti iz me-morije sadržaj dve lokacije, sabrati ih i njihov rezultat ponovo vratiti u memoriju. Za rešenje ovog zahteva potrebna nam je veza između memorije i CPU, prosto rečeno moramo imati neki put preko koga podaci idu iz jednog bloka u drugi (Slika 5.). Taj “put” se naziva magistrala i obično je široka koliko i podatak, u našem slučaju 8 bita ili linija veze. Postoje dve vrste magistrala: adresna i magistrala podataka. Prva služi za prenos adrese od CPU do memorije, a druga povezuje sve blokove unutar mikrokontrolera.
Vidimo da se stanje što se tiče funkcionalnosti popravilo, ali se sada pojavio novi problem : imamo jednu celinu koja je sposobna da radi sama za sebe i koja nema nikakav kontakt sa spoljnim svetom, tj. sa nama! Pokušajmo nešto da uradimo i na tom polju. Kao što smo dodali blok sa CPU dodajmo i blok koji sadrži nekoliko memorijskih lokacija čiji je jedan kraj vezan na magistralu podataka, a drugi ima vezu sa linijama koje izlaze iz mikrokontrolera i koje se golim okom vide kao nožice na elektronskoj komponenti(Slika 6.). Te upravo dodate lokacije se nazivaju portovi. Po svojoj prirodi portovi mogu biti ulazni, izlazni ili dvosmerni. Kako se radi sa portovima? Prvo je potrebno odabrati sa kojim se portom radi, a zatim podatak poslati ili uzeti sa porta. Ovim smo našoj već postojećoj celini dodali mogućnost komuniciranja sa spoljnim svetom, međutim ovaj način komuniciranja ima i svoje mane. Jedna od osnovnih mana je broj linija koje treba koristiti da bi se podatak preneo. Šta ako se prenosi na daljinu od nekoliko kilometara? Broj linija puta broj kilometara ne obećava baš dobru cenu troškova zar ne? Znači ostaje nam da smanjimo broj linija ali tako da se ne izgubi na funkcionalnosti. Neka se sa jednom linijom podaci samo šalju, sa drugom samo primaju, a neka treća služi kao referentna linija kako za prijemnu tako i za predajnu stranu. Da bi ovo funkcionisalo moraju se utvrditi pravila razmene podataka.
To pravilo se naziva protokol. Protokol se znači definiše unapred da ne bi dolazilo do nerazumevanja između strana koje komuniciraju. U prevodu rečeno, ako vi pričate engleski a vaš sagovornik francuski malo je verovatno da će te se brzo i efikasno sporazumeti. Kako bi taj protokol izgledao? Recimo da je na predajnoj liniji postavljena logička “1” svo vreme dok slanje ne otpočne. Kad slanje otpočne spustimo predajnu liniju na logičku “0” za neki period vremena (koga će mo označiti sa T) čime će prijemna strana znati da joj se upućuje podatak i aktiviraće svoj mehanizam za prijem. Vratimo se na predajnu stranu i počnimo na predajnu liniju da stavljamo logičke nule i jedinice iz binarnog broja redosledom od bita najmanje težine ka bitu najveće težine. Neka se svaki bit na liniji zadržava u vremenu koliko iznosi period T, a na kraju tj. posle 8 bita vratimo ponovo logičku 1 čime ćemo označiti kraj predaje jednog podataka. Upravo objašnjeni protokol, se u stručnoj literaturi naziva NRZ (eng. Non-Return to Zero). Kako imamo posebne linije za prijem i slanje moguće je istovremeno primati i slati podatke što odrađuje blok za serijsku komunikaciju. Za razliku od paralelnog prenosa ovde podatak ide bit po bit tj. u seriji, odakle i potiče ime serijske komunikacije. Nakon prispeća podatka potrebno ga je pročitati iz prijemne lokacije i uskladištiti u memoriju za razliku od slanja gde je proces obrnut, podatak iz memorije preko magistrale ide do lokacije za slanje ,a odatle po protokolu do prijemne strane.
Serijskom komunikacijom smo zaokružili još jednu celinu, sada možemo primati, slati i obrađivati podatke(Slika8.). Ipak za primene u industriji potrebni su još neki blokovi, jedan od njih je tajmerski blok koji je veoma važan, jer nam može dati informaciju o vremenu, trajanju, protoku i sl. Sama reč “tajmer” je engleskog porekla i na naš jezik se može prevesti kao “davač vremena”. Osnovu tajmera čini slobodni brojač koji non-stop broji tako da se uzimanjem njegove vrednosti u trenucima T1 i T2 i na osnovu njihove razlike može utvrditi koliko je vremena prošlo. Ovo je veoma važan deo mikrokontrolera za čije savladavanje treba izdvojiti najviše vremena. Još jedna stvar na koju moramo paziti je besprekoran rad našeg mikrokontrolera tokom perioda upotrebe. Pretpostavimo da se usled neke smetnje (koje su u industriji česte) naš mikrokontroler prestane izvršavati program ili što je još gore nastavi da radi ali netačno. Naravno, kada vam se to desi sa računarom jednostavno ga resetujete i nastavite, međutim kod mikrokontrolera ne postoji čovek koji će pritisnuti reset taster i time rešiti nastali problem. Da bi prešli i ovu prepreku uvešćemo još jedan blok koga će mo skraćeno nazvati COP (eng.Computer Operating Properly) ili prevedeno “blok za nadzor pravilnog rada mikrokontrolera” Iza ovog nezgrapnog naziva krije se u stvari jedan slobodni brojač u kojeg naš program treba da upiše nulu svaki put kada se pravilno izvrši. Ukoliko dođe do “zaglavljivanja” programa neće doći do upisa nule i brojač će po završetku brojanja sam resetovati mikrokontroler što će dovesti do ponovnog ali ovaj put pravilnog izvršenja programa.
Ovim je naš mikrokontroler završen(Slika9), ostaje da ga smestimo u jednu elektronsku komponentu preko čijih nožica će mo pristupati unutrašnjim blokovima i to je to!
Naravno, za pravu primenu mikrokontroler nije dovoljan sam po sebi. Prvo, pored njega potrebno je još elemenata koji čine veznu logiku ka elementima upravljanja i regulacije a drugo neko mora i program da napiše. Pisanje programa je poseban deo rada sa mikrokontrolerima i naziva se programiranje. Probajmo da napišemo mali program u jeziku koji će mo sami izmisliti i koji će svima biti prilično jasan.
Program sabira sadžaj dve memorijske lokacije i njihov zbir šalje na port A. Naravno za složenije zadatke veći su i programi koji ih rešavaju. Zadržimo se još malo na programiranju. Šta nam je sve potrebno da bi smo programirali? Za početak odaberimo jezik na kome programiramo. Programiranje se može raditi na više jezika od kojih izdvajamo asembler, C i bejzik koji su i u najčešćoj upotrebi. Asembler spada u jezike niskog nivoa koji se sporo programiraju ali zauzimaju najmanje mesta i prave najbolja rešenja sa stanovišta brzine izvršavanja programa. Programi u C-u se lakše pišu, bolje razumevaju ali su i do 7-8 puta sporiji od asemblerskih. Bejzik je najlakši za učenje a njegove naredbe su najbliže ljudskom razmišljanju.
U svakom slučaju pre nego što se odlučite za jedan od ovih jezika potrebno je da dobro razmotrite zahteve za brzinom izvršavanja vašeg programa, veličinom memorije i vremenom koje vam je na raspolaganju da ga napravite. Kada napišete program potrebno ga je smestiti u memoriju mikrokontrolera. Kako to izvesti? Načina ima više, jedan od njih podrazumeva postojanje drugih programa koji se nazivaju “loaderi” (eng.load=učitati) i koji najčešće koriste serijsku komunikaciju kao način za to. Napisani program se prvo prevede, a zatim preko serijskog kabla učita u mikrokontroler. Prevođenje je proces koji od vašeg izvornog programa pravi izvršni program koga mikrokontroler izvršava.
... i na kraju primena Imamo mikrokontroler i program, kako ih povezati? Odgovor nije baš lak jer zahteva dodatni napor u savladavanju još nekoliko novih pojmova kao što su napajanje, reset, oscilator...Prvo moramo oživeti mikrokontroler tako što ga spajamo sa napajanjem (napon potreban za rad svih električnih uređaja) i oscilatorom čija je uloga slična ulozi srca kod ljudi. Na osnovu njegovih otkucaja (taktova) mikrokontroler izvršava postavljene zadatke. Po dobijanju napajanja mikrokontroler će izvršiti manju proveru samog sebe i potražiti početak programa i krenuti u njegovo izvršavanje. Izvršavanje se može prekinuti od strane čoveka na nekoliko načina od kojih je jedan i reset pri kome se mikrokontroler ponaša slično kao i pri dovođenju napajanja tj. uključivanju. Šta obično mikrokontrolerski sistem radi u industriji? To pitanje uveliko prevazilazi temu ovog broja i spada u jednu od tema celokupnog časopisa. Nadam se da će te biti zadovoljni ponuđenim odgovorima.
|
|
C o p y r i g h t 1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji |