- Nastavení hardwaru a požadavky
- Schéma zapojení rozhraní LED s Nuvoton N76E003
- Piny časovače na Nuvoton N76E003
- Registr časovače v Nuvoton N76E003
- Druhy časů v Nuvoton N76E003
- Programování mikrokontroléru Nuvoton N76E003 pro časovače
- Blikající kód a ověřovací výstup pro funkčnost časovače
V našich předchozích cvičeních pro mikrokontroléry Nuvoton jsme použili základní program blikání LED jako průvodce pro začátek a také jsme propojili GPIO jako vstup pro připojení hmatového spínače. S tímto tutoriálem jsme si plně vědomi toho, jak nakonfigurovat projekt Keil a nastavit prostředí pro programování mikrokontroléru N76E003 Nuvoton. Je čas použít interní periferii jednotky mikrokontroléru a posunout se o kousek dále pomocí vestavěného časovače N76E003.
V našem předchozím výukovém programu jsme použili pouze softwarové zpoždění k blikání diody LED, takže v tomto výukovém programu se naučíme, jak používat funkci časovaného zpoždění, stejně jako časovač ISR (Interrupt Service Routine) a blikat dvě jednotlivé LED. Můžete si také prohlédnout výukový program časovače Arduino a výukový program časovače PIC a zkontrolovat, jak používat časovače s jinými mikrokontroléry. Bez ztráty času pojďme vyhodnotit, jaké nastavení hardwaru požadujeme.
Nastavení hardwaru a požadavky
Protože požadavkem tohoto projektu je naučit se časovač ISR a funkci časovače zpoždění, použijeme dvě LED diody, z nichž jedna bude blikat pomocí zpoždění časovače ve smyčce while a další bude blikat uvnitř funkce ISR.
Jelikož je na vývojové desce N76E003 k dispozici LED, vyžaduje tento projekt k omezení proudu LED jednu další LED a rezistor omezující proud. Komponenty, které požadujeme -
- Jakákoli barva LED
- 100R rezistor
Nemluvě o tom, kromě výše uvedených komponent potřebujeme vývojovou desku založenou na mikrokontrolérech N76E003 a programátor Nu-Link. Kromě toho jsou pro připojení všech komponent vyžadovány také nepájivé pole a připojovací vodiče.
Schéma zapojení rozhraní LED s Nuvoton N76E003
Jak vidíme na níže uvedeném schématu, testovací LED je k dispozici uvnitř vývojové desky a je připojena na portu 1.4. K portu 1.5 je připojena další LED. Rezistor R3 se používá k omezení proudu LED. Zcela vlevo je zobrazeno připojení programovacího rozhraní.
Piny časovače na Nuvoton N76E003
Kolík schéma N76E003 lze vidět v níže image-
Jak vidíme, každý kolík má jiné specifikace a každý kolík lze použít pro různé účely. Avšak kolík 1.5, který se používá jako výstupní kolík LED, ztratí PWM a další funkce. To však není problém, protože pro tento projekt není vyžadována další funkce.
Důvodem, proč zvolit pin 1,5 jako výstup a pin 1,6 jako vstup, je kvůli nejbližší dostupnosti pinů GND a VDD pro snadné připojení. V tomto mikrokontroléru z 20 pinů však lze použít 18 pinů jako pin GPIO a jakékoli jiné piny GPIO lze použít pro účely související s výstupem a vstupem, s výjimkou pin 2.0, který je vyhrazen pro vstup Reset a nelze jej použít jako výstup. Všechny piny GPIO lze konfigurovat v níže popsaném režimu.
Podle datového listu, PxM1.n a PxM2.n jsou dva registry, které se používají k určení řídicí operace I / O portu. Protože používáme LED a požadujeme pin jako obecné výstupní piny, použijeme tedy pro piny kvazi-obousměrný režim.
Registr časovače v Nuvoton N76E003
Časovač je důležitá věc pro každou jednotku mikrokontroléru. Mikrokontrolér je dodáván s vestavěným časovačem. Nuvoton N76E003 také přichází s 16bitovými časovači. Každý časovač se však používá pro různé účely a před použitím jakéhokoli rozhraní časovače je důležité vědět o časovači.
Druhy časů v Nuvoton N76E003
Časovač 0 a 1:
Tyto dva časovače timer0 a timer1 jsou identické s časovači 8051. Tyto dva časovače lze použít jako obecný časovač nebo jako čítače. Tyto dva časovače pracují ve čtyřech režimech. V režimu 0 budou tyto časovače pracovat v 13bitovém režimu časovače / čítače. V režimu 1 bude bit rozlišení těchto dvou časovačů 16bitový. V režimu 2 jsou časovače konfigurovány jako režim automatického načítání s 8bitovým rozlišením. V režimu 3 je časovač 1 zastaven a časovač 0 lze použít jako čítač a časovač současně.
Z těchto čtyř režimů se ve většině případů používá režim 1. Tyto dva časovače mohou používat Fsys (System Frequency) v pevném nebo přednastaveném režimu (Fys / 12). Lze jej taktovat také z externího zdroje hodin.
Časovač 2:
Timer 2 je také 16bitový časovač, který se používá hlavně pro snímání křivek. Využívá také systémové hodiny a lze jej použít v různých aplikacích dělením hodinové frekvence pomocí 8 různých stupnic. Lze jej také použít v režimu porovnání nebo ke generování PWM.
Stejně jako časovač 0 a časovač 1 lze časovač 2 použít v režimu automatického opětovného načtení.
Časovač 3:
Časovač 3 se také používá jako 16bitový časovač a používá se pro zdroj hodin s přenosovou rychlostí pro UART. Má také funkci automatického načtení. Je důležité používat tento časovač pouze pro sériovou komunikaci (UART), pokud aplikace vyžaduje komunikaci UART. Doporučujeme v takovém případě tento časovač nepoužívat k jiným účelům kvůli konfliktnímu procesu v nastavení časovače.
Časovač hlídacího psa:
Watchdog Timer lze použít jako standardní 6bitový časovač, ale pro tento účel se nepoužívá. Použití časovače Watchdog jako univerzálního časovače je použitelné pro aplikace s nízkou spotřebou energie, kde mikrokontrolér zůstává většinou v klidovém režimu.
Watchdog Timer, jak název napovídá, vždy kontroluje, zda mikrokontrolér funguje správně nebo ne. V případě zablokovaného nebo zastaveného mikrokontroléru WDT (Watchdog Timer) automaticky resetuje mikrokontrolér, což zajišťuje, že mikrokontrolér běží v nepřetržitém toku kódu bez zaseknutí, zablokování nebo v zastavených situacích.
Časovač automatického probuzení:
Toto je další periferní zařízení časovače, které slouží vyhrazenému procesu časování stejně jako časovač hlídacího psa. Tento časovač pravidelně probouzí systém, když mikrokontrolér běží v režimu nízké spotřeby.
Toto periferní zařízení s časovačem lze použít interně nebo pomocí externích periferií k probuzení mikrokontroléru z režimu spánku. Pro tento projekt použijeme časovač 1 a časovač 2.
Programování mikrokontroléru Nuvoton N76E003 pro časovače
Nastavení pinů jako výstupu:
Nejprve začneme s výstupní částí. Používáme dvě LED diody, jedna je palubní LED, s názvem Test, a připojená k portu P1.4 a externí LED připojená k kolíku P1.5.
Proto jsou tyto dva piny nakonfigurovány jako výstupní pin pro připojení těchto dvou LED pomocí níže uvedených fragmentů kódu.
#define Test_LED P14 #define LED1 P15
Tyto dva kolíky jsou nastaveny jako kvazi-obousměrný kolík ve funkci nastavení.
void setup (void) {P14_Quasi_Mode; P15_Quasi_Mode; }
Nastavení funkce časovače:
Ve funkci nastavení je nutné nakonfigurovat časovač 2 pro získání požadovaného výstupu. Za tímto účelem nastavíme registr T2MOD s dělícím faktorem 1/128 hodin a použijeme jej v režimu zpoždění automatického opětovného načtení. Zde je přehled registru T2MOD
4,5 a 6bitový registr T2MOD nastavil dělič časovače 2 a 7. bit nastavil režim automatického načítání. To se provádí pomocí níže uvedeného řádku -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Tyto dva řádky jsou v souboru Function_define.h definovány jako
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Nyní tyto řádky nastavují hodnotu časování požadovanou pro časovač 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Který je dále definován v souboru Function_define.h jako
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
16000000 je tedy krystalová frekvence 16 Mhz, která nastavuje časové zpoždění 100 ms.
Pod dvěma řádky se vyprázdní časovač 2 nízké a vysoké bajty.
TL2 = 0; TH2 = 0;
Nakonec níže uvedený kód umožní přerušení časovače 2 a spustí časovač 2.
set_ET2; // Povolit přerušení Timer2 set_EA; set_TR2; // Spuštění časovače2
Kompletní funkce nastavení je vidět na níže uvedených kódech -
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; // Povolit přerušení Timer2 set_EA; set_TR2; // Timer2 run }
Funkce časovače 2 ISR:
Funkce časovače 2 ISR je uvedena v níže uvedeném kódu.
void Timer2_ISR (void) přerušení 5 { clr_TF2; // Vymazat časovač2 Příznak přerušení LED1 = ~ LED1; // Přepínač LED1, připojený v P1.5; }
Blikající kód a ověřovací výstup pro funkčnost časovače
Kód (uvedený níže) při kompilaci vrátil 0 varování a 0 chyb a blikal jsem ho pomocí výchozí metody blikání v Keil. Po blikání LED diody blikaly v definovaném časovém zpoždění, jak bylo naprogramováno.
Podívejte se na níže uvedené video, kde najdete kompletní ukázku fungování desky pro tento kód. Doufám, že se vám výukový program líbil a naučili se něco užitečného, pokud máte nějaké dotazy, nechte je v sekci komentářů níže. Můžete také použít naše fóra k odeslání dalších technických otázek.