Étape 2: IO Pins
Une des premières choses que vous voudrez faire avec un microcontrôleur est de lire un bouton et une LED s’allume.
Pour cet exemple je vais utiliser un MCU ATtiny2313. Ils sont bon marchés et viennent avec 18 broches e/s, 2K de Flash et seules 128 octets de RAM !
Vous devez ouvrir vers le haut de la feuille de données, suivez le long : ATtiny2313 fiche technique
Commençons par construire le circuit sur une maquette. Le MCU peut utiliser entre 1,8/2.7 et 5.5V selon la version que vous avez.
Pour alimenter la puce, j’utilise 3.3V régulateur, vous pouvez utiliser une valeur différente, cependant rester à l’intérieur des valeurs d’exploitation et garder au-dessus de 2v, donc vous pouvez facilement alimenter la LED.
Connecter le régulateur à une source d’alimentation une pile 9v ou un pack de plug (j’en ai un évalué à 9v qui offre réellement 12v!).
Sur la MCU relier la broche 10 (GND) à la borne négative / gnd du régulateur et votre NIP 20 à VCC (puissance).
Relier une touche entre GND et la broche 13 (aucune broche e/s pourrait faire, mais coller avec le même si le code fonctionne, tout simplement pour vous).
Se connecter à cathode de la diode (un méplat sur la LED et le fil le plus court) à travers une résistance à la terre. Branchez l’Anode (plomb plus long) sur la broche 12.
Maintenant, sur le code !
Si vous ne savez pas comment mettre le code sur un AVR, il y aura un appendice à la fin de ce instructable expliquant, allez lire maintenant et revenez quand vous êtes prêt.
Pour si peu de code, nous avons beaucoup d’explications à donner !
DDRB est le « données Direction s’inscrire pour PortB »
Ce registre détermine si les broches e/s sont utilisés pour mesurer la tension sur la broche ou si elles peuvent sink / source actuelles.
Quand 0 ils sont à haute impédance et ne sera pas fournir assez de courant pour alimenter une LED par exemple, mais ils peuvent être utilisés pour vérifier si un code pin est haute ou basse.
Quand 1 ils ont une impédance faible et peuvent fournir ou récepteur jusqu'à généralement 20mA, assez pour alimenter une diode ou un transistor (pour commuter des charges plus grands).
Ici PB0 (Pin 12) est affectée à basse impédance pour conduire la LED.
La ligne suivante définit le registre PORTB. Ce registre est utilisé pour définir la valeur d’une épingle, comme cette broche (PB1 = 13 broches) est utilisé pour un bouton, nous allons mettre élevé par défaut.
Lorsque le bouton est enfoncé, connecter à la terre, cette broche sera tirée faible.
Ensuite vient notre boucle infinie.
Cette boucle s’exécute jusqu'à ce que le courant est coupé !
À l’intérieur de la boucle, nous vérifions l’état du bouton, c’est une ligne occupée, laisse ainsi le décomposer. Pour l’if condition nous avons :
! (PINB & (1 << PB1))
On commence par un pas (!) qui transforme une véritable en un faux et visa versa.
Ensuite, nous avons :
PINB & (1 << PB1)
PINB est le registre que vous lire pour savoir la valeur des broches e/s.
Le « & » est utilisé pour masquer les juste la valeur de (1 << PB1) que nous avons appris plus tôt, c'est-à-dire un seul bit allumé en position PB5.
Donc tout cela nous vérifier si le bit à PB1 dans PINB est élevé et puis inversant.
Ainsi, nous vérifions si le PB1 pin est faible (la touche enfoncée).
Si il est pressé nous allumer la LED: PORTB | = (1 << PB0)
C’est en utilisant l’opérateur OR et le déplacement vers la gauche que nous avons couvert plus tôt, définissant la goupille élevée. Si le bouton n’est pas pressé nous voulons dégager la goupille (tirer faible) :
PORTB & = ~ (1 << PB0)
Cet exemple utilise l’opérateur AND, ainsi que le non et le déplacement vers la gauche pour mettre juste une broche off (bas).