Dans ce tutoriel, nous allons interfacer un module joystick avec le microcontrôleur atmega8. Un JOY STICK est un module d'entrée utilisé pour la communication. Cela facilite essentiellement la communication entre l'utilisateur et la machine. Un joystick est illustré dans la figure ci-dessous.
Le module de joystick a deux axes - l'un est horizontal et l'autre est vertical. Chaque axe de joystick est monté sur un potentiomètre ou un pot ou une résistance variable. Les points médians sont ramenés à Rx et Ry. Ces broches transportent comme broches de signal de sortie pour JOYSTICK. Lorsque le manche est déplacé le long de l'axe horizontal, avec la tension d'alimentation présente, la tension sur la broche Rx change.
La tension à Rx augmente lorsqu'elle est déplacée vers l'avant, la tension à la broche Rx diminue lorsqu'elle est déplacée vers l'arrière. De même, la tension à Ry augmente lorsqu'elle est déplacée vers le haut, la tension à la broche Ry diminue lorsqu'elle est déplacée vers le bas.
Nous avons donc quatre directions de JOYSTICK sur deux canaux ADC. Dans des cas normaux, nous avons 1Volt sur chaque broche dans des circonstances normales. Lorsque le bâton est déplacé, la tension sur chaque broche augmente ou diminue selon la direction. Donc quatre directions comme (0V, 5V sur le canal 0) pour l'axe x; (0V, 5V sur la voie 1) pour l'axe y.
Nous allons utiliser deux canaux ADC d'ATMEGA8 pour faire le travail. Nous allons utiliser le canal 0 et le canal 1.
Composants requis
Matériel: ATMEGA8, alimentation (5v), AVR-ISP PROGRAMMER, LED (4 pièces), condensateur 1000uF, condensateur 100nF (5 pièces), résistance 1KΩ (6 pièces).
Logiciel: Atmel studio 6.1, progisp ou flash magic.
Schéma de circuit et explication de fonctionnement
La tension aux bornes du JOYSTICK n'est pas complètement linéaire; ce sera bruyant. Pour filtrer le bruit, des condensateurs sont placés à travers chaque résistance du circuit, comme indiqué sur la figure.
Comme le montre la figure, il y a quatre LED dans le circuit. Chaque LED représente chaque direction du JOYSTICK. Lorsque le bâton est déplacé dans une direction, la LED correspondante s'allume.
Avant d'aller plus loin, nous devons parler de l'ADC d'ATMEGA8, Dans ATMEGA8, nous pouvons donner une entrée analogique à l'un des QUATRE canaux de PORTC, peu importe le canal que nous choisissons car tous sont identiques, nous allons choisir le canal 0 ou PIN0 de PORTC.
Dans ATMEGA8, l'ADC a une résolution de 10 bits, de sorte que le contrôleur peut détecter un changement minimum de Vref / 2 ^ 10, donc si la tension de référence est de 5V, nous obtenons un incrément de sortie numérique pour chaque 5/2 ^ 10 = 5mV. Ainsi, pour chaque incrément de 5 mV dans l'entrée, nous aurons un incrément de un à la sortie numérique.
Nous devons maintenant définir le registre d'ADC en fonction des termes suivants, 1. Tout d'abord, nous devons activer la fonction ADC dans ADC.
2. Ici, nous allons obtenir une tension d'entrée maximale pour la conversion ADC est de + 5V. Nous pouvons donc configurer la valeur maximale ou la référence de l'ADC à 5V.
3. Le contrôleur a une fonction de conversion de déclenchement qui signifie que la conversion ADC n'a lieu qu'après un déclenchement externe, car nous ne voulons pas que nous ayons besoin de définir les registres pour que l'ADC fonctionne en mode de fonctionnement libre continu.
4. Pour tout ADC, la fréquence de conversion (valeur analogique en valeur numérique) et la précision de la sortie numérique sont inversement proportionnelles. Donc, pour une meilleure précision de la sortie numérique, nous devons choisir une fréquence moindre. Pour l'horloge ADC normale, nous réglons la prévente de l'ADC à la valeur maximale (2). Puisque nous utilisons l'horloge interne de 1MHZ, l'horloge de l'ADC sera (1000000/2).
Ce sont les quatre seules choses que nous devons savoir pour démarrer avec ADC.
Les quatre fonctionnalités ci-dessus sont définies par deux registres:
ROUGE (ADEN): Ce bit doit être défini pour activer la fonction ADC d'ATMEGA.
BLEU (REFS1, REFS0): Ces deux bits sont utilisés pour définir la tension de référence (ou tension d'entrée max que nous allons donner). Puisque nous voulons avoir une tension de référence de 5V, REFS0 doit être défini par la table.
JAUNE (ADFR): Ce bit doit être défini pour que l'ADC fonctionne en continu (mode de fonctionnement libre).
PINK (MUX0-MUX3): Ces quatre bits sont destinés à indiquer le canal d'entrée. Puisque nous allons utiliser ADC0 ou PIN0, nous n'avons pas besoin de définir de bits comme dans la table.
MARRON (ADPS0-ADPS2): ces trois bits servent à régler le préscalaire pour ADC. Puisque nous utilisons un prescalaire de 2, nous devons définir un bit.
VERT FONCE (ADSC): ce bit est défini pour que l'ADC commence la conversion. Ce bit peut être désactivé dans le programme lorsque nous devons arrêter la conversion.