- Configuració i requisits de maquinari
- Diagrama de circuits per a la interfície LED amb Nuvoton N76E003
- Pins del temporitzador a Nuvoton N76E003
- Registres de temporitzadors a Nuvoton N76E003
- Tipus de temps a Nuvoton N76E003
- Programació del microcontrolador Nuvoton N76E003 per temporitzadors
- Codi intermitent i verificació de la sortida per a la funcionalitat del temporitzador
En els nostres tutorials anteriors sobre microcontroladors Nuvoton, vam utilitzar un programa bàsic de parpelleig de LED com a guia d’inici i també vam connectar GPIO com a entrada per connectar un commutador tàctil. Amb aquest tutorial, som plenament conscients de com configurar el projecte Keil i configurar l’entorn per programar el microcontrolador N76E003 Nuvoton. És hora d’utilitzar un perifèric intern de la unitat de microcontroladors i avançar una mica més mitjançant l’ús del temporitzador incorporat del N76E003.
En el nostre tutorial anterior, només utilitzàvem un retard de programari per parpellejar un LED, de manera que en aquest tutorial aprendrem a utilitzar la funció de retard del temporitzador, així com el Timer ISR (Interrupt Service Service Routine) i parpellejarem dos LED individuals. També podeu consultar el tutorial del temporitzador Arduino i el tutorial del temporitzador PIC per comprovar com utilitzar temporitzadors amb altres microcontroladors. Sense perdre molt de temps, avaluem quin tipus de configuració de maquinari necessitem.
Configuració i requisits de maquinari
Com que el requisit d’aquest projecte és aprendre el temporitzador ISR i la funció de retard del temporitzador, utilitzarem dos LEDs, dels quals un parpellejarà amb el retard del temporitzador al bucle while i un altre parpellejarà dins de la funció ISR.
Com que hi ha disponible un LED a la placa de desenvolupament N76E003, aquest projecte requereix un LED addicional i la resistència limitadora de corrent per limitar el corrent de LED. Els components que necessitem -
- Qualsevol color del LED
- Resistència 100R
Per no mencionar, a part dels components anteriors, necessitem una placa de desenvolupament basada en microcontroladors N76E003, així com el programador Nu-Link. A més, també es requereixen cables de connexió i taulers per connectar tots els components.
Diagrama de circuits per a la interfície LED amb Nuvoton N76E003
Com podem veure a l'esquema següent, el LED de prova està disponible a la placa de desenvolupament i està connectat al port 1.4. Es connecta un LED addicional al port 1.5. La resistència R3 s’utilitza per limitar el corrent de LED. A l'extrem esquerre, es mostra la connexió de la interfície de programació.

Pins del temporitzador a Nuvoton N76E003
El diagrama de pins de N76E003 es pot veure a la imatge següent:

Com podem veure, cada pin té especificacions diferents i es pot utilitzar per a múltiples propòsits. No obstant això, el pin 1.5, que s'utilitza com a pin de sortida LED, perdrà el PWM i altres funcionalitats. Però, això no és un problema, ja que no cal una altra funcionalitat per a aquest projecte.
El motiu pel qual s’ha escollit el pin 1.5 com a sortida i el pin 1.6 com a entrada es deu a la disponibilitat més propera de pins GND i VDD per facilitar la connexió. No obstant això, en aquest microcontrolador de 20 pins, es poden utilitzar 18 pins com a pin GPIO i qualsevol altre pin GPIO es pot utilitzar per a finalitats relacionades amb la sortida i l’entrada, excepte el pin 2.0 que s’utilitza dedicadament per a l’entrada de restabliment i no es pot utilitzar com sortida. Tots els pins GPIO es poden configurar en el mode descrit a continuació.

