- Configuration matérielle et configuration requise
- Schéma de principe pour l'interfaçage des LED avec le Nuvoton N76E003
- Timer Pins sur Nuvoton N76E003
- Registres de minuterie dans Nuvoton N76E003
- Types d'heures à Nuvoton N76E003
- Programmation du microcontrôleur Nuvoton N76E003 pour minuteries
- Code clignotant et vérification de la sortie pour la fonctionnalité de la minuterie
Dans nos précédents tutoriels sur le microcontrôleur Nuvoton, nous avons utilisé un programme de base de clignotement des LED comme guide de démarrage et également interfacé GPIO comme entrée pour connecter un commutateur tactile. Avec ce tutoriel, nous savons parfaitement comment configurer le projet Keil et mettre en place l'environnement de programmation du microcontrôleur N76E003 Nuvoton. Il est temps d'utiliser un périphérique interne de l'unité de microcontrôleur et d'aller un peu plus loin en utilisant la minuterie intégrée du N76E003.
Dans notre tutoriel précédent, nous n'utilisions qu'un retard logiciel pour faire clignoter une LED, donc dans ce tutoriel, nous allons apprendre à utiliser la fonction de retard de la minuterie ainsi que le Timer ISR (Interrupt Service Routine) et faire clignoter deux LED individuelles. Vous pouvez également consulter le didacticiel Arduino Timer et le tutoriel PIC Timer pour vérifier comment utiliser les minuteries avec d'autres microcontrôleurs. Sans perdre beaucoup de temps, évaluons le type de configuration matérielle dont nous avons besoin.
Configuration matérielle et configuration requise
Comme l'exigence de ce projet est d'apprendre la minuterie ISR et la fonction de retard de la minuterie, nous utiliserons deux LED, dont une clignotera en utilisant le retard de la minuterie dans la boucle while et une autre clignotera dans la fonction ISR.
Puisqu'une LED est disponible dans la carte de développement N76E003, ce projet nécessite une LED supplémentaire et la résistance de limitation de courant pour limiter le courant de la LED. Les composants dont nous avons besoin -
- N'importe quelle couleur de la LED
- Résistance 100R
Sans oublier que, outre les composants ci-dessus, nous avons besoin d'une carte de développement basée sur un microcontrôleur N76E003 ainsi que du programmeur Nu-Link. De plus, des fils de montage et de raccordement sont également nécessaires pour connecter tous les composants.
Schéma de principe pour l'interfaçage des LED avec le Nuvoton N76E003
Comme nous pouvons le voir dans le schéma ci-dessous, la LED Test est disponible à l'intérieur de la carte de développement et elle est connectée sur le port 1.4. Une LED supplémentaire est connectée au port 1.5. La résistance R3 est utilisée pour limiter le courant de la LED. À l'extrême gauche, la connexion de l'interface de programmation est affichée.
Timer Pins sur Nuvoton N76E003
Le schéma des broches du N76E003 peut être vu dans l'image ci-dessous-
Comme nous pouvons le voir, chaque broche a des spécifications différentes et chaque broche peut être utilisée à des fins multiples. Cependant, la broche 1.5 qui est utilisée comme broche de sortie LED, perdra le PWM et d'autres fonctionnalités. Mais ce n'est pas un problème car une autre fonctionnalité n'est pas requise pour ce projet.
La raison du choix de la broche 1.5 comme sortie et de la broche 1.6 comme entrée est la disponibilité la plus proche des broches GND et VDD pour une connexion facile. Cependant, dans ce microcontrôleur sur 20 broches, 18 broches peuvent être utilisées comme une broche GPIO et toutes les autres broches GPIO peuvent être utilisées à des fins de sortie et d'entrée, à l'exception de la broche 2.0 qui est spécialement utilisée pour l'entrée de réinitialisation et elle ne peut pas être utilisée comme production. Toutes les broches GPIO peuvent être configurées dans le mode décrit ci-dessous.
Selon la fiche technique, PxM1.n et PxM2.n sont deux registres utilisés pour déterminer le fonctionnement de contrôle du port d'E / S. Puisque nous utilisons des LED et que nous avons besoin de la broche comme broches de sortie générales, nous utiliserons donc le mode Quasi-bidirectionnel pour les broches.
Registres de minuterie dans Nuvoton N76E003
La minuterie est une chose importante pour toute unité de microcontrôleur. Le microcontrôleur est livré avec un périphérique de minuterie intégré. Le nuvoton N76E003 est également livré avec des périphériques de minuterie 16 bits. Cependant, chaque minuterie est utilisée à des fins différentes, et avant d'utiliser une interface de minuterie, il est important de connaître la minuterie.
Types d'heures à Nuvoton N76E003
Minuterie 0 et 1:
Ces deux minuteries timer0 et timer1 sont identiques aux minuteries 8051. Ces deux minuteries peuvent être utilisées comme minuterie générale ou comme compteurs. Ces deux minuteries fonctionnent selon quatre modes. En Mode 0, ces minuteries fonctionneront en mode Minuterie / Compteur 13 bits. En mode 1, le bit de résolution de ces deux minuteries sera de 16 bits. En mode 2, les minuteries sont configurées comme un mode de rechargement automatique avec une résolution de 8 bits. En mode 3, la minuterie 1 est arrêtée et la minuterie 0 peut être utilisée comme compteur et minuterie en même temps.
Parmi ces quatre modes, le mode 1 est utilisé dans la plupart des cas. Ces deux minuteries peuvent utiliser le Fsys (System Frequency) en mode fixe ou pré-calibré (Fys / 12). Il peut également être cadencé à partir d'une source d'horloge externe.
Minuterie 2:
La minuterie 2 est également une minuterie 16 bits principalement utilisée pour la capture de forme d'onde. Il utilise également l'horloge système et peut être utilisé dans différentes applications en divisant la fréquence d'horloge à l'aide de 8 échelles différentes. Il peut également être utilisé en mode comparaison ou pour générer du PWM.
Comme pour le minuteur 0 et le minuteur 1, le minuteur 2 peut être utilisé en mode de rechargement automatique.
Minuterie 3:
Le temporisateur 3 est également utilisé comme temporisateur de 16 bits et il est utilisé pour la source d'horloge de vitesse de transmission pour l'UART. Il dispose également d'une fonction de rechargement automatique. Il est important d'utiliser cette minuterie uniquement pour la communication série (UART) si l'application nécessite une communication UART. Il est conseillé de ne pas utiliser cette minuterie à d'autres fins dans un tel cas en raison du processus conflictuel dans la configuration de la minuterie.
Minuterie de chien de garde:
Watchdog Timer peut être utilisé comme une minuterie 6 bits standard, mais il n'est pas utilisé à cette fin. L'utilisation de la minuterie Watchdog comme minuterie à usage général est applicable pour les applications à faible consommation d'énergie où le microcontrôleur reste principalement en mode veille.
Watchdog Timer, comme son nom l'indique, vérifie toujours si le microcontrôleur fonctionne correctement ou non. Dans le cas d'un microcontrôleur pendu ou arrêté, WDT (Watchdog Timer) réinitialise automatiquement le microcontrôleur, ce qui garantit que le microcontrôleur fonctionne dans un flux de code continu sans se coincer, se pendre ou s'arrêter.
Minuterie de réveil automatique:
Il s'agit d'un autre périphérique de minuterie qui sert un processus de minutage dédié identique à un minuteur de surveillance. Cette minuterie réveille périodiquement le système lorsque le microcontrôleur fonctionne en mode basse consommation.
Ce périphérique de minuterie peut être utilisé en interne ou en utilisant des périphériques externes pour sortir le microcontrôleur du mode veille. Pour ce projet, nous utiliserons Timer 1 et Timer 2.
Programmation du microcontrôleur Nuvoton N76E003 pour minuteries
Définition des broches comme sortie:
Commençons par la section de sortie en premier. Nous utilisons deux LED, l'une est la LED embarquée, nommée Test, et connectée avec le port P1.4 et une LED externe connectée avec la broche P1.5.
Par conséquent, ces deux broches sont configurées comme une broche de sortie pour connecter ces deux voyants à l'aide des extraits de code ci-dessous.
#define Test_LED P14 #define LED1 P15
Ces deux broches sont définies comme broche quasi-bidirectionnelle dans la fonction de configuration.
void setup (void) {P14_Quasi_Mode; P15_Quasi_Mode; }
Réglage de la fonction de minuterie:
Dans la fonction de configuration, la minuterie 2 doit être configurée pour obtenir la sortie souhaitée. Pour cela, nous allons régler le registre T2MOD avec un facteur de division d'horloge 1/128 et l'utiliser dans un mode de retard de rechargement automatique. Voici un aperçu du registre T2MOD-
Les 4,5 et 6e bits du registre T2MOD définissent le diviseur d'horloge du temporisateur 2 et le 7e bits définissent le mode de rechargement automatique. Ceci est fait en utilisant la ligne ci-dessous -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Ces deux lignes sont définies dans le fichier Function_define.h comme
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Maintenant, ces lignes définissent la valeur de synchronisation requise pour le Timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Ce qui est défini plus en détail dans le fichier Function_define.h comme-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Donc, 16000000 est la fréquence du cristal de 16 Mhz qui définit le délai de 100 ms.
En dessous de deux lignes videront les octets bas et haut du minuteur 2.
TL2 = 0; TH2 = 0;
Enfin, le code ci-dessous activera l'interruption de la minuterie 2 et démarrera la minuterie 2.
set_ET2; // Activer l'interruption Timer2 set_EA; set_TR2; // Exécution de Timer2
La fonction de configuration complète peut être vue dans les codes ci-dessous:
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; // Activer l'interruption Timer2 set_EA; set_TR2; // Exécution de Timer2 }
Fonction ISR du temporisateur 2:
La fonction Timer 2 ISR peut être vue dans le code ci-dessous.
void Timer2_ISR (void) interruption 5 { clr_TF2; // Effacer l'indicateur d'interruption Timer2 LED1 = ~ LED1; // bascule LED1, connectée en P1.5; }
Code clignotant et vérification de la sortie pour la fonctionnalité de la minuterie
Le code (donné ci-dessous) une fois compilé a renvoyé 0 avertissement et 0 erreur et je l'ai flashé en utilisant la méthode de clignotement par défaut dans Keil. Après avoir clignoté, les LED clignotaient selon un délai défini comme programmé.
Regardez la vidéo ci-dessous pour une démonstration complète du fonctionnement du tableau pour ce code. J'espère que vous avez apprécié le didacticiel et appris quelque chose d'utile si vous avez des questions, laissez-les dans la section des commentaires ci-dessous. Vous pouvez également utiliser nos forums pour publier d'autres questions techniques.