0,00 €

V košarici ni izdelkov.

0,00 €

V košarici ni izdelkov.

More
    DomovRevijaProgramiranjeAplikacije z mikrokontrolerji, mikrokontrolerji

    Aplikacije z mikrokontrolerji, mikrokontrolerji

    Svet elektronike colorAvtor: Tavish Armstrong
    2018_260_33

    Če tudi vi spadate med tiste raziskovalce v elektroniki, ki morajo neprestano odkrivati nove svetove, ste prav gotovo naleteli na podobno oviro, kot jo opisuje avtor Tavish Armstrong. Opis in nazorno prikazano delovanje pa bosta tudi sicer marsikomu med nami razjasnila nebo v zvezi z uporabo časovnikov in praktičnim vplivom nastavitev, ki so na voljo za izbiro v registrih, namenjenih časovnikom.

    Enostavna interaktivna razlaga Teensyjevega 16-bitnega časovnika

    Slika 1: Delo s simulatorjem in vpliv na vrednosti v registrih

    Pri predmetu »SOEN 422 – Embedded Systems and Software« na Univerzi Concordia jeseni leta 2012 me je razočaralo pomanjkanje dobre dokumentacije o strojni opremi Teensyja. Vse, kar bi morali pri vajah storiti, je bilo ponovno pisanje Arduino funkcije analogWrite () v čisti C programski kodi, vendar moram priznati, da je bila celo ta naloga zelo težavna. Časovniki so na strojnem nivoju narejeni tako, da lahko z njimi naredimo veliko različnih stvari, vendar moramo pred njihovo uporabo temeljito razumeti, kaj delajo (ni pa nam treba vedeti, kako to storijo). Običajno je potrebno le najti ustrezne načine delovanja in ugotoviti, kako jih izbrati in omogočiti. Najboljši način, da to izvemo, je branje priročnika za uporabljeni čip. Na ta način boste izvedeli cel kup (včasih že motečih) podrobnostih o tem, na kaj vpliva vsak posamezni register, kako časovnik deluje v vsakem posameznem načinu delovanja za vsakega od različnih načinov, ki so pri izbranem čipu na razpolago. V dokumentaciji najdemo tudi grafične prikaze, ki natančno prikazujejo, kako se interaktivni časovnik vzajemno ujema s svojimi registri. Vsekakor gre za deset strani priročnika z resnično vsemi globokimi podrobnostmi, ki bi jih morda lahko napačno razumeli.

    Pred vami je zato moj poskus bolj prijazne razlage Teensyjevega časovnika 1 in njegove uporabe, ki je namenjena tistim, ki se s Teensyjem srečajo prvič.

    Razlaga delovanja

    V Teensy ++ so vgrajeni trije časovniki. Drugi, ki se imenuje Timer 1, je 16-bitni časovnik. Uporablja se lahko za občasne prekinitve, ki vam omogočajo, da periodično skočite na izvajanje neke programske kode. Lahko se uporablja tudi za pulzno širinsko modulacijo (PWM), ki je eden izmed načinov simulacije analognih signalov s pomočjo digitalnih signalov. To lahko uporabite za nastavitev zatemnitve luči s polprevodniškimi svetlobnimi viri (LED).
    Najbrž še niste pozabili prvih eksperimentov v vašem laboratoriju, kjer ste vklopili LED, tako da ste nastavili izhodni priključek na VISOK logični nivo? VISOK pomeni, da je na izhodnem priključku 5 voltov. Če ga spremenite na NIZEK, bo to 0 voltov. V digitalni obliki imamo samo to in ne obstaja ničesar vmes. Lahko pa vmesne vrednosti napetosti simuliramo tako, da vrednosti 0 in 5V tako hitro spreminjamo, da se zdi, da je izmerjena napetost na izhodnem priključku nekje med 0 in 5. Povprečna napetost, ki jo bomo na takem priključku izmerili, je navidezna napetost.
    Tako kot večino funkcionalnosti na Teensy, tudi obnašanje tega časovnika nastavimo z nastavljanjem različnih bitov v različnih registrih. Seveda pa je koristno vedeti, kateri so ti registri in katere so njihove konstante v C jeziku:

    TCNT1

    Časovnik/števec (X) je register, ki se samodejno poveča ali zmanjša. Z drugimi besedami, to je trenutna vrednost časovnika. Odvisno od izbranega načina delovanja, lahko šteje dokler vrednost, ki jo vsebuje, ne doseže posebne vrednosti, imenovane TOP in se zatem postavi na začetno vrednost 0; lahko pa šteje do TOP in nato spet nazaj do 0.

    OCR1A

    Izhodni primerjalni register (Kanal A) je register, katerega vrednost se primerja s trenutno vrednostjo TCNT1. Odvisno od načina generiranja valov in primerjalnega izhodnega načina, se to lahko uporabi kot prag, od katerega naprej je eden od fizičnih izhodnih priključkov nastavljen na HIGH. Glejte tudi COM in WGM.

    TCCR1

    Kontrolni register časovnika/števca ima dva dela: TCCR1A in TCCR1B. Odvisno od tega, kateri biti so nastavljeni v tem registru, se bo časovnik/števec Timer1 obnašal drugače. Nastavite lahko primerjalni izhodni način (COM), način generiranja valov (WGM) in izberete takt ure (CS), glej program 1.

    COM

    Slika 2: Graf izhodnega signala pri uporabljenih nastavitvah

    Omenil sem primerjalni izhodni način. Ta dva bita lahko uporabite za določitev, v katere delih TCNT cikla je vklopljen OC1A priključek. Na primer, ko je COM = 3, je pin OC1A nastavljen na HIGH, če je TCNT1 večji od OCR1A.

    WGM

    V tem registru določamo način delovanja časovnika Timer1 kot generatorja valovnih oblik (Wave Generation Mode). Ta register nam omogoča izbiro med načini Non-PWM, PWM in Fast-PWM; kakšna je vrednost TOP-a; in še več. To štiri-bitno število je sestavljeno iz dveh bitov, ki se nahajata v registru TCCR1A in dveh bitov, ki se nahajata v registru TCCR1B.

    TOP

    To je MAX, najvišja vrednost, ki jo lahko ima TCNT1. Ta vrednost je lahko med 0 in 0xFFFF, saj je Timer 1 16-bitni časovnik. Če bi bil to 8-bitni časovnik, bi imel največjo vrednost TOP, ki bi bila enaka 0xFF. Manjše vrednosti TOP pomenijo višjo frekvenco.

    CS

    Možnost izbire ure takta nam omogoča, da za štetje in časovnik izberemo »pred-delitelj«. CS = 2 na primer pomeni, da časovnik deluje s hitrostjo CPU-ja; CS = 3 pa pomeni, da časovnik deluje pri FCPU/4 in tako naprej. To je še en način za spreminjanje frekvence pulza.

    Simulator boste našli na naslovu http://tavisharmstrong.com/timer1/, kar je spletna stran avtorja Tavisha Armstronga, ki nam je prijazno olajšal delo in prečesavanje tehnične dokumentacije vedno znova, ko bi želeli nastaviti delovanje generatorja valovnih oblik. Večina nastavitev tudi deluje na simulatorju, ki nam grafično nazorno prikaže, na katere značilnosti izhodnega signala vplivamo s kakršnokoli spremembo v registrih, nekatere pa so še v fazi razvoja.

    Kako simulator uporabljamo? Na sliki 1 je s krožci označeno, kje s klikom spremenimo vrednost bita. Dovolj je le klik, vrednosti ni potrebno spreminjati ročno! Vidimo lahko, da nastavljamo tri skupine bitov, ki vplivajo na vrednosti »Clock select«, »Wave Generation« in »COM«, katerega pomen je bil pojasnjen že prej. Vrednost OCR1A spreminjamo s klikom pod modro označeno vrednostjo ( na sliki je to 0x7f, heksadecimalni zapis vrednosti OCR1A, kar je 127 zapisano decimalno), potem pa s pritisnjeno tipko drsimo levo (manjšamo vrednost) ali desno (večamo vrednost). Poleg tega, da se nam vrednosti sproti ažurirajo v izpisu, ki je v spodnjem delu slike, se nam sproti glede na nove vrednosti spreminja tudi graf, ki je prav za vrednosti s slike 1 prikazan na sliki 2. Bodite pozorni na frekvenco izhodnega signala! Poskusite, nekatere nastavitve z uporabo tega simulatorja postanejo veliko bolj razumljive!

    Povzeto po: http://tavisharmstrong.com/timer1/