Eksperimentai su mikrokontroleriais

Bandyti rašyti programas Atmel mikrokontroleriams pradėjau maždaug prieš 2 metus. Iki tol buvau didelis Microchip gerbėjas. Gal todėl, kad buvo lengviau nuo jų pradėti. Internete buvo galybės įvairiausių programų pavyzdžių. Nors kiek prisimenu, pradžia buvo labai sunki. Programuoti asembleriu net nebandžiau, iš karto pasirinkau C kalbą. Labai didelis privalumas buvo tai, kad C kompiliatorius buvo puikiai suderinamas su Proteus simuliatoriumi, kuris labai palengvina programų derinimą. Žodžiu savo laiku buvau gana gerai perpratęs PIC programavimą.

Bet palyginus Atmel ir Microchip mikrokontrolerius reikia pripažinti, kad Atmel pralenkė Microchip‘ą. Jei lyginsim tiek pat kainuojančius mikrokontrolerius, Atmel bus žymiai geresni. Ginčytis čia galima be galo, kas dažnai daroma įvairiuose forumuose. Bet tai nenuginčijamas faktas. Todėl ir man kilo mintis pereiti prie Atmel. Pats perėjimas nėra labai malonus dalykas, nes sunku susigaudyti kitos firmos mikrokontrolerių „geležies“ veikimo principuose. Bet jei pavyksta „persilaužti“, toliau jau nieko labai sudėtingo nėra.

Šį kartą noriu parašyti apie kai kuriuos mano eksperimentus besimokant programuoti AVR mikrokontrolerius. Dauguma šių eksperimentų daryta prieš metus. Besimokant norėjau išbandyti įvairiausias funkcijas, kaip jos veikia, kad, reikalui esant, galima būtų parašyti programą, negaištant galybes laiko beskaitant aprašymus ir forumus. Tam aš pasidariau du maketus. Vienas su mega8, kitas su mega16. Prie abiejų galima pasijungti dviejų eilučių tekstinį LCD, arba NOKIA 3310 LCD. Abiejuose yra šviesos diodų eilutės, kad galima būtų išvesti kažkokius programų veikimo rezultatus.

Pirmiausia buvo bandymai uždeginėti šviesos diodus, tikriausia nuo to dauguma ir pradeda. Taip buvo padaryta programėlė, kurią galima būtų pavadinti šviesos efektais „bėgančios ugnys“. Programa ima masyve aprašytas šviesos diodų junginėjimo kombinacijas ir jas išvedinėja paeiliui užduotu greičiu. Galima laisvai rinktis kombinacijas ir junginėjimosi greitį. Galima prikurti naujų, kiek tik užteks fantazijos. Pabaigoje esančiame video matosi kaip tai atrodo.

Toliau buvo bandymai su tekstiniu LCD. Tai labai paprasta, kompiliatorius jau turi tam reikalui funkcijas. Mane domino kaip parašyti meniu, kuriame galima būtų vaikščioti po punktus, paleidinėti nurodytas programos vietas, ir sugrįžti atgal į meniu. Yra galimybė labai lengvai pakeisti meniu, pridėti naujus punktus.

Kadangi visai neturėjau noro pajunginėti mygtukus, kilo mintis priiminėti komandas iš distancinio valdymo pulto. Šitas dalykas buvo jau žymiai sudėtingesnis. Pirmiausiai paskaitinėjau apie pačius komandų perdavimo principus. Internete yra aprašytas RC5, tačiau kai patyrinėjau savo aparatūros pultus, paaiškėjo, kad tik vienas iš jų dirba RC5 protokolu. Tai seno televizoriaus „Tauras“ pultas. Visi kiti naudoja savo protokolus. Čia buvo proga susipažinti su kai kuria mikrokontrolerių „geležim“ – pertraukimais, input capture funkcija, kurią naudojau signalo impulsų ilgiui matuoti. Iš pradžių realizavau RC5. Viskas veikė, bet aš atkreipiau dėmesį, kad vienas mano turimas pultas naudoja dar paprastesnį protokolą. Tai tiunerio „Pace“ pultas. Todėl vėliau perdariau programą, kad priiminėtų šio pulto komandas. Video matosi kiekvienas priimamas bitas.

