- Hardware-Setup und -Anforderung
- Schaltplan für die LED-Schnittstelle mit Nuvoton N76E003
- Timer-Pins am Nuvoton N76E003
- Timer-Register in Nuvoton N76E003
- Arten von Zeiten in Nuvoton N76E003
- Programmierung des Nuvoton N76E003 Mikrocontrollers für Timer
- Blinkender Code und Überprüfen der Ausgabe auf Timer-Funktionalität
In unseren vorherigen Nuvoton Microcontroller-Tutorials haben wir ein grundlegendes LED-Blinkprogramm als Leitfaden für die ersten Schritte verwendet und GPIO als Eingang zum Anschließen eines taktilen Schalters angeschlossen. In diesem Tutorial wissen wir genau, wie Sie das Keil-Projekt konfigurieren und die Umgebung für die Programmierung des Nuvoton-Mikrocontrollers N76E003 einrichten. Es ist an der Zeit, ein internes Peripheriegerät der Mikrocontroller-Einheit zu verwenden und mit dem eingebauten Timer des N76E003 ein Stück weiter zu gehen.
In unserem vorherigen Lernprogramm haben wir nur eine Softwareverzögerung zum Blinken einer LED verwendet. In diesem Lernprogramm erfahren Sie, wie Sie die Timer-Verzögerungsfunktion sowie die Timer-ISR (Interrupt Service Routine) verwenden und zwei einzelne LEDs blinken. Sie können auch das Arduino Timer-Tutorial und das PIC Timer-Tutorial lesen, um zu überprüfen, wie Timer mit anderen Mikrocontrollern verwendet werden. Lassen Sie uns ohne viel Zeitverschwendung bewerten, welche Art von Hardware-Setup wir benötigen.
Hardware-Setup und -Anforderung
Da die Anforderung dieses Projekts darin besteht, Timer-ISR und die Timer-Verzögerungsfunktion zu lernen, werden zwei LEDs verwendet, von denen eine mit der Timer-Verzögerung in der while-Schleife und eine andere innerhalb der ISR-Funktion blinkt.
Da auf der Entwicklungsplatine N76E003 eine LED verfügbar ist, sind für dieses Projekt eine zusätzliche LED und der Strombegrenzungswiderstand erforderlich, um den LED-Strom zu begrenzen. Die Komponenten, die wir benötigen -
- Beliebige Farbe der LED
- 100R Widerstand
Abgesehen von den oben genannten Komponenten benötigen wir ein auf einem Mikrocontroller basierendes Entwicklungsboard N76E003 sowie den Nu-Link-Programmierer. Zusätzlich sind Steckbrett- und Anschlusskabel erforderlich, um alle Komponenten anzuschließen.
Schaltplan für die LED-Schnittstelle mit Nuvoton N76E003
Wie wir im folgenden Schema sehen können, ist die Test-LED auf der Entwicklungsplatine verfügbar und an Port 1.4 angeschlossen. Eine zusätzliche LED ist an Port 1.5 angeschlossen. Der Widerstand R3 dient zur Begrenzung des LED-Stroms. Ganz links ist der Anschluss der Programmierschnittstelle dargestellt.
Timer-Pins am Nuvoton N76E003
Das Pin-Diagramm des N76E003 ist im folgenden Bild zu sehen.
Wie wir sehen können, hat jeder Pin unterschiedliche Spezifikationen und jeder Pin kann für mehrere Zwecke verwendet werden. Bei Pin 1.5, der als LED-Ausgangspin verwendet wird, gehen jedoch die PWM und andere Funktionen verloren. Dies ist jedoch kein Problem, da für dieses Projekt keine weitere Funktionalität erforderlich ist.
Der Grund für die Wahl von Pin 1.5 als Ausgang und Pin 1.6 als Eingang liegt in der nächstgelegenen Verfügbarkeit von GND- und VDD-Pins für eine einfache Verbindung. In diesem Mikrocontroller mit 20 Pins können jedoch 18 Pins als GPIO-Pin verwendet werden, und alle anderen GPIO-Pins können für Ausgabe- und Eingangszwecke verwendet werden, mit Ausnahme von Pin 2.0, der speziell für das Zurücksetzen des Eingangs verwendet wird und nicht als verwendet werden kann Ausgabe. Alle GPIO-Pins können im unten beschriebenen Modus konfiguriert werden.
Gemäß dem Datenblatt sind PxM1.n und PxM2.n zwei Register, die zum Bestimmen der Steueroperation des E / A-Ports verwendet werden. Da wir LED verwenden und den Pin als allgemeine Ausgangspins benötigen, verwenden wir für die Pins den quasi-bidirektionalen Modus.
Timer-Register in Nuvoton N76E003
Der Timer ist eine wichtige Sache für jede Mikrocontroller-Einheit. Der Mikrocontroller verfügt über ein eingebautes Timer-Peripheriegerät. Der Nuvoton N76E003 ist außerdem mit 16-Bit-Timer-Peripheriegeräten ausgestattet. Jeder Timer wird jedoch für unterschiedliche Zwecke verwendet. Bevor Sie eine Timer-Schnittstelle verwenden, ist es wichtig, den Timer zu kennen.
Arten von Zeiten in Nuvoton N76E003
Timer 0 und 1:
Diese beiden Timer timer0 und timer1 sind identisch mit 8051-Timern. Diese beiden Timer können als allgemeiner Timer oder als Zähler verwendet werden. Diese beiden Timer arbeiten in vier Modi. Im Modus 0 arbeiten diese Timer im 13-Bit-Timer / Zähler-Modus. Im Modus 1 beträgt das Auflösungsbit dieser beiden Timer 16 Bit. Im Modus 2 werden Timer als Auto-Reload-Modus mit einer Auflösung von 8 Bit konfiguriert. Im Modus 3 wird der Timer 1 angehalten und der Timer 0 kann gleichzeitig als Zähler und Timer verwendet werden.
Von diesen vier Modi wird in den meisten Fällen Modus 1 verwendet. Diese beiden Timer können das Fsys (Systemfrequenz) im festen oder vorskalierten Modus (Fys / 12) verwenden. Es kann auch von einer externen Taktquelle getaktet werden.
Timer 2:
Timer 2 ist auch ein 16-Bit-Timer, der hauptsächlich für die Erfassung von Wellenformen verwendet wird. Es verwendet auch die Systemuhr und kann in verschiedenen Anwendungen verwendet werden, indem die Taktfrequenz durch 8 verschiedene Skalen geteilt wird. Es kann auch im Vergleichsmodus oder zum Generieren von PWM verwendet werden.
Wie Timer 0 und Timer 1 kann Timer 2 im Auto-Reload-Modus verwendet werden.
Timer 3:
Timer 3 wird auch als 16-Bit-Timer verwendet und dient als Baudratentaktquelle für den UART. Es hat auch eine Funktion zum automatischen Neuladen. Es ist wichtig, diesen Timer nur für die serielle Kommunikation (UART) zu verwenden, wenn die Anwendung eine UART-Kommunikation erfordert. In einem solchen Fall ist es aufgrund des widersprüchlichen Prozesses bei der Timer-Einrichtung ratsam, diesen Timer nicht für andere Zwecke zu verwenden.
Watchdog Timer:
Der Watchdog-Timer kann als Standard-6-Bit-Timer verwendet werden, wird jedoch nicht für diesen Zweck verwendet. Die Verwendung des Watchdog-Timers als Allzweck-Timer ist für Anwendungen mit geringem Stromverbrauch anwendbar, bei denen der Mikrocontroller größtenteils im Leerlaufmodus bleibt.
Der Watchdog-Timer überprüft, wie der Name schon sagt, immer, ob der Mikrocontroller ordnungsgemäß funktioniert oder nicht. Im Fall eines blockierten oder angehaltenen Mikrocontrollers setzt WDT (Watchdog Timer) den Mikrocontroller automatisch zurück, wodurch sichergestellt wird, dass der Mikrocontroller in einem kontinuierlichen Code-Fluss ausgeführt wird, ohne hängen zu bleiben, hängen zu bleiben oder sich in angehaltenen Situationen zu befinden.
Selbstweck-Timer:
Dies ist ein weiteres Timer-Peripheriegerät, das einen dedizierten Timing-Prozess wie ein Watchdog-Timer bedient. Dieser Timer aktiviert das System regelmäßig, wenn der Mikrocontroller im Energiesparmodus läuft.
Dieses Timer-Peripheriegerät kann intern oder über externe Peripheriegeräte verwendet werden, um den Mikrocontroller aus dem Ruhemodus zu aktivieren. Für dieses Projekt werden wir Timer 1 und Timer 2 verwenden.
Programmierung des Nuvoton N76E003 Mikrocontrollers für Timer
Einstellen der Pins als Ausgang:
Beginnen wir zuerst mit dem Ausgabeabschnitt. Wir verwenden zwei LEDs, eine ist die integrierte LED mit dem Namen Test, die mit dem Port P1.4 verbunden ist, und eine externe LED, die mit dem Pin P1.5 verbunden ist.
Daher sind diese beiden Pins als Ausgangspin konfiguriert, um diese beiden LEDs mithilfe der folgenden Codeausschnitte zu verbinden.
#define Test_LED P14 #define LED1 P15
Diese beiden Pins werden in der Setup-Funktion als quasi-bidirektionaler Pin gesetzt.
void setup (void) {P14_Quasi_Mode; P15_Quasi_Mode; }}
Einstellen der Timer-Funktion:
In der Setup-Funktion muss Timer 2 konfiguriert werden, um die gewünschte Ausgabe zu erhalten. Dazu setzen wir das T2MOD-Register auf einen Teilungsfaktor von 1/128 und verwenden es in einem Auto-Reload-Verzögerungsmodus. Hier ist die Übersicht über das T2MOD-Register.
Das 4,5- und 6-Bit des T2MOD-Registers setzt den Taktteiler für Timer 2 und das 7-Bit den Auto-Reload-Modus. Dies geschieht mit der folgenden Zeile -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Diese beiden Zeilen sind in der Datei Function_define.h als definiert
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Diese Zeilen stellen nun den für den Timer 2 ISR erforderlichen Zeitwert ein.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Welches ist weiter definiert in Function_define.h Datei as-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
16000000 ist also die Kristallfrequenz von 16 MHz, die die Zeitverzögerung von 100 ms einstellt.
Unter zwei Zeilen werden die Low- und High-Bytes von Timer 2 geleert.
TL2 = 0; TH2 = 0;
Schließlich aktiviert der folgende Code den Timer 2-Interrupt und startet den Timer 2.
set_ET2; // Timer2 Interrupt aktivieren set_EA; set_TR2; // Timer2 läuft
Die vollständige Setup-Funktion finden Sie in den folgenden Codes:
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; // Timer2 Interrupt aktivieren set_EA; set_TR2; // Timer2 laufen }
Timer 2 ISR-Funktion:
Die Timer 2 ISR-Funktion ist im folgenden Code zu sehen.
void Timer2_ISR (void) Interrupt 5 { clr_TF2; // Timer2 löschen Interrupt Flag LED1 = ~ LED1; // LED1 umschalten, verbunden in P1.5; }}
Blinkender Code und Überprüfen der Ausgabe auf Timer-Funktionalität
Der Code (unten angegeben) gab beim Kompilieren 0 Warnungen und 0 Fehler zurück und ich habe ihn mit der Standard-Flash-Methode in Keil geflasht. Nach dem Blinken blinkten die LEDs mit einer definierten Timer-Verzögerung wie programmiert.
Schauen Sie sich das Video unten an, um eine vollständige Demonstration der Funktionsweise des Boards für diesen Code zu erhalten. Ich hoffe, Ihnen hat das Tutorial gefallen und Sie haben etwas Nützliches gelernt, wenn Sie Fragen haben. Lassen Sie sie im Kommentarbereich unten. Sie können auch unsere Foren verwenden, um andere technische Fragen zu stellen.