0,00 €

V košarici ni izdelkov.

0,00 €

V košarici ni izdelkov.

More
    DomovLiteraturaKratka šola programiranja mikrokontrolerjev

    Kratka šola programiranja mikrokontrolerjev

    Opazili boste, da smo na zaÄŤetku programa definirali, katera vrata bodo vhodna oziroma izhodna. Nato smo na PORTB vpisali vrednost 255, kar je binarno 1111 1111. To smo naredili zato, da vse LEDice ugasnemo. Zdaj Ĺľe poznamo Do-Loop zanko, v kateri se nahaja IF ELSE stavek. Program je jasen: v kolikor bo logiÄŤno stanje na prikljuÄŤku Portd.0 = 0 potem se izvede prvi del IF stavka, v nasprotnem primeru pa drugi.

     

    Pozorni bralci ste opazili neskladje med zadnjim stavkom in programom. V programu je zapisano If Pind.0=0, mi smo pa zapisali, ÄŤe bo stanje na prikljuÄŤku Portd.0=0. Oboje je prav in zaÄŤetnikom v programiranju sprva dela malce teĹľav. Tukaj bo pomagalo nekaj znanja o notranji zgradbi AVR mikrokontrolerjev. AVRji imajo 3 registre, ki so vezani na posamezni prikljuÄŤek. Obstajajo PORTx, PINx in DDRx registri. DDRx register je namenjen temu, da AVR-ju doloÄŤimo ali bo doloÄŤeni prikljuÄŤek vhodni ali izhodni. V kolikor postavimo DDRx na 0, bo doloÄŤen prikljuÄŤek definiran kot vhodni, ÄŤe postavimo DDRx na 1, bo taisti prikljuÄŤek izhodni.

    Slike ni
    KLIK za poveÄŤavo
    Slike ni
    KLIK za poveÄŤavo

    V PORTx register vpišemo vrednost na posameznem priključku, medtem ko iz PINx registra beremo vrednost na posameznem priključku, ki je na shemi označen kot Portx.y. Če bi namesto pisanega stavka If Pind.0=0 napisali If Portd.0=0, bi pravzaprav brali vrednost, ki smo jo nazadnje vpisali na Portd.0. Avtor Bascoma nam je definicijo priključkov poenostavil z ukazom CONFIG, kjer definiramo ali je posamezni priključek vhod ali izhod, kot je razvidno v programu.

    Ko boste omenjeni program prevedli in z njim sprogramirali mikrokontroler, boste videli, da sprva utripa LEDica na prikljuÄŤku PortB.1. ÄŚe pritisnemo tipko SW1, bo zaÄŤela utripati LEDica na PortB.0. Pri tem boste verjetno opazili, da se v primeru, da pritisnemo tipko ko je vklopljena LEDica, le-ta ne ugasne. Razlog za to je v tem, da moramo mikrokontrolerju za vsak trenutek njegovega delovanja definirati program zelo natanÄŤno. Zgoraj opisani program namreÄŤ postavi logiÄŤne enice na zaÄŤetku programa (Portb = 255). V nadaljevanju programa pa tega ne naredimo veÄŤ. Zato bi kazalo, da bo program popravili tako, da bi logiÄŤne enice vpisali v Do-Loop zanki, kot kaĹľe naslednji program.

    Config Portb = Output
    Config Portd.0 = Input
    Dim Ledica As Bit
    Dim Tipka As Bit
    $regfile = "attiny2313.dat"
    Do
    Portb = 255
    If Pind.0 = 0 Then
       Portb.0 = Ledica
       Ledica = Not Ledica
       Wait 1
       Else
       Portb.1 = Ledica
       Ledica = Not Ledica
       Wait 1
    End If
    Loop
    Slike ni
    KLIK za poveÄŤavo
    Slike ni
    KLIK za poveÄŤavo

    Kot smo opazili nam program lepo deluje, vendar se v tem lepem delovanju skriva past, ki jo elektroniki poznamo pod besedo odskakovanje. Kaj mislim s tem? Vsaka tipka ali stikalo nista idealna, kar se odraža v odskakovanju kontakta. To pomeni, da stikalo ne preklopi iz logične 1 v 0 v trenutku pač pa je vmes veliko preskakovanja iz 1 v 0 in obratno. Tega odskakovanja ponavadi ne zaznamo, saj današnje naprave s programsko opremo ta efekt uspešno preprečujejo. V našem primeru je program tako napisan, da ignorira odskakovanje. V kolikor pa bi napisali malce drugačen program bi ugotovili, da stik na tipkah prav neprijetno odskakuje, kar mikrokontroler z lahkoto zazna. In to odskakovanje lahko povzroči zaplete pri naši napravah. Zato so programerji izumili način, ki preprečuje neželeno zaznavanje odskakovanja. Ponavadi se odskakovanje programsko reši tako, da program spremlja stanje tipke v določenem časovnem intervalu – npr 100 milisekund. V kolikor program ugotovi, da je tipka v npr. 100 milisekundah res pritisnjena, potem je to znak, da je stikalo res preklopilo. V Bascomu bomo to elegantno rešili z uporabo ukaza Debounce. Sintaksa ukaza debounce je sledeča:

    Debounce Pinx.y, stanje, ime subrutine, sub

    Prejšnji članek
    Naslednji ÄŤlanek