Taimerid ja viited Robootika Kodulaboris

Autor: Raivo Sell

Käesolev õpiobjekt tutvustab taimerite ja viidete kasutamist Robootika Kodulaboriga.

Taimerid on abiks rakendustes, kus on vaja mõõta aega, tekitada pause või protsesse täpselt juhtida. Oma olemuselt on taimerid ja viited väga sarnased, kuid on ka selgesti eristatavaid erinevusi. Taimerid on mikrokontrolleri füüsilised moodulid, mis töötavad mikrokontrolleri protsessorist sõltumatult, viited on aga tarkvaralised programmilõigud, mis just nimelt kulutavad protsessori tööaega. Sarnasuse poole pealt töötavad nad mõlemad aga mikrokontrolleri töötakte lugedes.

Algselt olid taimerid eraldiseisvad integraallülitused elektriskeemis, mitte osa mikrokontrollerist. Eraldiseisvad taimerite kiibid pole ka tänapäeval kuhugi kadunud, sest mõnes rakenduses pole mikrokontrollerit ennast vajagi ja mõned taimerid on võimekamad kui mikrokontrolleri sisesed taimerid. Taimerid on lihtsast aja loendamise seadmest arenenud keerukateks signaalide vastuvõtmise või genereerimise süsteemideks. Nad moduleerivad ja demoduleerivad signaale ning nad on võimelised taktsignaali kordistama või jagama. On olemas ka spetsiaalsed aeg-digitaalmuundurid (TDC, inglise keeles time-to-digital converter), mis suudavad registreerida aega pikosekundites.

ESF

Õpiobjekti nimi: Taimerid ja viited Robootika Kodulaboris

Õpiväljundid:

Pärast mooduli läbimist õpilane:

  • Kirjeldab taimeri tööprintsiipi
  • Eristab tarkvaralisi ja riistvaralisi viiteid
  • Kirjeldab taimerite tööpõhimõtet
  • Kirjeldab mikrokontrolleri katkestusi
  • Ühendab vajalikud moodulid õigesti

Kasutusjuhend:

  • Teoreetilise taustamaterjaliga tutvumine
  • Õppevideo vaatamine
  • Enesekontrolli küsimustele vastamine

Õpetatav osa: Lugeda teoreetilist ülevaadet enne riistvara reaalset ühendamist ja pingestamist. Vaadata õpivideosid korrektse riistvara käsitlemise tagamiseks. Õpitu kinnistamiseks tuleb praktilised näited reaalselt läbi teha.

Seoste loomine: Läbi õppevideo ja sõnalise selgituse järgimise.

Kinnistav osa: Iseseisev praktika reaalse riistvarakomplekti baasil.

TEOREETILINE OSA

Tarkvaraline viide

Tihti on mikrokontrollerite programmis vaja tekitada viiteid, et tegevusi ajastada või nende lõppu oodata. Üks idee poolest lihtsamaid meetodeid mikrokontrolleri töös paus tekitada on selle protsessor mingi muu tegevusega üle koormata - näiteks panna see lugema suuri arve. Protsessori taktsagedusest saab välja arvutada, mitmeni see arve loendama peaks, et kindlat ajalist viidet tekitada. Mingi arvu loendamine nullist protsessori taktsageduse väärtuseni hertsides tekitaks teoreetiliselt viite üks sekund. Praktikas see erinevatel põhjustel päris nii lihtne ei ole.

Kuna kõrgtaseme keeles (näiteks C-keeles) programmeerides ei kirjutata programmi otse käsustiku baasil, peab tarkvaralise viite tekitamiseks tundma ka kompilaatorit, mis programmi masinkoodi teisendab. Just sellest sõltub, mitu instruktsiooni (ja sellest tulenevalt mitu takti) kulub aritmeetilisteks arvutusteks. Keerukust lisab veel asjaolu, et kompilaator võib programmi masinkoodi teisendada mitut moodi - näiteks tehes masinkoodi võimalikult mälusäästlikuks või võimalikult kiiresti täidetavaks. Neid kompilaatori tegevusi nimetatakse optimeerimiseks. Erinevate optimeerimise režiimidega tulevad ka tarkvaralise viite masinkood ja selle ajaline kestus erinevad.

