- Configurazione e requisiti hardware
- Schema del circuito per l'interfacciamento dei LED con Nuvoton N76E003
- Pin del timer su Nuvoton N76E003
- Registri timer in Nuvoton N76E003
- Tipi di orari in Nuvoton N76E003
- Programmazione del microcontrollore Nuvoton N76E003 per timer
- Codice lampeggiante e verifica uscita per funzionalità timer
Nei nostri precedenti tutorial sul microcontrollore Nuvoton, abbiamo utilizzato un programma di lampeggiamento LED di base come guida introduttiva e abbiamo anche interfacciato GPIO come input per collegare un interruttore tattile. Con quel tutorial, siamo pienamente consapevoli di come configurare il progetto Keil e impostare l'ambiente per la programmazione del microcontrollore N76E003 Nuvoton. È ora di utilizzare una periferica interna dell'unità microcontrollore e spostarsi un po 'oltre utilizzando il timer integrato dell'N76E003.
Nel nostro tutorial precedente, abbiamo utilizzato solo un ritardo software per far lampeggiare un LED, quindi in questo tutorial impareremo come utilizzare la funzione Timer delay e Timer ISR (Interrupt Service Routine) e lampeggeremo due singoli LED. Puoi anche controllare il tutorial sul timer di Arduino e il tutorial sul timer PIC per verificare come utilizzare i timer con altri microcontrollori. Senza perdere molto tempo valutiamo che tipo di configurazione hardware richiediamo.
Configurazione e requisiti hardware
Poiché il requisito di questo progetto è imparare il timer ISR e la funzione di ritardo del timer, useremo due LED, di cui uno lampeggerà utilizzando il ritardo del timer nel ciclo while e un altro lampeggerà all'interno della funzione ISR.
Poiché un LED è disponibile nella scheda di sviluppo N76E003, questo progetto richiede un LED aggiuntivo e il resistore di limitazione della corrente per limitare la corrente del LED. I componenti di cui abbiamo bisogno -
- Qualsiasi colore del LED
- Resistenza 100R
Per non parlare, oltre ai componenti di cui sopra, abbiamo bisogno della scheda di sviluppo basata sul microcontrollore N76E003 e del programmatore Nu-Link. Inoltre, per il collegamento di tutti i componenti sono necessari anche breadboard e cavi di collegamento.
Schema del circuito per l'interfacciamento dei LED con Nuvoton N76E003
Come possiamo vedere nello schema seguente, il LED Test è disponibile all'interno della scheda di sviluppo ed è collegato alla porta 1.4. Un LED aggiuntivo è collegato alla porta 1.5. Il resistore R3 viene utilizzato per limitare la corrente del LED. All'estrema sinistra viene mostrato il collegamento dell'interfaccia di programmazione.
Pin del timer su Nuvoton N76E003
Il diagramma dei pin di N76E003 può essere visto nell'immagine sottostante-
Come possiamo vedere, ogni pin ha specifiche diverse e ogni pin può essere utilizzato per più scopi. Tuttavia, il pin 1.5 che viene utilizzato come pin di uscita LED, perderà il PWM e altre funzionalità. Ma questo non è un problema in quanto per questo progetto non è richiesta un'altra funzionalità.
Il motivo alla base della scelta del pin 1.5 come output e del pin 1.6 come input è la disponibilità più vicina dei pin GND e VDD per una facile connessione. Tuttavia, in questo microcontrollore su 20 pin, 18 pin possono essere utilizzati come pin GPIO e qualsiasi altro pin GPIO può essere utilizzato per scopi relativi all'output e all'ingresso, ad eccezione del pin 2.0 che viene utilizzato appositamente per l'ingresso Reset e non può essere utilizzato come produzione. Tutti i pin GPIO possono essere configurati nella modalità descritta di seguito.
Secondo la scheda tecnica, PxM1.n e PxM2.n sono due registri utilizzati per determinare l'operazione di controllo della porta I / O. Dato che stiamo usando LED e richiediamo il pin come pin di uscita generali, utilizzeremo quindi la modalità Quasi-bidirezionale per i pin.
Registri timer in Nuvoton N76E003
Il timer è una cosa importante per qualsiasi unità microcontrollore. Il microcontrollore è dotato di una periferica timer incorporata. Il nuvoton N76E003 è inoltre dotato di periferiche timer a 16 bit. Tuttavia, ogni timer viene utilizzato per scopi diversi e prima di utilizzare qualsiasi interfaccia del timer è importante conoscere il timer.
Tipi di orari in Nuvoton N76E003
Timer 0 e 1:
Questi due timer timer0 e timer1 sono identici ai timer 8051. Questi due timer possono essere utilizzati come timer generali o come contatori. Questi due timer funzionano in quattro modalità. In modalità 0, questi timer funzioneranno in modalità timer / contatore a 13 bit. Nella modalità 1, il bit di risoluzione di questi due timer sarà di 16 bit. Nella modalità 2, i timer sono configurati come modalità di ricarica automatica con una risoluzione di 8 bit. Nella modalità 3, il timer 1 viene arrestato e il timer 0 può essere utilizzato contemporaneamente come contatore e timer.
Di queste quattro modalità, la Modalità 1 viene utilizzata nella maggior parte dei casi. Questi due timer possono utilizzare Fsys (System Frequency) in modalità fissa o prescalata (Fys / 12). Può anche essere sincronizzato da una sorgente di clock esterna.
Timer 2:
Timer 2 è anche un timer a 16 bit utilizzato principalmente per l'acquisizione di forme d'onda. Utilizza anche il clock di sistema e può essere utilizzato in diverse applicazioni dividendo la frequenza di clock utilizzando 8 diverse scale. Può anche essere utilizzato in modalità di confronto o per generare PWM.
Come il timer 0 e il timer 1, il timer 2 può essere utilizzato in modalità di ricarica automatica.
Timer 3:
Il timer 3 viene utilizzato anche come timer a 16 bit e viene utilizzato per la sorgente di clock della velocità di trasmissione per l'UART. Ha anche una funzione di ricarica automatica. È importante utilizzare questo timer solo per la comunicazione seriale (UART) se l'applicazione richiede la comunicazione UART. Si consiglia di non utilizzare questo timer per altri scopi in tal caso a causa del processo in conflitto nella configurazione del timer.
Timer watchdog:
Watchdog Timer può essere utilizzato come timer standard a 6 bit, ma non viene utilizzato per questo scopo. L'uso del timer Watchdog come timer generico è applicabile per applicazioni a basso consumo energetico in cui il microcontrollore rimane per lo più in modalità inattiva.
Watchdog Timer, come suggerisce il nome, controlla sempre se il microcontrollore funziona correttamente o meno. Nel caso di un microcontrollore bloccato o bloccato, WDT (Watchdog Timer) ripristina automaticamente il microcontrollore, il che garantisce che il microcontrollore funzioni in un flusso di codice continuo senza rimanere bloccato, impiccato o in situazioni di arresto.
Timer per la sveglia automatica:
Questa è un'altra periferica timer che serve un processo di temporizzazione dedicato come un timer watchdog. Questo timer, riattiva periodicamente il sistema quando il microcontrollore funziona in modalità a basso consumo.
Questa periferica timer può essere utilizzata internamente o utilizzando periferiche esterne per riattivare il microcontrollore dalla modalità sleep. Per questo progetto, useremo Timer 1 e Timer 2.
Programmazione del microcontrollore Nuvoton N76E003 per timer
Impostazione dei pin come output:
Cominciamo prima con la sezione output. Stiamo utilizzando due LED, uno è il LED integrato, denominato Test, e collegato alla porta P1.4 e un LED esterno collegato al pin P1.5.
Pertanto, questi due pin sono configurati come pin di uscita per collegare quei due LED utilizzando i frammenti di codice seguenti.
#define Test_LED P14 #define LED1 P15
Questi due pin sono impostati come pin quasi bidirezionali nella funzione di configurazione.
void setup (void) {P14_Quasi_Mode; P15_Quasi_Mode; }
Impostazione della funzione timer:
Nella funzione di configurazione, è necessario configurare il timer 2 per ottenere l'uscita desiderata. Per questo, imposteremo il registro T2MOD con un fattore di divisione del clock di 1/128 e lo useremo in una modalità di ritardo di ricarica automatica. Ecco la panoramica del registro T2MOD-
Il 4,5 e il 6 ° bit del registro T2MOD impostano il divisore di clock del timer 2 e il 7 ° bit imposta la modalità di ricarica automatica. Questo viene fatto usando la riga sottostante -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Queste due righe sono definite nel file Function_define.h come
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Ora, queste righe impostano il valore di temporizzazione richiesto per il timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Che è ulteriormente definito nel file Function_define.h come-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Quindi, 16000000 è la frequenza del cristallo di 16 Mhz che imposta il ritardo di 100 ms.
Sotto due righe svuoteranno i byte Basso e Alto Timer 2.
TL2 = 0; TH2 = 0;
Infine, il codice sottostante abiliterà l'interruzione del timer 2 e avvierà il timer 2.
set_ET2; // Abilita interrupt Timer2 set_EA; set_TR2; // Timer2 eseguito
La funzione di configurazione completa può essere vista nei seguenti codici:
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; // Abilita interrupt Timer2 set_EA; set_TR2; // Timer2 run }
Funzione ISR del timer 2:
La funzione Timer 2 ISR può essere vista nel codice sottostante.
void Timer2_ISR (void) interrupt 5 { clr_TF2; // Clear Timer2 Interrupt Flag LED1 = ~ LED1; // LED1 toggle, connesso in P1.5; }
Codice lampeggiante e verifica uscita per funzionalità timer
Il codice (indicato di seguito) quando compilato ha restituito 0 avvisi e 0 errori e l'ho visualizzato utilizzando il metodo lampeggiante predefinito in Keil. Dopo aver lampeggiato, i LED lampeggiavano in un intervallo di tempo definito come programmato.
Guarda il video riportato di seguito per una dimostrazione completa di come funziona la scheda per questo codice. Spero che il tutorial ti sia piaciuto e hai imparato qualcosa di utile se hai domande, lasciale nella sezione commenti qui sotto. Puoi anche utilizzare i nostri forum per pubblicare altre domande tecniche.