Atmel AVR serija mikrokontrolera – mozak arduina

Atmel AVR serija mikrokontrolera – mozak arduina

Atmelova AVR serija mikrokntrolera sadržava većinom 8-bitne, i manji broj 32-bitnih izvedbi mikrokontrolera.  Unutar same AVR serije postoji nekoliko podserija, kao naprimjer AVR UC3,  mega AVR i tinyAVR. Unutar svake od tih podserija postoje još podserija naprimjer Atmega 48/88/168/328. Prije nego se oni koji su gledali inception uplaše, poanta je u tome da se unutar podserija povećava kompatibilnost mikrokontrolera. Tako je naprimjer moguće odabrati neki uobičajen mikrokontroler iz serija koja bi odgovarala  vašoj upotrebi i na razvojnoj pločici realizirati sklop te ušminkati kôd. Nakon što prototipna verzija vašeg uređaja ostvari zadane zadatke i pokaže se da radi po zahtjevima, možete sa manjim izmjenama kôda i ožićenja odabrati mikrokontroler koji najbolje odgovara vašoj upotrebi.  Raspon mikrokntrolera je stvarno impresivan, tako postoje izvedbe sa različitim brojem digitalnih ulaza/izlaza, veličinama flash programske memorije i EEPROM-a, te različitim hardverskim funkcijama kao naprimjer izlaze za jednostavno povezivanje preko različitih serijskih protokola, ili mogućnost dobivanja clocka u realnom(ljudskom) vremenu neovisno o procesorskom clocku. Tako možete nakon što odredite prave potrebe naciljati procesor koji ima taman toliko ulaza koliko vam treba, omogućava naprimjer I2C komunikaciju i ima malu potrošnju struje za projekte koji se napajaju iz baterija.

Dobra početna točka je izabrati jedan mikrokontoler iz Atmega serije. Oni nude širok spektar mogućnosti i velik broj ulazno/izlaznih pinova, kako digitalnih, tako i “analognih”. Nije ni čudo da ih se nalazi u mnogim razvojnim platformama, najistaknutiji primjer čega je popularni Arduino. Arduino je razvojna pločica koju su razvili djelatnici Instituta za interaktivni dizajn u gradiću Ivrea na sjeveru Italije. Pokretačka ideja bila im je razviti platformu i sučelje za programiranje preko kojeg će studenti bez ikakve elektroničke podloge u tijeku jednosemestralnog kolegija izraditi interaktivne elektroničke uređaje . U svome naumu su itekako uspjeli. Ni sami tvorci nisu mogli predvidjeti koliki zamah će uzrokovati njihov proizvod(da su znali, možda bi ga i malo bolje zaštitili ;)). Danas je Arduino zajednica najaktivnija DIY(uradi sam) zajednica u čitavom svijetu. Arduino pločice naširoko su dostupne i to po pristupačnim cijenama. Unutar osnovnog Arduino sučelja dostupna je hrpa library-a koji omogućavaju brzo pristupanje jednostavnim funkcijama, poput mijenjanja stanja digitalnih izlaza, čitanje pozicije potenciometra ili uspostavljanje serijske veze. Uz to, net je pun librarya i gotovih projekata  koje korisnici Arduina redovito uploadaju i ostavljaju slobodu kopiranja i izrade. Ova zajednica je toliko jaka da ćete puno lakše ćete nači informaciju o tome kako nešto upogoniti preko mikrokontrolera ako pretražujete linkove vezane uz Arduino, nego uz goli AVR. Postoje i razne pločice kojima se Arduino nadograđuje jednostavnim uštekavanjem u osnovnu pločicu. Tako možete bez opekotina i udisanja para prilikom lemljenja priključiti grafički lcd, razne senzore ili primjerice SD karticu.

Zašto se onda uopće bacakati sa učenjem funkcioniranja AVR-a, gdje je naizgled potrebno prolaziti stotine stranica datasheetova, učiti napamet imena bitova desetak registara i još se hrvati sa lemljenjem vanjskih elektroničkih komponenti i sklopova.  Čak i u sklopu LHC ubrzivača atomskih čestica unutar CERN-a mogu se naći uređaji bazirani na Arduinu.  Ipak, ako malo proanaliziramo Arduino, očito je da to nije toliko velik odmak od golog AVR procesora.  Radi se o procesoru kojem su pinovi izučeni u stripove u koje je jednostavno upikavati žice bez lemljenja. Dodano je i par hardverskih komponenti od kojih je najvažniji USB to serial konverter, ali osim toga cijeli sklop arduina može se kopirati na eksperimentalnoj pločici ubacivanjem AVR-a, par žica za napajanje i programiranje te kristalnog oscilatora. Još jedna razlika je u tome da je u Arduinov AVR upisan bootloader program, koji služi jedino da pojednostavni hardverski dio potreban za programiranje. Dakle, sve što se može napraviti na AVR-u, može se napraviti i u Arduinu.

A sada opet pitanje, zašto bi to itko uopće htio. Čak ako i ne spadate u skupinu “onih koji bi htijeli znati više”, učenje osnova AVR-a može pomoći kada je potrebno debugirati Arduinov rad ili kad je teško naći library koji radi baš ono što trebate.  Jedan(valjda i jedini) problem sa Ardinom je da je on dizajniran za početnike u elektronici, To znači da kao prvo, nije toliko transparentno što Arduino zapravo radi ispod svojih funkcija.  Ako iz nekog razloga dođe do potrebe da malo zagrebete unutar osnovnih Arduinovih funkcija naći čete naredbe koje manipuliraju pojedinim bitovima registara Arduinova AVR procesora.  Kada naučite osnove o tim registrima, moći ćete uz pomoć datasheetova dostupnih na Atmelovim web stranicama otkriti o čemu se tu točno radi, te eventualno uvesti potrebne preinake, ili shvatiti zašto nešto ne šljaka u vašoj Arduino napravi. Osim toga Arduino je prvotno osmišljen za projekte koji su namjeneni prvenstveno za interakciju sa ljudima, tako neke osnovne funkcije zahtijevaju “godine” u procesorskom vremenu da izvrše jednostavne operacije. Korištenjem kôda koji direktno manipulira sa pojedinim bitovima registara mogu se napisati funkcije koji iste operacija mogu izvršiti i do 50 puta brže! To može činiti značajnu razliku ako uzmemo u obzir da funkcija čitanja stanja pina pisana čak i u assemblerskom kôdu zahtijeva kojih 10-ak clockova procesora. Dakle ako bi naprimjer koristili osnove Arduinove library-e za čitanje promjena enkoder, trebali bi paziti da je frekvencija tih promjena kojih 1000 puta manja od frekvencije na kojoj radi procesor(Arduino radi na 16MHz). Arduino zajednica je već izbacila library-a koji riješavaju takve probleme, ali nekad je i za njihovo korištenje potrebno poznavanje AVR-ovih registara, a nekad je čak i jednostavnije sam napisati funkciju, korištenjem znanja o AVR-u.

U ovoj seriji članaka bit će dakle opisane osnove rada sa AVR serijom mikrokontrolera, potrebni alati i preporuke za početni setup.  Zatim će se opisati osnovni registri, njihove funkcije i način manipuliranja bitovima. Sve ću nastojati objasniti uz jednostavne primjere kôda, koji će se moći ubacivati u kompleksnije programe. Kroz sve to ćemo vući paralele sa Arduino platformom, pošto je osnovni cilj ovih članaka bolje razumjeti Arduino, a ne zamijeniti ga AVR-om. Nećemo sad s konja na magarca ;).

Leave a Reply