Kitas eksperimentas buvo su akselerometrais. Jau anksčiau buvau kai ką daręs, kai programavau PIC. Taigi, panaudojau 3 ašių, 2g jautrumo akselerometrą. Jis išduoda analoginį signalą, taigi buvo proga susipažinti su ADC. Bėda tame, kad jis BGA korpuse, todėl prilituoti gana komplikuotas reikalas. Video matosi kaip jis prilituotas.

Akselerometrai naudojami pagreičiui matuoti. Bet yra ir kitas panaudojimo būdas – jais galima matuoti pasvirimo kampą. Būtent šita funkcija mane ir domino. Video labai akivaizdžiai matosi, kaip veikia ši funkcija. Beje, čia dar naudojama dinaminė indikacija abiem šviesos diodų eilutėms. Kamera netgi pagauna mirgėjimą. Realiai jo visai nesimato.

Kartą, benaršydamas internete, atradau tokį įdomų daiktą. Pasirodo Sharp gamina atstumo daviklius, veikiančius infraraudonųjų spindulių atsispindėjimo principu. Yra keletas jų variantų, skiriasi matuojamu atstumu. Ir kaina dar telpa į proto ribas. Taigi vieną tokį įsigijau, ir pažiūrėjau kaip veikia. O veikia visai šauniai, atstumą matuoja pakankamai tiksliai, ir beveik nepriklauso nuo to, kokios spalvos paviršius į kurį jis nukreiptas. Video matosi, kaip tai veikia. Ten nukreipta į sieną. Šviesos diodas užsidega priklausomai nuo atstumo, o LCD rodo tikrą atstumą. Su kalibravimu teko gerokai pavargt, nes daviklio išduodamas signalas nėra linijinis. Toks daviklis būtų visai neblogas konstruojant kokius robotus ar pan.

Tekstinis LCD gerai, bet norėjosi išbandyti kokį nors grafinį ekraną. Pasirinkau Nokia 3310 LCD. Su šituo man buvo daugiausiai vargo. Sunkiai paleidau. Kai neveikia tiesiog neaišku kur gali būti priežastis, ar pats LCD neveikia, ar programoje kas blogai. Bet visgi pavyko tai davesti iki normalaus veikimo. Turiu biblioteką (perdarinėjau vieną, ne savo), kuri gali dėlioti taškus ir braižyti linijas pagal nurodytas koordinates, išvedinėti dviejų dydžių šriftus, arba išvesti kokį paveiksliuką esantį mikrokontrolerio atmintyje.

Eksperimentai tuo nesibaigė. Bandžiau PWM variklių valdymui, bandžiau formuoti servomechanizmų valdymo signalus. Hardwariniu ir softwariniu būdu. Pvz. servomechanizmas valdomas akselerometru. Kam tai galima panaudot? :) Bet apie tai kitą kartą…

This entry was posted in Elektronika, Programavimas. Bookmark the permalink.

6 Responses to Eksperimentai su mikrokontroleriais

  1. Elektronix says:

    Labas gal galetum ideti programas lcd ne nokijos kur vaikstai po meniu padaryta su pultu ir akselerometro jei negaila

  2. ReM says:

    Programų nebus. Bent jau dabar, gal ateityje ir įdėsiu. Mažai iš jų būtų naudos kitiems. Mano programavimas nėra pats aiškiausias, o davesti tai iki normaliai suprantamo lygio nėra laiko. Be to ir schemas tada reikėtų braižyti, o jos egzistuoja tik mano galvoje.

  3. Elektronix says:

    na nebutinai schemas braizyt juk programoj nurodyta i koki porta ka paduot tai butu galima orentuotis bet ajsku schema butu geriau na jei turesi laiko imesk

  4. Elektronix says:

    dar norejau paklausti koks cia akselerometra ir kur pirkai ir koke kaina mazdauk nes lemonoj pazejau 160lt kainuoj

  5. ReM says:

    Jei gerai prisimenu (dabar nesimato užrašo), akselerometras MMA7260QR2. Kiek kainuoja nežinau – užsisakiau kaip sample.

  6. Tomas says:

    Sveikas , gal tu gali padet su PIC12f629 programavimu. Pati programa parasyta, ja tik reiktu ikelt.

Leave a Reply

Your email address will not be published. Required fields are marked *