- Composants requis
- Schéma de circuit et explication de fonctionnement
- Explication de la programmation
Dans ce projet, nous allons concevoir un réveil simple utilisant des minuteries ATMEGA32. Le microcontrôleur ATmega32A a une minuterie de 16 bits, et nous utiliserons cette minuterie pour compter les secondes et développer une horloge numérique.
Toutes les horloges numériques ont un cristal à l'intérieur qui est le cœur de l'horloge. Ce cristal non seulement présent dans l'horloge mais présent dans tous les systèmes informatiques en temps réel. Ce cristal génère des impulsions d'horloge, nécessaires pour les calculs de synchronisation. Bien qu'il existe d'autres moyens d'obtenir des impulsions d'horloge, mais pour la précision et la fréquence plus élevée, la plupart préfèrent une horloge à cristal. Nous allons connecter un cristal à ATMEGA32 pour obtenir une horloge précise.
Composants requis
Matériel: microcontrôleur ATmega32, cristal 11,0592MHz, condensateur 22pF (2 pièces), alimentation (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2 LCD), condensateur 100uF (connecté à travers l'alimentation), boutons (quatre pièces), résistance 10KΩ (six pièces), 100nF capacito r (quatre pièces), trois commutateurs à broches (2 pièces), transistor 2N2222, buzzer, résistance 200Ω.
Logiciel: Atmel studio 6.1, progisp ou flash magic.
Schéma de circuit et explication de fonctionnement
Pour une synchronisation précise, nous avons connecté un cristal de 11,0592 MHz pour l'horloge. Maintenant, pour désactiver l'horloge interne d'ATMEGA, nous devons changer ses BITS FUSIBLES BAS. Rappelez-vous que nous ne touchons pas les bits de fusible haut pour que la communication JTAG soit toujours activée.
Pour dire à ATMEGA de désactiver l'horloge interne et de travailler sur externe, nous devons définir:
LOW USE BYTE = 0xFF ou 0b11111111.
Dans le circuit PORTB de ATMEGA32 est connecté au port de données LCD. Ici, il faut se rappeler de désactiver la communication JTAG dans PORTC d'ATMEGA en changeant les octets de fusible haut, si l'on veut utiliser le PORTC comme port de communication normal. Dans l'écran LCD 16x2, il y a 16 broches sur tout s'il y a une lumière noire, s'il n'y a pas de rétro-éclairage, il y aura 14 broches. On peut alimenter ou laisser les broches du rétroéclairage. Or, dans les 14 broches, il y a 8 broches de données (7-14 ou D0-D7), 2 broches d'alimentation en énergie (1 et 2 ou VSS et VDD ou GND et + 5v), 3 ème broches de la commande de contraste (VEE-contrôle l'épaisseur des caractères doivent être illustré) et 3 broches de commande (RS & RW & E)
Dans le circuit, vous pouvez observer que je n'ai pris que deux broches de contrôle. Cela donne la flexibilité d'une meilleure compréhension, le bit de contraste et READ / WRITE ne sont pas souvent utilisés afin qu'ils puissent être court-circuités à la terre. Cela met l'écran LCD en mode de contraste et de lecture le plus élevé. Nous avons juste besoin de contrôler les broches ENABLE et RS pour envoyer des caractères et des données en conséquence.
Les connexions effectuées pour l'écran LCD sont indiquées ci-dessous:
PIN1 ou VSS à la terre
Alimentation PIN2 ou VDD ou VCC à + 5v
PIN3 ou VEE à la masse (donne le meilleur contraste pour un débutant)
PIN4 ou RS (sélection de registre) à PD6 de uC
PIN5 ou RW (lecture / écriture) à la terre (met l'écran LCD en mode lecture facilite la communication pour l'utilisateur)
PIN6 ou E (Activer) à PD5 de uC
PIN7 ou D0 à PB0 de uC
PIN8 ou D1 à PB1 de uC
PIN9 ou D2 à PB2 de uC
PIN10 ou D3 à PB3 de uC
PIN11 ou D4 à PB4 de uC
PIN12 ou D5 à PB5 de uC
PIN13 ou D6 à PB6 de uC
PIN14 ou D7 à PB7 de uC
Dans le circuit, vous pouvez voir que nous avons utilisé une communication 8 bits (D0-D7) mais ce n'est pas obligatoire, nous pouvons utiliser une communication 4 bits (D4-D7) mais avec un programme de communication 4 bits devient un peu complexe. Ainsi, comme indiqué dans le tableau ci-dessus, nous connectons 10 broches de l'écran LCD au contrôleur dans lequel 8 broches sont des broches de données et 2 broches pour le contrôle.
Le premier commutateur sert à activer la fonction de réglage entre l'alarme et l'heure. Si la broche est basse, nous pouvons régler l'heure de l'alarme en appuyant sur les boutons. Si ses boutons hauts sont pour régler juste TIME. Il y a QUATRE boutons présents ici, le premier est pour incrémenter MINUTES en alarme ou en temps. La seconde est pour décrémenter les MINUTES en alarme ou en temps. Le troisième est pour incrémenter HOUR en alarme ou en temps. QUATRIÈME est pour décrémenter les HEURES en alarme ou en temps.
Les condensateurs présents ici sont destinés à annuler l'effet de rebond des boutons. S'ils sont retirés, le contrôleur peut en compter plus d'un à chaque fois que le bouton est enfoncé. Les résistances connectées pour les broches servent à limiter le courant, lorsque le bouton est enfoncé pour tirer la broche vers le sol.
Chaque fois qu'un bouton est enfoncé, la broche correspondante du contrôleur est abaissée à la terre et ainsi le contrôleur reconnaît qu'un certain bouton est enfoncé et l'action correspondante est prise.
Tout d'abord, l'horloge que nous choisissons ici est de 11059200 Hz, la diviser par 1024 donne 10800. Donc, pour chaque seconde, nous obtenons 10800 impulsions. Nous allons donc démarrer un compteur avec un prescaler 1024 pour obtenir le compteur d'horloge à 10800 Hz. Deuxièmement, nous allons utiliser le mode CTC (Clear Timer Counter) d'ATMEGA. Il y aura un registre de 16 bits où nous pouvons stocker une valeur (valeur de comparaison), lorsque le compteur compte jusqu'à la valeur de comparaison, une interruption est définie pour générer.
Nous allons définir la valeur de comparaison à 10800, donc fondamentalement, nous aurons un ISR (Interrupt Service Routine sur chaque comparaison) pour chaque seconde. Nous allons donc utiliser cette routine opportune pour obtenir l'horloge dont nous avions besoin.
MARRON (WGM10-WGM13): Ces bits servent à sélectionner le mode de fonctionnement de la minuterie.
Maintenant que nous voulons le mode CTC avec une valeur de comparaison dans l'octet OCR1A, nous devons simplement définir WGM12 sur un, les restants étant laissés à zéro par défaut.
ROUGE (CS10, CS11, CS12): Ces trois bits servent à choisir le prescalaire et ainsi obtenir le compteur d'horloge approprié.
Puisque nous voulons un 1024 comme pré-échelle, nous devons définir à la fois CS12 et CS10.
Maintenant, il y a un autre registre que nous devrions considérer:
VERT (OCIE1A): Ce bit doit être défini pour obtenir une interruption lors de la correspondance de comparaison entre la valeur du compteur et la valeur OCR1A (10800) que nous avons définie.
La valeur OCR1A (valeur de comparaison du compteur) est écrite dans le registre ci-dessus.
Explication de la programmation
Le fonctionnement du réveil est expliqué étape par étape dans le code ci-dessous:
#include // en-tête pour activer le contrôle du flux de données sur les broches #define F_CPU 1000000 // indiquant la fréquence du cristal du contrôleur attaché #include