- Opsætning og krav til hardware
- Kredsløbsdiagram til LED-grænseflade med Nuvoton N76E003
- Timer Pins på Nuvoton N76E003
- Timerregistre i Nuvoton N76E003
- Typer af tider i Nuvoton N76E003
- Programmering af Nuvoton N76E003 mikrokontroller til timere
- Blinkende kode og kontrol af output for timerfunktionalitet
I vores tidligere Nuvoton Microcontroller-tutorials brugte vi et grundlæggende LED-blinkende program som en startvejledning og interfacede også GPIO som input til at forbinde en taktil switch. Med denne tutorial er vi fuldt ud klar over, hvordan vi konfigurerer Keil-projektet og indstiller miljøet til programmering af N76E003 Nuvoton-mikrokontroller. Det er på tide at bruge en intern periferi af mikrocontrollerenheden og bevæge sig lidt længere ved at bruge den indbyggede timer på N76E003.
I vores tidligere tutorial brugte vi kun en softwareforsinkelse til at blinke en LED, så i denne tutorial lærer vi, hvordan man bruger Timerforsinkelsesfunktionen såvel som Timer ISR (Interrupt Service Routine) og blinker to individuelle lysdioder. Du kan også tjekke Arduino Timer Tutorial og PIC Timer tutorial for at kontrollere, hvordan du bruger timere med andre mikrocontrollere. Uden at spilde meget tid, lad os evaluere, hvilken type hardwareopsætning vi har brug for.
Opsætning og krav til hardware
Da kravet i dette projekt er at lære Timer ISR og timerforsinkelsesfunktionen, bruger vi to lysdioder, hvoraf den ene vil blinke ved hjælp af timerforsinkelsen i mens sløjfen og en anden vil blive blinket inde i ISR-funktionen.
Da en LED er tilgængelig på N76E003-udviklingskortet, kræver dette projekt en ekstra LED og den strømbegrænsende modstand for at begrænse LED-strømmen. De komponenter, vi har brug for -
- Enhver LED-farve
- 100R modstand
For ikke at nævne, bortset fra ovenstående komponenter, har vi brug for N76E003 mikrokontrollerbaseret udviklingskort såvel som Nu-Link Programmer. Derudover kræves der også brødbræt og tilslutningsledninger for at forbinde alle komponenter.
Kredsløbsdiagram til LED-grænseflade med Nuvoton N76E003
Som vi kan se i nedenstående skematisk, er test-LED'en tilgængelig inde i udviklingskortet, og den er forbundet på port 1.4. En ekstra LED er tilsluttet port 1.5. Modstanden R3 bruges til at begrænse LED-strømmen. Yderst til venstre vises forbindelsen til programmeringsgrænsefladen.
Timer Pins på Nuvoton N76E003
Den pin diagram af N76E003 kan ses i nedenstående image-
Som vi kan se, har hver pin forskellige specifikationer, og hver pin kan bruges til flere formål. Dog pin 1.5, som bruges som en LED output pin, mister den PWM og anden funktionalitet. Men det er ikke et problem, da der ikke kræves en anden funktionalitet til dette projekt.
Årsagen til at vælge pin 1.5 som output og pin 1.6 som input er på grund af den nærmeste tilgængelighed af GND- og VDD-pins til nem tilslutning. I denne mikrocontroller ud af 20 ben kan 18 ben bruges som en GPIO-pin, og alle andre GPIO-ben kan bruges til output og input-relaterede formål, undtagen pin 2.0, der dedikeret bruges til Reset-input, og den kan ikke bruges som produktion. Alle GPIO-ben kan konfigureres i den nedenfor beskrevne tilstand.
I henhold til databladet er PxM1.n og PxM2.n to registre, der bruges til at bestemme I / O-portens kontrolfunktion. Da vi bruger LED, og vi har brug for stiften som generelle outputstifter, vil vi derfor bruge kvasi-tovejs-tilstand til stifterne.
Timerregistre i Nuvoton N76E003
Timeren er en vigtig ting for enhver mikrokontrollerenhed. Microcontroller leveres med en indbygget periferiudstyr. Nuvoton N76E003 leveres også med 16-bit timer periferiudstyr. Hver timer bruges dog til forskellige formål, og inden du bruger en timerinterface, er det vigtigt at vide om timeren.
Typer af tider i Nuvoton N76E003
Timer 0 og 1:
Disse to timere timer0 og timer1 er identiske med 8051 timere. Disse to timere kan bruges som en generel timer eller som tællere. Disse to timere fungerer i fire tilstande. I tilstand 0 fungerer disse timere i 13-bit timer / tællertilstand. I tilstand 1 er opløsningsbiten for disse to timere 16-bit. I tilstand 2 er timere konfigureret som en automatisk genindlæsningstilstand med en 8-bit opløsning. I tilstand 3 standses timeren 1, og timeren 0 kan bruges som tæller og timer på samme tid.
Ud af disse fire tilstande bruges Mode 1 i de fleste tilfælde. Disse to timere kan bruge Fsys (System Frequency) i fast eller forudskaleret tilstand (Fys / 12). Det kan også ures fra en ekstern urkilde.
Timer 2:
Timer 2 er også en 16-bit timer, der primært bruges til bølgeformfangst. Det bruger også systemuret og kan bruges i forskellige applikationer ved at dividere urfrekvensen ved hjælp af 8 forskellige skalaer. Det kan også bruges i sammenligningstilstand eller til at generere PWM.
Samme som Timer 0 og Timer 1, kan Timer 2 bruges i automatisk genindlæsningstilstand.
Timer 3:
Timer 3 bruges også som en 16-bit timer, og den bruges til baartfrekvensurets kilde til UART. Det har også en automatisk genindlæsningsfunktion. Det er vigtigt kun at bruge denne timer til seriel kommunikation (UART), hvis applikationen kræver UART-kommunikation. Det tilrådes ikke at bruge denne timer til andre formål i et sådant tilfælde på grund af den modstridende proces i timeren.
Watchdog Timer:
Watchdog Timer kan bruges som en standard 6-bit timer, men den bruges ikke til dette formål. Brugen af Watchdog-timer som en generel timer er anvendelig til applikationer med lavt strømforbrug, hvor mikrocontrolleren for det meste forbliver i inaktiv tilstand.
Watchdog Timer, som navnet antyder, kontrollerer altid, om mikrocontrolleren fungerer korrekt eller ej. I tilfælde af en hængt eller standset mikrocontroller nulstiller WDT (Watchdog Timer) mikrokontrolleren automatisk, hvilket sikrer, at mikrocontrolleren kører i en kontinuerlig kodestrøm uden at sidde fast, hænge eller i stoppede situationer.
Selvopvækningstimer:
Dette er en anden periferiudstyr, der tjener en dedikeret timingproces, den samme som en vagthundtimer. Denne timer vækker systemet regelmæssigt, når mikrokontrolleren kører i lav strømtilstand.
Denne perifere timer kan bruges internt eller ved hjælp af eksterne perifere enheder til at vække mikrocontrolleren fra dvaletilstand. Til dette projekt bruger vi Timer 1 og Timer 2.
Programmering af Nuvoton N76E003 mikrokontroller til timere
Indstilling af pins som output:
Lad os starte med output sektionen først. Vi bruger to lysdioder, den ene er den indbyggede LED, der hedder Test og er forbundet med porten P1.4 og en ekstern LED forbundet med stiften P1.5.
Derfor er disse to ben konfigureret som en udgangsstift til at forbinde disse to lysdioder ved hjælp af nedenstående kodestykker.
#definer test_LED P14 #definer LED1 P15
Disse to ben er indstillet som kvasi- tovejsstift i opsætningsfunktionen.
ugyldig opsætning (ugyldig) {P14_Quasi_Mode; P15_Quasi_Mode; }
Indstilling af timerfunktionen:
I opsætningsfunktionen er det nødvendigt med Timer 2, der skal konfigureres for at få det ønskede output. Til dette vil vi indstille T2MOD-registeret med en 1/128 ur-opdelingsfaktor og bruge det i en automatisk forsinkelsestilstand. Her er oversigten over T2MOD register-
4,5 og 6-bit i T2MOD-registeret indstiller timeren 2-urdeleren og den 7. bit indstiller automatisk genindlæsningstilstand. Dette gøres ved hjælp af nedenstående linje -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Disse to linjer er defineret i filen Function_define.h som
#definer TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #definer TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Nu indstiller disse linjer den nødvendige timingværdi til Timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Hvilket er yderligere defineret i Function_define.h-filen som-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Så 16000000 er krystalfrekvensen på 16 Mhz, som indstiller tidsforsinkelsen på 100 ms.
Under to linjer tømmes Timer 2 lave og høje byte.
TL2 = 0; TH2 = 0;
Endelig vil nedenstående kode aktivere timer 2-afbrydelsen og starte Timer 2.
sæt_ET2; // Aktivér Timer2 interrupt set_EA; sæt_TR2; // Timer2-kørsel
Den komplette opsætningsfunktion kan ses i nedenstående koder-
ugyldig opsætning (ugyldig) { 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; sæt_ET2; // Aktivér Timer2 interrupt set_EA; sæt_TR2; // Timer2-kørsel }
Timer 2 ISR-funktion:
Timer 2 ISR-funktionen kan ses i nedenstående kode.
ugyldigt Timer2_ISR (ugyldigt) afbrydelse 5 { clr_TF2; // Ryd Timer2 Afbryd flag LED1 = ~ LED1; // LED1 skifte, tilsluttet i P1.5; }
Blinkende kode og kontrol af output for timerfunktionalitet
Koden (angivet nedenfor), når den blev kompileret, returnerede 0 advarsler og 0 fejl, og jeg blinkede den ved hjælp af standardblinkmetoden i Keil. Efter blinkning blinkede LED'erne i en defineret tidsforsinkelse som programmeret.
Tjek videoen nedenfor for en komplet demonstration af, hvordan tavlen fungerer for denne kode. Håber du har haft vejledningen og lært noget nyttigt, hvis du har spørgsmål, lad dem være i kommentarfeltet nedenfor. Du kan også bruge vores fora til at stille andre tekniske spørgsmål.