Étape 4: Atmel Secret : DDR et les PORTs et les PINs
Cette étape actuelle prend une pause de fabrication et d’essai. Les gens souvent demander (et devrait demander) Comment faire pour activer/désactiver le niveau de tension (c'est-à-dire l’état logique) sur une broche du port MCU pour faire une LED clignote (Figure 1) et comment lire une entrée numérique.
Souvent par rapport à un processeur ou des microcontrôleurs (MCU), on parle de « port », ce qui signifie un groupe de fils que soit apporte des données hors de la MCU ou dans le microcontrôleur. Pour un circuit intégré, les « fils » consultez les broches physiques de l’IC. Les microcontrôleurs de AVR d’Atmel ont généralement des ports avec 8 broches de chaque puisque le MCU utilise le bus de données large de 1 octet. Les ports sont souvent désignés comme ports d’entrée-sortie ou de ports d’e/s ou juste IO ; Ce sont les ports d’e/s numériques. Les Microcontrôleurs Atmel peut avoir beaucoup de ces ports e/s qui est étiquetés comme A, B et ainsi de suite. On retrouve souvent les mots clés Atmel de PORTA, PORTB, PORTC, PORTD. Veuillez relire ce paragraphe et remarquez qu’un port physique se réfère aux broches physiques sur l’IC. Atmel utilise les mots clés du PORT et de la goupille (Remarque caps) en ce qui concerne les registres et entrée et sortie. Par définition, un registre [14] est un type d’emplacement de mémoire (peut-être mieux qualifié de « emplacement de stockage ») avec les relations spéciale/interconnectivité au matériel. Le registre n’est pas considéré faire partie de la mémoire programme et variable même si il serait possible de lire, d’écrire, de manipuler et de transférer le contenu de la caisse enregistreuse.
Maintenant, voici la partie du secret. Dans le jargon d’Atmel, le mot PORT (comme utilisé dans PORTB par exemple) se réfère à un port de sortie numérique par lequel le MCU génère une tension sur les câbles sortant du MCU. Le mot d’Atmel PIN (tel qu’utilisé dans PINB par exemple) signifie le MCU met le groupe de fils physiques dans un état de haute impédance et le microcontrôleur peut lire les tensions numériques (0 ou SCR où Vcc = 5 pour l’installation du Conseil d’administration de l’expérimentateur). Peut-être plus important encore, PORTB et PINB font référence au même groupe de fils physiques sur la MCU. Un commentaire similaire s’applique à PORTA et PINA sauf les broches physiques générales diffèrent de ceux auxquels se réfèrent PORTB et PINB. Alors, Comment détermine-t-on si une épingle physique sur le MCU est une entrée ou une sortie pour le MCU ?
Disons que cela encore une fois avec d’autres mots. Il y a une différence entre PORT et la broche de ATMEL à l’aide de C/C++. Le mot PORT désigne un Registre qui fournit des sorties aux broches physiques MCU. Le registre PORT stocke 1 s et 0 s et le MCU traduit ces valeurs logiques à des tensions de SCR et zéro, respectivement, sur les broches physiques. Le mot PIN désigne un registre qui reçoit l’entrée d’un groupe de pins physiques. Le MCU se traduira les tensions de la SCR et zéro sur les broches physiques pour logique 1 et 0, respectivement, pour le registre de la broche. Notez que le mot physique se réfère aux réelles fils courts qui sort de l’emballage MCU. Nous utilisons souvent le mot « port » en référence à la collection de 8 broches ; Cela devrait se lire comme port physique et broches physiques.
OK, alors comment on ne précise pas si un examen physique pin est une entrée ou une sortie pour le MCU ? Atmel AVR utilise le concept de données Direction Registre DDR. Chaque groupe de fils formant un port d’e/s physique a un tel DDR et étiquetés comme DDRA, DDRB, DDRC DDDR et ainsi de suite. Un DDR est un registre de 8 bits (c.-à-d. emplacement de mémoire/stockage) semblable au registre correspondant pour les ports d’e/s de 8 bits. Une valeur de 1 dans une position de DDR correspond à une sortie pour le pin physique correspondant. Une valeur de 0 produit une entrée sur l’axe physique correspondante. À titre d’exemple, DDRB correspond au port physique. Quand peu DDRB #i a la valeur 1 puis broche #i dans PortB physique sera une sortie pour le MCU. En revanche, quand DDRB peu #i a une valeur égale à zéro puis physique broche #i dans PortB physique sera un intrant. Des exemples plus concrets seraient peut-être mieux.
Exemple 1: Sortie numérique unique et sept entrées numériques
Envisager un port physique sur le ATTiny2313A et examiner le tableau 1 ci-dessous. La rangée supérieure répertorie les broches physiques sur le paquet DIP 20pin comme indiqué sur la première page ou deux de la fiche de données de Atmel. La deuxième ligne indique le nom d’Atmel pour fixer l’axe physique.
Tableau 1: Exemple de liste ATTiny2313A Pin 12 comme une sortie et les autres broches port B en entrée.
Broches de physiques | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 |
Nom | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
DDRB | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
PortB physique | Dans | Dans | Dans | Dans | Dans | Dans | Dans | Hors |
Supposons maintenant que nous avons d’abord définir DDRB = 1 comme indiqué dans la troisième ligne du tableau 1. Le registre DDRB serait défini ordinairement avant la lecture ou l’écriture PortB. Le MCU lit le registre DDRB et définit l’axe physique #12 en tant que sortie. Parce que les autres bits DDRB sont nuls, les broches physiques restants 13-19, qui sont nommés B1-B7, sont toutes les entrées. À ce stade, le programme peut lire ou écrire le PortB depuis l’entrée et sorties ont été fixés.
Exemple 2: Deux sortie épingles et 6 entrées
Tableau 2: Exemple avec broches 13 et 14 comme les sorties et les entrées de repos.
Broches de physiques | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 |
Nom | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
DDRB = 00000110 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
PortB physique | Dans | Dans | Dans | Dans | Dans | Hors | Hors | Dans |
La troisième ligne du tableau 2 montre que nous avons d’abord définir DDRB = 00000110 en binaire. En C/C++, c’est écrit comme DDRB = 0b110 où le « 0 » signifie « binaire ». Les zéros ont été omis par souci de simplicité pour faire la « 110 » partie, mais ils peuvent être inclus dans l’instruction C DDRB = 0b00000110 si vous le souhaitez. La même valeur peut être écrit sous forme décimale comme DDRB = 6. Et il peut être écrit au format hexadécimal comme DDRB = 0 x 06 où les stands « 0 x » pour les nombres hexadécimaux. Le port physique a donc pin13 et broche 14 comme sorties et tous les autres broches comme entrées.
Commentaires : Ces broches physiques qui sont sorties sera en mesure de générer ou l’autre des deux États, à savoir, le zéro et le SCR. Pour notre projet, le Conseil d’administration de l’expérimentateur utilise Vcc = 5v, tandis que la ligne de vie qui sera construit dans une boîte en plastique utilise SCR comme la tension de la batterie, qui peut varier de 4,9 volts à 3 volts selon l’état de charge des batteries. La tension de sortie peut ensuite servir à contrôler d’autres appareils. Atmel broches physiques peuvent 40mA de sources ou de puits de courant. Pour vérifier, reportez-vous aux caractéristiques électriques dans les spec/fiches techniques tels que http://www.atmel.com/Images/doc8246.pdf. Pour la broche de sortie peut fournir (c.-à-d., source) biais courant lorsque la broche physique a sur la tension de sortie de + Vcc ou il peut recevoir du courant (c.-à-d., évier) quand l’axe physique a 0v.
Exemple 3: Écrire des valeurs de sorties
OK, nous allons donc prendre quelques exemples d’utilisation DDRB, PORTB et PINB. Tout d’abord examiner le PORTB.
Tableau 3: Par exemple faire des broches d’e/s Port B sorties.
Broches de physiques | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 |
Nom | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
DDRB | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
PortB physique | Hors | Hors | Hors | Hors | Hors | Hors | Hors | Hors |
PORTB = 0b0100100 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |
Résultat physique Pin | 0V | SCR | 0V | 0V | 0V | SCR | 0V | 0V |
Dans l’exemple du tableau 3, nous avons d’abord définir DDRB = 0b11111111 = 0xFF = 255 décimal afin que physiques broches 12-19 sont toutes les sorties pour le MCU. Ensuite, supposons que nous écrivons l’octet suivant du registre de sortie pour B comme PORTB = 0b0100100 comme indiqué dans la sixième rangée du tableau 3. Remarque ' PORTB =' moyens pour définir le port de sortie Registre une valeur – il est plus facile de penser à PORTB en tant que variable et "PORTB =" moyens pour définir cette variable égale à une valeur, qui le MCU se traduit par des tensions sur le port physique. Lorsque PORTB a une logique « 1 », la sortie devrait exposer la réalisation physique de la « 1 » qui est Vcc ou, pour le Conseil d’administration de notre expérimentateur,
Logique 1 = > Vcc = + 5volts
En utilisant la logique 1 de cette manière permet pour un grand beaucoup de plates-formes différentes d’utiliser le même codage pour autant le MCU sait comment transformer les valeurs logiques des tensions. Donc en comparant les sixième et septième lignes du tableau 3 montre que ces broches physiques auxquels une logique 1 a été écrit exposera une tension Vcc. Les autres broches sont zéro volt potentiel. POINT IMPORTANT : Les caractères "PORTB =" signifie dans ce cas d’écrire quelque chose pour les broches de physiques au PortB (en fait cela tout d’abord écrit dans le PORTB s’inscrire et ensuite les valeurs logiques sont traduits par tension générant des circuits dans le MCU). De cette façon, le MCU peut contrôler les circuits externes.
Exemple 4: Lire les valeurs de broches d’entrée
Considérons maintenant un autre cas où nous avons d’abord définir (dans notre programme) DDRB = 0b00000000 (binaire) = 0 x 00 (hex) = 0 (décimale) comme dans le tableau 4. Ici toutes les broches physiques 12-19 seront entrées en raison de tous les zéros dans DDRB.
Tableau 4: Exemple montrant les broches 12-19 sont toutes les entrées.
Broches de physiques | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 |
Nom | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
DDRB | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
PortB physique | Dans | Dans | Dans | Dans | Dans | Dans | Dans | Dans |
Volts appliquées à la broche | 0V | 0V | 0V | 0V | 0V | SCR | 0V | SCR |
PINB contenu | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
Outre Supposons un agent externe (tel que moi ou vous) s’applique des tensions à la MCU physique pins 12-19 tel qu’illustré dans la sixième rangée du tableau 4. POINT IMPORTANT : L’utilisation « = PINB » signifie lire les tensions présentes sur les broches physiques correspondant à IO PortB et convertissez-les en valeurs logiques. Cela servirait dans une instruction d’assignation de C/C++ telles que ' x = PINB'. Le contenu de la variable x (c.-à-d. PINB) peut être vu dans la dernière ligne du tableau 4 pour que la valeur
x = 0b00000101 (binaire) = 0 x 05 (hex) = 5 (decimal)
Le MCU convertit SCR sur un pin d’entrée à la valeur logique 1 et zéro autrement. De cette manière, le MCU peut lire les États de circuits externes.
Exemple 5: IO mixte et les résistances de pull-up
Il reste une autre situation possible par laquelle un port d’e/s a deux entrée et sortie et les SCM effectue une écriture sur le port. Que se passe-t-il ? Pour un code pin qui est un intrant, l’écriture (à l’aide du PORTB etc.) peut activer ou désactiver une résistance pull-up interne selon que le bit correspondant dans l’écriture est un 1 ou 0 respectivement. Reportez-vous au démarrage 4. Lire un port (à l’aide de PINB etc.) de mixte IO (certaines chevilles dans le port sont de sortie et le reste sont introduits) indiquera l’entrée lorsque la broche est définie comme entrée et il va lire la valeur précédemment écrite (qui est toujours dans le registre PORTB) si l’axe physique est une sortie. Reportez-vous au démarrage 4 ou au manuel d’utilisation pour plus de détails [0,1].
Maintenant au code Blinky un projet.