- Maskinvareoppsett og krav
- Kretsdiagram for LED-grensesnitt med Nuvoton N76E003
- Timer Pins på Nuvoton N76E003
- Timerregister i Nuvoton N76E003
- Typer av tider i Nuvoton N76E003
- Programmering av Nuvoton N76E003 mikrokontroller for tidtakere
- Blinkende kode og bekreft utgang for timerfunksjonalitet
I våre tidligere opplæringsprogrammer for Nuvoton Microcontroller brukte vi et grunnleggende LED-blinkende program som en startveiledning og grensesnittet også GPIO som en inngang for å koble til en følbar bryter. Med den veiledningen er vi fullstendig klar over hvordan vi konfigurerer Keil-prosjektet og setter opp miljøet for programmering av N76E003 Nuvoton mikrokontroller. Det er på tide å bruke en intern periferi av mikrokontrollerenheten og bevege deg litt lenger ved å bruke den innebygde tidtakeren til N76E003.
I vår forrige opplæring brukte vi bare en programvareforsinkelse for å blinke en lysdiode, så i denne opplæringen lærer vi hvordan du bruker tidsforsinkelsesfunksjonen samt tidsuret ISR (Interrupt Service Routine) og blinker to individuelle lysdioder. Du kan også sjekke ut Arduino Timer Tutorial og PIC Timer tutorial for å sjekke hvordan du bruker timere med andre mikrokontrollere. Uten å kaste bort mye tid, la oss evaluere hva slags maskinvareoppsett vi trenger.
Maskinvareoppsett og krav
Ettersom kravet til dette prosjektet er å lære Timer ISR og tidsforsinkelsesfunksjonen, vil vi bruke to lysdioder, hvorav den ene vil blinke ved hjelp av tidsforsinkelsen i mens sløyfen og en annen vil bli blinket inne i ISR-funksjonen.
Siden en LED er tilgjengelig i N76E003-utviklingskortet, krever dette prosjektet en ekstra LED og den nåværende begrensningsmotstanden for å begrense LED-strømmen. Komponentene vi trenger -
- Enhver farge på LED-lampen
- 100R motstand
For ikke å nevne, bortsett fra de ovennevnte komponentene, trenger vi N76E003 mikrokontrollerbasert utviklingskort samt Nu-Link Programmer. I tillegg er det også nødvendig med brødbrett- og tilkoblingsledninger for å koble til alle komponenter.
Kretsdiagram for LED-grensesnitt med Nuvoton N76E003
Som vi kan se i skjemaet nedenfor, er test-LED-en tilgjengelig inne i utviklingskortet, og den er koblet til port 1.4. En ekstra LED er koblet til port 1.5. Motstanden R3 brukes til å begrense LED-strømmen. Ytterst til venstre vises programmeringsgrensesnittforbindelsen.
Timer Pins på Nuvoton N76E003
Den tapp diagram av N76E003 kan sees i den nedenfor bilde-
Som vi kan se, har hver pin forskjellige spesifikasjoner, og hver pin kan brukes til flere formål. Imidlertid minner pin 1.5 som brukes som en LED-utgangsnål, PWM og annen funksjonalitet. Men det er ikke et problem, da det ikke kreves en annen funksjonalitet for dette prosjektet.
Årsaken bak å velge pin 1.5 som output og pin 1.6 som input er på grunn av den nærmeste tilgjengeligheten av GND og VDD pins for enkel tilkobling. Imidlertid, i denne mikrokontrolleren av 20 pinner, kan 18 pinner brukes som en GPIO-pinne, og andre GPIO-pinner kan brukes til utgangs- og inngangsrelaterte formål, bortsett fra pin 2.0 som er dedikert til Reset-inngang, og den kan ikke brukes som produksjon. Alle GPIO-pinner kan konfigureres i den nedenfor beskrevne modusen.
I henhold til databladet er PxM1.n og PxM2.n to registre som brukes til å bestemme kontrolloperasjonen til I / O-porten. Siden vi bruker LED og vi trenger pinnen som generelle utgangspinner, vil vi derfor bruke kvasi toveis modus for pinnene.
Timerregister i Nuvoton N76E003
Timeren er en viktig ting for enhver mikrokontroller-enhet. Microcontroller leveres med en innebygd perifer utstyr for timer. Nuvoton N76E003 kommer også med 16-biters periferiutstyr. Hver timer brukes imidlertid til forskjellige formål, og før du bruker et tidsurgrensesnitt, er det viktig å vite om tidtakeren.
Typer av tider i Nuvoton N76E003
Tidtaker 0 og 1:
Disse to tidtakere timer0 og timer1 er identiske med 8051 tidtakere. Disse to tidtakerne kan brukes som en generell timer eller som tellere. Disse to tidtakerne fungerer i fire moduser. I modus 0 vil disse tidtakerne fungere i 13-biters timer / teller-modus. I modus 1 vil oppløsningsbiten til disse to tidtakerne være 16-bit. I modus 2 er tidtakere konfigurert som en automatisk omlastingsmodus med en 8-biters oppløsning. I modus 3 er tidtakeren 1 stoppet, og tidtakeren 0 kan brukes som en teller og tidsur samtidig.
Ut av disse fire modusene brukes Mode 1 i de fleste tilfeller. Disse to tidtakerne kan bruke Fsys (System Frequency) i fast eller forhåndsberegnet modus (Fys / 12). Det kan også klokkes fra en ekstern klokkilde.
Tidtaker 2:
Timer 2 er også en 16-bits timer som hovedsakelig brukes til bølgeformfangst. Den bruker også systemklokken og kan brukes i forskjellige applikasjoner ved å dele klokkefrekvensen ved å bruke 8 forskjellige skalaer. Den kan også brukes i sammenligningsmodus eller til å generere PWM.
Samme som som Timer 0 og Timer 1, kan Timer 2 brukes i automatisk omlastingsmodus.
Tidsur 3:
Timer 3 brukes også som en 16-bits timer og den brukes til overføringshastighetskilde for UART. Den har også en automatisk innlastingsfunksjon. Det er viktig å bare bruke denne tidtakeren til seriell kommunikasjon (UART) hvis applikasjonen krever UART-kommunikasjon. Det anbefales at du ikke bruker denne tidtakeren til andre formål i et slikt tilfelle på grunn av den motstridende prosessen i tidsuroppsettet.
Watchdog Timer:
Watchdog Timer kan brukes som en standard 6-bit timer, men den brukes ikke til dette formålet. Bruken av Watchdog timer som en generell timer er anvendelig for applikasjoner med lavt strømforbruk der mikrokontrolleren hovedsakelig holder seg i hvilemodus.
Watchdog Timer, som navnet antyder, sjekker alltid om mikrokontrolleren fungerer som den skal eller ikke. I tilfelle en hengt eller stoppet mikrokontroller, tilbakestiller WDT (Watchdog Timer) mikrokontrolleren automatisk, noe som sikrer at mikrokontrolleren kjører i en kontinuerlig kodestrøm uten å bli sittende fast, hengt eller i stoppede situasjoner.
Selvåpningstimer:
Dette er en annen tidtaker periferiutstyr som serverer en dedikert timingsprosess den samme som en vakthund. Denne tidtakeren vekker systemet med jevne mellomrom når mikrokontrolleren kjører i lavspenningsmodus.
Denne periferiutstyret kan brukes internt eller ved bruk av eksterne enheter for å vekke mikrokontrolleren fra hvilemodus. For dette prosjektet vil vi bruke Timer 1 og Timer 2.
Programmering av Nuvoton N76E003 mikrokontroller for tidtakere
Angi pinnene som utgang:
La oss starte med utgangsseksjonen først. Vi bruker to lysdioder, den ene er den innebygde LED-en, kalt Test, og koblet til porten P1.4 og en ekstern LED koblet til pinnen P1.5.
Derfor er disse to pinnene konfigurert som en utgangspinne for å koble de to lysdiodene ved å bruke kodebitene nedenfor.
#define Test_LED P14 #define LED1 P15
Disse to pinnene er satt som kvasi toveis pin i oppsettfunksjonen.
ugyldig oppsett (ugyldig) {P14_Quasi_Mode; P15_Quasi_Mode; }
Stille inn timerfunksjonen:
I oppsettfunksjonen er det nødvendig med Timer 2 for å få konfigurert for å få ønsket utgang. For dette vil vi sette T2MOD-registeret med en 1/128 klokke-delingsfaktor og bruke det i en automatisk forsinkelsesmodus. Her er oversikten over T2MOD register-
4,5 og 6-bit i T2MOD-registeret setter tidsdeleren til klokke 2 og 7-bit stiller inn automatisk omlastingsmodus. Dette gjøres ved hjelp av linjen nedenfor -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Disse to linjene er definert i filen Function_define.h som
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Nå angir disse linjene tidsverdien som kreves for Timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Som er ytterligere definert i Function_define.h-filen som-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Så, 16000000 er krystallfrekvensen på 16 MHz som setter opp 100 ms tidsforsinkelse.
Under to linjer tømmes Timer 2 lave og høye byte.
TL2 = 0; TH2 = 0;
Endelig under koden vil timeren 2 avbrytes og starte tidtakeren 2.
sett_ET2; // Aktiver Timer2 avbryt set_EA; sett_TR2; // Timer2-kjøring
Den komplette oppsettfunksjonen kan sees i kodene nedenfor -
ugyldig oppsett (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; sett_ET2; // Aktiver Timer2 avbryt set_EA; sett_TR2; // Timer2-kjøring }
Timer 2 ISR-funksjon:
Timer 2 ISR-funksjonen kan sees i koden nedenfor.
ugyldig Timer2_ISR (ugyldig) avbryte 5 { clr_TF2; // Clear Timer2 Interrupt Flag LED1 = ~ LED1; // LED1 veksle, koblet til P1.5; }
Blinkende kode og bekreft utgang for timerfunksjonalitet
Koden (gitt nedenfor) når den ble kompilert returnerte 0 advarsler og 0 feil, og jeg blinket den ved hjelp av standard blinkemetode i Keil. Etter blinking blinket LED-lampene i en definert tidsforsinkelse som programmert.
Sjekk ut videoen nedenfor for en fullstendig demonstrasjon av hvordan tavlen fungerer for denne koden. Håper du likte opplæringen og lærte noe nyttig hvis du har spørsmål, la dem være i kommentarseksjonen nedenfor. Du kan også bruke forumene våre til å legge ut andre tekniske spørsmål.