Riistvaraline viide

Tarkvaraline viide pole ainus meetod pausi tekitamiseks. Sama asja saab teha ka taimeriga. Taimer on riistvaraline kindla sagedusega suurenev või vähenev loendur. Loenduri taktsignaali saab enamasti tekitada mikrokontrolleri töötaktist või mingist välisest taktist. Taktsignaali sagedust saab üldjuhul ka mingi teguriga jagada väiksema taktsageduse saavutamiseks - seda tehakse taktijaguriga, mida inglise keeles nimetatakse prescaler. Oluline on siinkohal siiski fakt, et fikseeritud taktsagedusega loenduri väärtus on lineaarses sõltuvuses ajast. Aja saab välja arvutada, korrutades loenduri taktisignaali perioodi loenduri väärtusega.

AVR loendurit saab panna teavitama loenduri ületäitumisest (inglise keeles overflow) või kindla väärtuse saavutamisest (inglise keeles compare match). Ületäitumine tekib hetkel, kui loendur on omistanud maksimaalse võimaliku väärtuse ja alustab uuesti nullist loendamist. Kindla väärtuse saavutamise puhul aga toimub loenduri suurendamise hetkel selle uue väärtuse võrdlemine kasutaja poolt määratud väärtusega. Sündmuse tekkimise korral seatakse AVR olekuregistrites vastavad bitid automaatselt kõrgeks.

Selleks, et taimeriga viide tekitada, piisabki vaid loenduri seadistamisest ja olekubiti kõrgeks minemise ootamisest. Erinevalt tarkvaralisest viitest ei sõltu taimerite töö kompilaatorist, mis teeb nende kasutamise töökindlamaks. Samas võib AVR loendurite mitmekesisuse (või ka segasuse) tõttu nende seadistamine üsna tülikas tunduda. Olenevalt mikrokontrolleri taktsignaalist võib ka juhtuda, et see ei jagu täpselt soovitud viite perioodiga ja viide ei ole täpne.

Perioodiline katkestus

Katkestused on mikrokontrolleris esinevatele sündmustele reageerivad programmilõigud. Katkestusi kasutatakse tavaliselt kiireks sündmusele reageerimiseks, kuid neid võib kasutada ka mitme paralleelse protsessi või täpset ajastust nõudvate tegevuste täitmiseks ning voolu säästmiseks. Näiteks on katkestuste abil võimalik panna vilkuma LED, mille vilkumise sagedus ei sõltu sellest, mis programmis parasjagu toimub.

NÄITEKOODID

 

Tarkvaraline viide


Koodi tekstiversioon

 

Riistvaraline viide


Koodi tekstiversioon

 

Perioodiline katkestus


Koodi tekstiversioon

 

ENESEKONTROLL

Vastates alljärgnevatele küsimustele, saad proovida oma teadmisi antud teema kohta

Millise mikrokontrolleri üksusega tekitatakse tavaliselt viiteid?
Vali õige vastus

PWM generaator
Analoog-digitaal muundur
Taimer
Digitaal sisend/väljund

Millest saab tekitada taimeri loenduri taktsignaali?
Vali õiged vastused

Mikrokontrolleri töötaktist
Taktijagurist
PWM generaatorist
Välisest taktigeneraatorist

Millistest parameetritest sõltub tarkvaralise viite kestus?
Vali õiged vastused

Kompilaatori opmtimeerimise tasemest
Kontrolleri taktsagedusest
Taimeri valikus (8 või 16 bit)
Kellaajast
Toitepingest

Kumb meetod on täpsem viite tekitamiseks?
Vali õige vastus

Tarkvaraline
Riistvaraline

Milleks kasutatakse katkestusi?
Vali õiged vastused

Kiireks sündmustele reageerimiseks
Paralleelsete protsesside täitmiseks
Täpse ajastuse saavutamiseks
Tingimuste kontrollimiseks
Kontrolleri taktsageduse reguleerimiseks

LISAMATERJAL

  1. Robootika Kodulabor - Tarkvaraline viide
  2. Robootika Kodulabor - Riistvaraline viide
  3. Robootika Kodulabor - Perioodiline katkestus

Teoreetilise osa algtekstide autor: Raivo Sell ja Mikk Leini