Segons el full de dades, PxM1.n i PxM2.n són dos registres que s'utilitzen per determinar l'operació de control del port d'E / S. Com que fem servir LED i necessitem el pin com a pins de sortida generals, per tant utilitzarem el mode Quasi bidireccional per als pins.
Registres de temporitzadors a Nuvoton N76E003
El temporitzador és important per a qualsevol unitat de microcontrolador. El microcontrolador ve amb un perifèric de temporitzador integrat. El nuvoton N76E003 també inclou perifèrics de temporitzador de 16 bits. Tanmateix, cada temporitzador s’utilitza per a propòsits diferents i, abans d’utilitzar qualsevol interfície de temporitzador, és important conèixer el temporitzador.
Tipus de temps a Nuvoton N76E003
Temporitzador 0 i 1:
Aquests dos temporitzadors timer0 i timer1 són idèntics als 8051 temporitzadors. Aquests dos temporitzadors es poden utilitzar com a temporitzador general o com a comptadors. Aquests dos temporitzadors funcionen en quatre modes. Al mode 0, aquests temporitzadors funcionaran en mode temporitzador / comptador de 13 bits. Al mode 1, el bit de resolució d'aquests dos temporitzadors serà de 16 bits. Al mode 2, els temporitzadors es configuren com un mode de recàrrega automàtica amb una resolució de 8 bits. En el mode 3, el temporitzador 1 s'atura i el temporitzador 0 es pot utilitzar com a comptador i temporitzador alhora.
D’aquests quatre modes, el mode 1 s’utilitza en la majoria dels casos. Aquests dos temporitzadors poden utilitzar el Fsys (freqüència del sistema) en mode fix o prescalat (Fys / 12). També es pot marcar des d’una font de rellotge externa.
Temporitzador 2:
El temporitzador 2 també és un temporitzador de 16 bits que s’utilitza principalment per a la captura de formes d’ona. També utilitza el rellotge del sistema i es pot utilitzar en diferents aplicacions dividint la freqüència del rellotge mitjançant 8 escales diferents. També es pot utilitzar en mode de comparació o per generar PWM.
Igual que el temporitzador 0 i el temporitzador 1, el temporitzador 2 es pot utilitzar en mode de recàrrega automàtica.
Temporitzador 3:
El temporitzador 3 també s’utilitza com a temporitzador de 16 bits i s’utilitza per a la font de rellotge de velocitat en bauds de l’UART. També té una funció de recàrrega automàtica. És important utilitzar aquest temporitzador només per a la comunicació serial (UART) si l'aplicació requereix comunicació UART. És recomanable no utilitzar aquest temporitzador per a altres propòsits en aquest cas a causa del procés conflictiu en la configuració del temporitzador.
Temporitzador de vigilància:
El temporitzador Watchdog es pot utilitzar com a temporitzador estàndard de 6 bits, però no s’utilitza amb aquest propòsit. L'ús del temporitzador Watchdog com a temporitzador per a usos generals és aplicable per a aplicacions de baix consum energètic on el microcontrolador es manté principalment en mode d'inactivitat.
El temporitzador Watchdog, com el seu nom indica, sempre comprova si el microcontrolador funciona correctament o no. En el cas d’un microcontrolador penjat o aturat, WDT (Watchdog Timer) restableix automàticament el microcontrolador, cosa que garanteix que el microcontrolador funcioni en un flux de codi continu sense quedar-se atrapat, penjat o aturat.
Temporitzador de despertar automàtic:
Aquest és un altre perifèric de temporitzador que serveix per a un procés de cronometratge dedicat, igual que un temporitzador de vigilància. Amb aquest temporitzador, es desperta el sistema periòdicament quan el microcontrolador funciona en mode de baixa consum.
Aquest perifèric de temporitzador es pot utilitzar internament o mitjançant perifèrics externs per activar el microcontrolador del mode de repòs. Per a aquest projecte, utilitzarem el temporitzador 1 i el temporitzador 2.
Programació del microcontrolador Nuvoton N76E003 per temporitzadors
Configuració dels pins com a sortida:
Comencem per la secció de sortida primer. Estem utilitzant dos LEDs, un és el LED integrat, anomenat Test, i connectat amb el port P1.4 i un LED extern connectat amb el pin P1.5.
Per tant, aquests dos pins es configuren com a pin de sortida per connectar aquests dos LED mitjançant els fragments de codi següents.
#define Test_LED P14 #define LED1 P15
Aquests dos pins es configuren com a pin quasi bidireccional a la funció de configuració.
configuració buida (buida) {P14_Quasi_Mode; P15_Quasi_Mode; }
Configuració de la funció del temporitzador:
A la funció de configuració, cal configurar el temporitzador 2 per obtenir la sortida desitjada. Per a això, establirem el registre T2MOD amb un factor de divisió de rellotge 1/128 i l’utilitzarem en un mode de retard de recàrrega automàtica. Aquí teniu la visió general del registre T2MOD-

El 4,5 i el 6è bit del registre T2MOD configuren el divisor de rellotge del temporitzador 2 i el setè bit el mode de recàrrega automàtica. Això es fa mitjançant la línia següent:
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Aquestes dues línies es defineixen al fitxer Function_define.h com a
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Ara, aquestes línies estableixen el valor de temps necessari per al temporitzador 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Què es defineix més al fitxer Function_define.h com a
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Per tant, 16000000 és la freqüència de cristall de 16 Mhz que està configurant el retard de 100 ms.
A sota de dues línies es buidaran els temporitzadors 2 bytes baix i alt.
TL2 = 0; TH2 = 0;
Finalment, el codi següent habilitarà la interrupció del temporitzador 2 i iniciarà el temporitzador 2.
set_ET2; // Activa la interrupció del temporitzador2 set_EA; set_TR2; // Execució del temporitzador2
La funció de configuració completa es pot veure als codis següents:
configuració buida (buida) { 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; // Activa la interrupció del temporitzador2 set_EA; set_TR2; // Execució del temporitzador 2 }
Funció ISR del temporitzador 2:
La funció ISR del Temporitzador 2 es pot veure al codi següent.
void Timer2_ISR (void) interrupt 5 { clr_TF2; // Esborra la bandera d'interrupció del temporitzador LED1 = ~ LED1; // Commutador LED1, connectat a P1.5; }
Codi intermitent i verificació de la sortida per a la funcionalitat del temporitzador
Quan es va compilar, el codi (que es mostra a continuació) va retornar 0 advertiments i 0 errors i el vaig emetre amb el mètode de parpelleig predeterminat a Keil. Després de parpellejar, els LED parpellejaven en un retard del temporitzador definit tal com estava programat.

Mireu el vídeo que es mostra a continuació per obtenir una demostració completa del funcionament del tauler per a aquest codi. Espero que hagueu gaudit del tutorial i hàgiu après alguna cosa útil si teniu alguna pregunta, deixeu-los a la secció de comentaris de sota. També podeu utilitzar els nostres fòrums per publicar altres preguntes tècniques.
