- Namestitev in zahteva strojne opreme
- Shema vezja za LED povezovanje z Nuvoton N76E003
- Časovni zatiči na Nuvoton N76E003
- Registri časovnika v Nuvotonu N76E003
- Vrste časov v Nuvotonu N76E003
- Programiranje mikrokrmilnika Nuvoton N76E003 za časovnike
- Utripajoča koda in preverjanje izhoda za funkcijo časovnika
V naših prejšnjih vajah za mikrokrmilnik Nuvoton smo kot vodnik za začetek uporabili osnovni program za utripanje LED, za povezavo taktilnega stikala pa smo povezali tudi GPIO. S to vadnico se popolnoma zavedamo, kako konfigurirati projekt Keil in nastaviti okolje za programiranje mikrokrmilnika N76E003 Nuvoton. Čas je, da uporabimo notranjo periferno enoto mikrokrmilnika in se z vgrajenim časovnikom N76E003 premaknemo še malo naprej.
V prejšnji vadnici smo programsko zakasnitev uporabili le za utripanje LED, zato se bomo v tej vadnici naučili, kako uporabljati funkcijo zakasnitve časovnika ter Timer ISR (Interrupt Service Routine) in utripati dve posamezni LED. Oglejte si tudi vadnico Arduino Timer in PIC Timer tutorial, da preverite, kako uporabljati časovnike z drugimi mikrokrmilniki. Ne da bi zapravili veliko časa, ocenimo, kakšno nastavitev strojne opreme potrebujemo.
Namestitev in zahteva strojne opreme
Ker je zahteva tega projekta, da se naučimo Timer ISR in funkcijo časovne zakasnitve, bomo uporabili dve LED-diodi, od katerih bo ena utripala s časovno zakasnitvijo v zanki while, druga pa bo utripala znotraj funkcije ISR.
Ker je na razvojni plošči N76E003 na voljo LED, je za projekt potreben še en LED in trenutno omejevalni upor, ki omejuje tok LED. Komponente, ki jih potrebujemo -
- Vsaka barva LED
- Upor 100R
Da ne omenjam, poleg zgornjih komponent potrebujemo razvojno ploščo na osnovi mikrokrmilnika N76E003 in Nu-Link programer. Poleg tega so za povezavo vseh komponent potrebne tudi žice za pritrditev in priključne žice.
Shema vezja za LED povezovanje z Nuvoton N76E003
Kot lahko vidimo v spodnji shemi, je testna LED na voljo znotraj razvojne plošče in je priključena na vrata 1.4. Na vrata 1.5 je priključena dodatna LED. Upor R3 se uporablja za omejevanje toka LED. Skrajno levo je prikazana povezava s programskim vmesnikom.
Časovni zatiči na Nuvoton N76E003
Zatič diagram N76E003 je razvidno iz spodnje image-
Kot lahko vidimo, ima vsak zatič različne specifikacije in ga je mogoče uporabiti za več namenov. Vendar pin 1,5, ki se uporablja kot LED izhodni zatič, izgubi PWM in druge funkcije. Toda to ni problem, saj za ta projekt ni potrebna druga funkcionalnost.
Razlog za izbiro pin 1,5 kot izhoda in pin 1,6 kot vhod je v najbližji razpoložljivosti zatičev GND in VDD za enostavno povezavo. Vendar pa je v tem mikrokrmilniku od 20 zatičev 18 zatičev mogoče uporabiti kot zatič GPIO, katere koli druge zatiče GPIO pa lahko uporabimo za izhod in namene, povezane z vhodom, razen zatiča 2.0, ki je namensko uporabljen za ponastavitev vhoda in ga ni mogoče uporabiti kot izhod. Vse zatiče GPIO je mogoče konfigurirati v spodaj opisanem načinu.
Glede na podatkovni list sta PxM1.n in PxM2.n dva registra, ki se uporabljata za določanje nadzornega delovanja V / I vrat. Ker uporabljamo LED in potrebujemo zatič kot splošni izhodni zatič, bomo za zatiče uporabili kvazi dvosmerni način.
Registri časovnika v Nuvotonu N76E003
Časovnik je pomemben za vsako enoto mikrokrmilnika. Mikrokrmilnik ima vgrajeno zunanjo napravo s časovnikom. Nuvoton N76E003 ima tudi 16-bitno zunanjo opremo s časovnikom. Vendar se vsak odštevalnik uporablja za različne namene in pred uporabo katerega koli vmesnika časovnika je pomembno vedeti o odštevalniku.
Vrste časov v Nuvotonu N76E003
Časovnik 0 in 1:
Ta dva časovnika timer0 in timer1 sta enaka 8051 časovnikom. Ta dva časovnika lahko uporabljate kot splošni časovnik ali kot števca. Ta dva časovnika delujeta v štirih načinih. V načinu 0 bodo ti časovniki delovali v 13-bitnem načinu Timer / Counter. V načinu 1 bo ločljivost teh dveh časovnikov 16-bitna. V načinu 2 so časovniki konfigurirani kot način samodejnega ponovnega nalaganja z 8-bitno ločljivostjo. V načinu 3 se časovnik 1 ustavi in časovnik 0 lahko hkrati uporabite kot števec in časovnik.
Od teh štirih načinov se v večini primerov uporablja način 1. Ta dva merilnika časa lahko uporabljata Fsys (sistemsko frekvenco) v fiksnem ali vnaprej določenem načinu (Fys / 12). Ura je lahko tudi iz zunanjega vira ure.
Časovnik 2:
Timer 2 je tudi 16-bitni časovnik, ki se v glavnem uporablja za zajemanje valovnih oblik. Uporablja tudi sistemsko uro in se lahko uporablja v različnih aplikacijah z delitvijo frekvence ure z uporabo 8 različnih lestvic. Uporablja se lahko tudi v načinu primerjave ali za generiranje PWM.
Tako kot časovnik 0 in časovnik 1 lahko tudi časovnik 2 uporabljate v načinu samodejnega ponovnega nalaganja.
Časovnik 3:
Časovnik 3 se uporablja tudi kot 16-bitni časovnik in se uporablja za vir hitrosti prenosa za UART. Ima tudi funkcijo samodejnega ponovnega nalaganja. Pomembno je, da ta časovnik uporabljate samo za serijsko komunikacijo (UART), če aplikacija zahteva komunikacijo UART. V takem primeru je priporočljivo, da tega časovnika ne uporabljate za druge namene, ker je bil postopek nastavitve časovnika v sporu.
Watchdog Timer:
Watchdog Timer se lahko uporablja kot standardni 6-bitni časovnik, vendar se v ta namen ne uporablja. Uporaba Watchdog timerja kot splošnega časovnika je primerna za aplikacije z majhno porabo energije, kjer mikrokrmilnik večinoma ostane v stanju mirovanja.
Watchdog Timer, kot že ime pove, vedno preveri, ali mikrokrmilnik deluje pravilno ali ne. V primeru obešenega ali ustavljenega mikrokrmilnika WDT (Watchdog Timer) samodejno ponastavi mikrokrmilnik, kar zagotavlja, da mikrokrmilnik deluje v neprekinjenem toku kode, ne da bi se zataknil, obesil ali ustavil.
Samosprožilec:
To je druga zunanja oprema časovnika, ki služi namenskemu časovnemu postopku, ki je enak časovnemu pasu. Ta časovnik občasno prebudi sistem, ko mikrokrmilnik deluje v načinu nizke porabe.
Ta zunanja naprava s časovnikom se lahko uporablja interno ali z zunanjo zunanjo opremo za preklop mikrokrmilnika iz načina spanja. Za ta projekt bomo uporabili Timer 1 in Timer 2.
Programiranje mikrokrmilnika Nuvoton N76E003 za časovnike
Nastavitev zatičev kot izhoda:
Najprej začnimo z izhodnim odsekom. Uporabljamo dve LED, ena je vgrajena LED, imenovana Test, povezana s priključkom P1.4 in zunanja LED, povezana s pinom P1.5.
Zato sta ta dva zatiča konfigurirana kot izhodni zatič za povezavo teh dveh LED z uporabo spodnjih delčkov kode.
#define Test_LED P14 #define LED1 P15
Ta dva zatiča sta v nastavitveni funkciji nastavljena kot kvazi dvosmerni zatič.
void setup (void) {P14_Quasi_Mode; P15_Quasi_Mode; }
Nastavitev funkcije časovnika:
V nastavitveni funkciji je potreben časovnik 2, ki ga želite konfigurirati, da dobite želeni izhod. Za to bomo register T2MOD nastavili s faktorjem delitve ure 1/128 in ga uporabili v načinu zakasnitve samodejnega ponovnega nalaganja. Tu je pregled registra T2MOD -
4,5 in 6-bit registra T2MOD nastavita časovnik 2, delilec ure pa 7-bit, način samodejnega ponovnega nalaganja. To se naredi z uporabo spodnje vrstice -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Ti dve vrstici sta v datoteki Function_define.h definirani kot
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Zdaj te vrstice določajo časovno vrednost, potrebno za ISR Timer 2.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Kar je nadalje opredeljeno v datoteki Function_define.h kot-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Torej, 16000000 je kristalna frekvenca 16 MHz, ki nastavlja časovno zakasnitev 100 ms.
Pod dvema vrsticama se izpraznijo bajti Timer 2 Low in High.
TL2 = 0; TH2 = 0;
Končno bo spodnja koda omogočila prekinitev časovnika 2 in zagnala časovnik 2.
set_ET2; // Omogoči prekinitev Timer2 set_EA; set_TR2; // Timer2 run
Popolno nastavitveno funkcijo lahko vidite v spodnjih kodah -
void setup (void) { P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; // Omogoči prekinitev Timer2 set_EA; set_TR2; // zagon časovnika2 }
Funkcija ISR časovnika 2:
Funkcijo Timer 2 ISR lahko vidite v spodnji kodi.
void Timer2_ISR (void) interrupt 5 { clr_TF2; // Počisti zastavico prekinitve časovnika2 LED1 = ~ LED1; // preklop LED1, priključen v P1.5; }
Utripajoča koda in preverjanje izhoda za funkcijo časovnika
Koda (podana spodaj) je pri prevajanju vrnila 0 opozoril in 0 napak in sem jo utripal z uporabo privzete utripajoče metode v Keilu. Po utripanju so LED utripale v določenem časovnem zamiku, kot je bilo programirano.
Oglejte si spodnji video za popoln prikaz delovanja plošče za to kodo. Upam, da ste uživali v vadnici in se naučili kaj koristnega, če imate kakršna koli vprašanja, jih pustite v spodnjem oddelku za komentarje. Na naših forumih lahko objavite tudi druga tehnična vprašanja.