- Hardware-installatie en vereisten
- Schakelschema voor LED-interface met Nuvoton N76E003
- Timer-pinnen op Nuvoton N76E003
- Timer registreert in Nuvoton N76E003
- Soorten tijden in Nuvoton N76E003
- Nuvoton N76E003 Microcontroller voor timers programmeren
- Knipperende code en verificatie van de uitvoer voor timerfunctionaliteit
In onze vorige Nuvoton Microcontroller-tutorials hebben we een basisprogramma voor het knipperen van LED's gebruikt als handleiding om aan de slag te gaan en hebben we ook GPIO als interface gebruikt als ingang om een tactiele schakelaar aan te sluiten. Met die tutorial zijn we ons er volledig van bewust hoe we het Keil-project moeten configureren en de omgeving moeten opzetten voor het programmeren van de N76E003 Nuvoton-microcontroller. Het is tijd om een intern randapparaat van de microcontrollereenheid te gebruiken en een beetje verder te gaan met de ingebouwde timer van de N76E003.
In onze vorige tutorial hebben we alleen een softwarevertraging gebruikt om een LED te laten knipperen, dus in deze tutorial zullen we leren hoe we de timervertragingsfunctie en de Timer ISR (Interrupt Service Routine) kunnen gebruiken en twee individuele LED's laten knipperen. Je kunt ook de Arduino Timer-zelfstudie en PIC Timer-zelfstudie bekijken om te zien hoe je timers kunt gebruiken met andere microcontrollers. Laten we, zonder veel tijd te verspillen, eens kijken wat voor soort hardware-instellingen we nodig hebben.
Hardware-installatie en vereisten
Aangezien de vereiste van dit project is om Timer ISR en de timervertragingsfunctie te leren, zullen we twee LED's gebruiken, waarvan er één zal knipperen met behulp van timervertraging in de while-lus en een andere zal knipperen in de ISR-functie.
Omdat er een LED beschikbaar is in het N76E003-ontwikkelbord, heeft dit project een extra LED en de stroombegrenzende weerstand nodig om de LED-stroom te beperken. De componenten die we nodig hebben -
- Elke kleur van de LED
- 100R weerstand
Om nog maar te zwijgen, behalve de bovenstaande componenten, hebben we een N76E003 microcontroller- gebaseerd ontwikkelbord nodig, evenals de Nu-Link Programmer. Bovendien zijn ook breadboard- en aansluitdraden vereist voor het aansluiten van alle componenten.
Schakelschema voor LED-interface met Nuvoton N76E003
Zoals we in het onderstaande schema kunnen zien, is de test-LED beschikbaar in het ontwikkelbord en is deze aangesloten op poort 1.4. Een extra LED is aangesloten op poort 1.5. De weerstand R3 wordt gebruikt om de LED-stroom te begrenzen. Helemaal links wordt de aansluiting van de programmeerinterface weergegeven.
Timer-pinnen op Nuvoton N76E003
Het pin-diagram van N76E003 is te zien in de onderstaande afbeelding-
Zoals we kunnen zien, heeft elke pin verschillende specificaties en kan elke pin voor meerdere doeleinden worden gebruikt. Pin 1.5 die wordt gebruikt als een LED-uitgangspen, verliest echter de PWM en andere functionaliteit. Maar dat is geen probleem aangezien er geen andere functionaliteit nodig is voor dit project.
De reden achter het kiezen van pin 1.5 als output en pin 1.6 als input is vanwege de dichtstbijzijnde beschikbaarheid van GND- en VDD-pinnen voor eenvoudige aansluiting. In deze microcontroller van 20 pinnen kunnen echter 18 pinnen worden gebruikt als een GPIO-pin en alle andere GPIO-pinnen kunnen worden gebruikt voor output- en inputgerelateerde doeleinden, behalve pin 2.0 die speciaal wordt gebruikt voor reset-invoer en die niet kan worden gebruikt als output. Alle GPIO-pinnen kunnen worden geconfigureerd in de hieronder beschreven modus.
Volgens het gegevensblad zijn PxM1.n en PxM2.n twee registers die worden gebruikt om de besturingswerking van de I / O-poort te bepalen. Omdat we LED gebruiken en we de pin nodig hebben als algemene outputpinnen, zullen we de quasi-bidirectionele modus gebruiken voor de pinnen.
Timer registreert in Nuvoton N76E003
De timer is een belangrijk ding voor elke microcontrollereenheid. Microcontroller wordt geleverd met een ingebouwde timerrandapparatuur. De nuvoton N76E003 wordt ook geleverd met 16-bit timerrandapparatuur. Elke timer wordt echter voor verschillende doeleinden gebruikt en voordat u een timerinterface gebruikt, is het belangrijk om te weten wat de timer is.
Soorten tijden in Nuvoton N76E003
Timer 0 en 1:
Deze twee timers timer0 en timer1 zijn identiek aan 8051 timers. Deze twee timers kunnen worden gebruikt als algemene timer of als tellers. Deze twee timers werken in vier modi. In modus 0 werken die timers in de 13-bits timer / tellermodus. In modus 1 is de resolutiebit van die twee timers 16-bits. In Mode 2 zijn timers geconfigureerd als een automatische herlaadmodus met een 8-bits resolutie. In Mode 3 wordt de timer 1 gestopt en kan timer 0 tegelijkertijd als teller en timer worden gebruikt.
Van deze vier modi wordt in de meeste gevallen modus 1 gebruikt. Deze twee timers kunnen de Fsys (systeemfrequentie) gebruiken in vaste of voorgeschaalde modus (Fys / 12). Het kan ook worden geklokt vanaf een externe klokbron.
Timer 2:
Timer 2 is ook een 16-bits timer die voornamelijk wordt gebruikt voor het vastleggen van golfvormen. Het gebruikt ook de systeemklok en kan in verschillende toepassingen worden gebruikt door de klokfrequentie te verdelen over 8 verschillende schalen. Het kan ook worden gebruikt in de vergelijkingsmodus of om PWM te genereren.
Hetzelfde als Timer 0 en Timer 1, Timer 2 kan worden gebruikt in de modus voor automatisch herladen.
Timer 3:
Timer 3 wordt ook gebruikt als een 16-bits timer en wordt gebruikt voor de baudrate-klokbron voor de UART. Het heeft ook een functie voor automatisch herladen. Het is belangrijk om deze timer alleen te gebruiken voor seriële communicatie (UART) als de applicatie UART-communicatie vereist. Het is raadzaam om deze timer in een dergelijk geval niet voor andere doeleinden te gebruiken vanwege het conflicterende proces bij het instellen van de timer.
Watchdog-timer:
Watchdog Timer kan worden gebruikt als een standaard 6-bit timer, maar wordt niet voor dit doel gebruikt. Het gebruik van de Watchdog-timer als een algemene timer is van toepassing op toepassingen met een laag stroomverbruik waarbij de microcontroller meestal in de inactieve modus blijft.
Watchdog Timer controleert, zoals de naam al doet vermoeden, altijd of de microcontroller naar behoren werkt of niet. In het geval van een opgehangen of gestopte microcontroller, reset WDT (Watchdog Timer) de microcontroller automatisch, wat ervoor zorgt dat de microcontroller in een continue codestroom draait zonder vast te lopen, vast te lopen of in gestopte situaties.
Zelfontspanner:
Dit is een ander timer-randapparaat dat een speciaal timingproces dient, hetzelfde als een watchdog-timer. Deze timer activeert het systeem periodiek wanneer de microcontroller in de energiebesparende modus werkt.
Dit timer-randapparaat kan intern of met externe randapparatuur worden gebruikt om de microcontroller uit de slaapstand te halen. Voor dit project zullen we Timer 1 en Timer 2 gebruiken.
Nuvoton N76E003 Microcontroller voor timers programmeren
De pinnen instellen als uitvoer:
Laten we eerst beginnen met het uitvoergedeelte. We gebruiken twee LED's, een is de ingebouwde LED, genaamd Test, en verbonden met de poort P1.4 en een externe LED verbonden met de pin P1.5.
Daarom zijn deze twee pinnen geconfigureerd als een outputpin om die twee LED's te verbinden met behulp van de onderstaande codefragmenten.
#define Test_LED P14 #define LED1 P15
Deze twee pinnen zijn ingesteld als quasi-bidirectionele pin in de setup-functie.
ongeldige setup (ongeldig) {P14_Quasi_Mode; P15_Quasi_Mode; }
De timerfunctie instellen:
In de setup-functie moet Timer 2 worden geconfigureerd om de gewenste output te krijgen. Hiervoor zullen we het T2MOD-register instellen met een 1/128 klokverdelingsfactor en het gebruiken in een vertragingsmodus voor automatisch herladen. Hier is het overzicht van T2MOD register-
De 4,5 en de 6e bit van het T2MOD-register stellen de klokverdeler van timer 2 in en de 7e bit stelt de automatische herlaadmodus in. Dit wordt gedaan met behulp van de onderstaande regel -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Deze twee regels zijn gedefinieerd in het bestand Function_define.h als
# definiëren TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF # definiëren TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Nu stellen deze regels de timingwaarde in die vereist is voor de Timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Wat verder wordt gedefinieerd in het Function_define.h-bestand als-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Dus 16000000 is de kristalfrequentie van 16 Mhz die de vertraging van 100 ms instelt.
Onder de twee regels worden de bytes van Timer 2 Low en High leeggemaakt.
TL2 = 0; TH2 = 0;
Ten slotte zal onderstaande code de timer 2 onderbreken en de timer 2 starten.
set_ET2; // Schakel Timer2 interrupt set_EA in; set_TR2; // Timer2 wordt uitgevoerd
De volledige setup-functie is te zien in de onderstaande codes:
ongeldige setup (ongeldig) { 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; // Schakel Timer2 interrupt set_EA in; set_TR2; // Timer2 uitvoeren }
Timer 2 ISR-functie:
De Timer 2 ISR-functie is te zien in de onderstaande code.
void Timer2_ISR (void) interrupt 5 { clr_TF2; // Clear Timer2 Interrupt Flag LED1 = ~ LED1; // LED1-schakelaar, verbonden in P1.5; }
Knipperende code en verificatie van de uitvoer voor timerfunctionaliteit
De code (hieronder weergegeven) retourneerde bij het compileren 0 waarschuwing en 0 fouten en ik flitste het met behulp van de standaard knippermethode in Keil. Na het knipperen knipperden de LED's met een gedefinieerde timervertraging zoals geprogrammeerd.
Bekijk de onderstaande video voor een complete demonstratie van hoe het bord werkt voor deze code. Ik hoop dat je de tutorial leuk vond en iets nuttigs hebt geleerd als je vragen hebt, laat ze achter in het commentaargedeelte hieronder. U kunt ook onze forums gebruiken om andere technische vragen te stellen.