Étape 6: Les interrupteurs à bascule nous fixions ?
Nous allons tout d’abord penser à comment nous allons coder ceci afin que le contrôleur puisse lire l’entrée à partir du clavier et transformez-le en une valeur numérique correspondant à la touche qui a été enfoncée.
Nous allons utiliser l’analogique au Digital Converter (ADC) qui est intégrée à la Atmega328p. Nous allons utiliser AREF comme notre tension de référence et notre sortie clavier sera connecté à PortC0 ou PC0. Notez que cette broche est également appelée ADC0 pour convertisseur analogique-numérique 0.
Il peut être une bonne idée pour vous de lire à travers l’article 12.4 interrupts pour le ATmega328P et aussi le chapitre 24 du convertisseur analogique-numérique avant de commencer ou au moins avoir les sections prêtes pour référence.
Afin de mettre en place le microcontrôleur afin qu’il sache quoi faire avec un signal d’entrée analogique et la façon d’interagir avec notre programme, nous devons d’abord définir quelques-uns des différents ADC lié Registre bits. Ce sont essentiellement équivalents à l’anciens interrupteurs à bascule sur les premiers ordinateurs. Vous retournez soit un interrupteur à ON ou OFF, ou même plus loin, que vous serait brancher câbles entre un point de vente et un autre pour que les électrons atteignant cette bifurcation trouverait un portail fermé et l’autre ouvrent le forçant à se poser une autre voie dans le dédale des circuits et ainsi effectuer une tâche de logique différente. Lors du codage en langage d’assemblage nous avons à proximité de l’accès à ces fonctions du microcontrôleur qui est l’une des choses séduisantes à le faire en premier lieu. C’est plus « pratique » et beaucoup moins se passe « derrière les coulisses » en quelque sorte. Alors ne pense pas que de mettre ces registres comme une tâche fastidieuse. C’est ce qui rend le langage assembleur intéressant ! Nous gagne une relation très personnelle avec les rouages et la logique de la puce et faire faire exactement ce que nous voulons il à--pas plus et pas moins. Aucun cycles d’horloge gaspillée.
Alors, voici une liste des commutateurs qu'il faut définir :
- Désactiver l’ADC de réduction de puissance de type bit, PRADC, qui est bit 0 du Registre PRR, puisque si ce bit est activé il s’arrêtera de l’ADC. Le registre de la réduction de puissance est essentiellement un moyen pour couper des choses différentes qui utilisent la puissance quand vous n’avez pas besoin d’eux. Puisque nous utilisons le service ADC nous voulons s’assurer qu'il n’est pas désactivé de cette façon. (Voir PRADC, page 46)
- Sélectionnez le canal d’entrée analogique pour être ADC0 en désactivant le MUX3... 0 dans le registre de sélection multiplexeur ADC (ADMUX) (voir tableau 24-4, page 249) ce sont déjà désactivé par défaut donc nous n’avez pas vraiment de le faire. Cependant, je suis y compris car si jamais vous utilisez un port autre que ADC0, vous devrez activer/désactiver ces interrupteurs en conséquence. Diverses combinaisons de MUX3, MUX2, MUX1, MUX0 vous permettent d’utiliser un des ports analogiques comme votre entrée et vous pouvez également modifier celles-ci à la volée si vous voulez regarder un tas de différents signaux analogiques à la fois.
- Désactivez les bits REFS0 et REFS1 dans le registre ADMUX afin que nous utiliserons AREF comme notre tension de référence plutôt qu’une référence interne (voir page 248).
- Activer le bit ADLAR dans ADMUX alors le résultat est « gauche ajusté » nous allons discuter ce choix à l’étape suivante.
- Définir le bit ADC0D dans le numérique d’entrée désactiver Register (DIDR0) pour désactiver l’entrée numérique à PC0. Nous utilisons ce port analogique entrée donc nous pourrions ainsi désactiver l’entrée digitale pour elle.
- ISC0 et ISC1 dans l’externe interrompre contrôle Register A (EICRA) pour indiquer que nous voulons déclencher sur le front d’un signal de tension sur la broche de INT0 (PD2), voir page 71.
- Effacer les bits INT0 et INT1 dans l’externe interrompre masque s’inscrire (EIMSK) pour indiquer que nous n’utilisons pas interruptions sur cette broche. Si nous devions activer les interruptions sur cette broche nous aurions besoin d’un gestionnaire d’interruption à l’adresse 0 x 0002 mais au contraire nous sommes mise en place permettant la conversion de l’ADC, l’achèvement qui est gérée par l’interruption complète de conversion ADC à adresse 0x002A de déclencher un signal sur cette broche. Voir page 72.
- Définir le bit ADC activer (ADEN) (bit 7) dans le contrôle de l’ADC et registre de statut A (ADCSRA) pour permettre à l’ADC. Voir page 249.
- Nous pourrions commencer une conversion unique en définissant le bit ADC de conversion départ (ADSC) chaque fois que nous avons voulu lire le signal analogique, cependant, car maintenant nous aurions plutôt il lire automatiquement chaque fois que quelqu'un pousse le bouton, pour remédier à cela nous permettra des permettre d’Autotrigger de ADC (ADATE) bit dans le ADCSRA Registre afin que le déclenchement se fait automatiquement.
- Nous avons également mis la ADPS2... les bits 0 (les bits prescalaire AD) à 111 pour que l’horloge de l’ADC est l’horloge du processeur divisée par un facteur de 128.
- Nous allons sélectionner la source de l’ADC déclenchement pour être PD2 qui est aussi appelé INT0 (requête d’interruption externe 0). Nous faisons cela en activant/désactivant des différents bits dans le registre ADCSRB (voir tableau 24-6, page 251). On voit par le tableau que nous voulons ADTS0 hors, ADTS1 sur et ADTS2 au large afin que l’ADC déclenche cette broche. Notez que si nous voulions goûter en permanence le port analogique comme si nous lisions un signal analogique continue (comme l’échantillonnage sonore ou quelque chose) que nous fixerions cela au Mode libre en cours d’exécution. La méthode que nous utilisons de la définition de déclenchement sur PD2 déclenche un ADC lecture du port analogique PC0 sans causer une interruption. L’interruption viendra lorsque la conversion est terminée.
- Activer le bit ADC Interrupt activer (ADIE) dans le registre ADCSRA afin que lorsque la conversion numérique analogique est terminée, il va générer une interruption qui nous pouvons écrire un gestionnaire d’interruption pour et mettre à .org 0x002A.
- Définir la j’ai mordu dans SREG pour activer les interruptions.
Exercice 1: Assurez-vous que vous lisez les articles pertinents dans la feuille de données pour chacun des paramètres précités pour que vous compreniez ce qui se passe et ce qui se passerait si nous avons changé les paramètres remplaçant.