Atmel démarrage 4: Deux Blinky – commutateurs, résistances de pull-up et Bit Ops (9 / 11 étapes)

Étape 9: Deux Blinky – le sens des déclarations

L’idée générale du programme Blinky deux : tout d’abord, la valeur B0 comme une sortie et B1 (et le reste) en tant qu’entrée. B0 conduit la LED et B1 est une entrée pour le commutateur. Nous voulons que la LED clignote, qui signifie que B0 doivent constamment faire basculer États lorsque l’entrée est de B1 à logique 0 (c'est-à-dire, les NIP à terre). Pour LED clignotant, nous devons écrire alternativement 0 et 1 à exactement une seule broche, nommément B0 sans affecter aucune autre broche. Nous faisons cela à l’aide d’opérations de bits de manière à affecter seulement B0. Pour déterminer si l’entrée sur le B1 est logique 0, nous utilisons un masque (et une opération de bits) pour singulariser le bit B1 et tester si elle est zéro, ce qui correspond à la LED en mode clignotant. Normalement, on n’utiliserait pas un tel arrangement compliqué, à moins qu’il n’en existait aucun autre choix. L’interrupteur serait très probablement être placé sur un autre port disponible distinct de la LED.

Pour certains de l’exposé qui suit, vous pouvez imprimer les deux Blinky codage afin de comparer facilement le codage avec l’explication.

  1. Le #include #define F_CPU 8000000UL et #include n’ont pas changé de Blinky One, ni avoir les déclarations DDRB = 0b00000001, while(1) et les déclarations de _delay_ms.

  2. Avis que DDRB = 0b00000001 ensembles B0 en tant que sortie, alors que tous les autres B physiques pins sont entrées à la MCU. En particulier, le B1 est une entrée. B0 entraîne la LED et B1 détecte l’interrupteur.

  3. PORTB = 0b00000010 : ici, B0 étant une sortie, la main droite 0 dans cette cession PORTB définit pin B0 à zéro volts (LED « off »). Ensuite, B1 étant un intrant, la 1 dans l’attribution du PORTB écrit un 1 sur une entrée (B1) qui active la résistance de pull-up B1.

  4. uint8_t : entier non signé de 8 bits, qui est généralement appelé un « octet ». Ce type de variable de stocker des nombres composé d’au plus 8 bits. Cette variable peut varier de 0 à 11111111 qui est 255 (ou 0 à 0xFF). L’uint8_t est un type défini et n’est pas C/C++ natif, bien que ces langues ont « char » et « unsigned char ». Note qu’un octet « signé » tels qu’int8_t aurait également une valeur de 0 à 0xFF, mais le bit le plus significatif (c'est-à-dire, le z en 0bzxxxxxxx) est de 1 pour négatif et 0 pour les nombres positifs.

  5. Masque d’uint8_t = 0b00000010 : définit une variable 8 bits masque qui se voit attribuer la valeur de 0b00000010. Le masque servira à éliminer les bits 0 et 2-7 de l’examen.

  6. Uint8_t MaskL = 0b00000001 : définit une 8 bits MaskL variable d’une valeur de 0b00000001 de masquage. Le L en MaskL sert à rappeler qu’elle s’applique à la LED. MaskL sera utilisé pour supprimer les morceaux B1 à B7 d’examen et ne touchent que peu B0.

  • uint8_t Test = 1: une variable 8 bits, compte tenue de la valeur initiale de 0b00000001. Dans ce cas, la valeur initiale n’est pas grave étant donné que la variable de Test sera donnée une valeur avant de vérifier sa valeur. La partie « = 1 » pourrait ont été laissée hors ; Toutefois, le point-virgule est toujours requis.

  • Test = PINB & masque : déclaration de The PINB va lire les bits dans le Registre qui représente les bits B7 par B0. Le « & » représente un bit par bit logique (voir tableau 2). Seulement peu #1 dans la variable de Test (par exemple, le bit correspondant à B1) conservera la valeur PINB originale après le masquage (c.-à-d. & masque) [16]. Par conséquent, selon le tableau 2, la variable pour que test aura tous les zéros, sauf peut-être bit B1 qui peut être 0 ou 1.

    Lorsque l’extrémité du fil est reliée au rail 0v, broche B1 sera de zéro et donc PINB & masque produira tous les zéro pour tous les bits et Test aura donc la valeur 0. Le MCU conduira ensuite la LED « on ». Si l’extrémité du fil est enlevée, la résistance de pull-up placera Vcc sur la broche B1 afin que la valeur de PINB & masque aura la valeur 0b00000010. Le MCU verra une valeur différente de zéro pour Test et il permet de désactiver le LED.

  • if(x) : un contrôle de flux qui exécute des instructions entre les deux suivantes d’accolades {} lorsque l’instruction x est vrai. Dans ce cas, l’instruction x a la forme de Test == 0. Le double-signe égal « == » demande si oui ou non la variable « Test » est identique à « zéro » (c.-à-d., 0 x 00). En C/C++, la logique « faux » est équivalent à la valeur « 0 », mais la logique « true », c’est quoi que ce soit pas '0' par exemple '1' ou 5' et ainsi de suite. Pour deux Blinky, la variable « Test » est nul lorsque l’interrupteur est fermé et qui a quand nous voulons la LED clignote. Donc nous utilisons l’instruction ' si (Test == 0)'.

  • PORTB | = MaskL : généralement, la ligne verticale | On entend au niveau du bit ou [16]. L’instruction est un raccourci pour

    PORTB = PORTB | MaskL

    La main droite PORTB lit la valeur précédente envoyée au port. La main gauche PORTB puis écrit les résultats de l’opérateur ou au port. Le masquage utilise MaskL = 0b00000001 avec un 1 uniquement en position #0 (correspondant à B0), qui contrôle la LED. L’OR sera alors seulement affectent peu B0 en lui affectant 1 logique (broche 12 sera Vcc) tel que discuté en conjonction avec le tableau 3. Les autres bits dans l’écriture de portB sera la même car ils étaient Quand ai lu. Donc lorsque PORTB est écrit, aucun d'entre les résistances de pull-up sera être activé ou désactivé ! Seulement le bit le moins significatif (c'est-à-dire, B0) sera écrit dans 1 qui placera ensuite 5v sur la broche de B0 physique et qui va activer la LED.

  • PORTB & = ~ MaskL : cette déclaration est raccourci pour PORTB = PORTB & ~ MaskL où & est l’opération de bits AND (c.f., tableau 4). La main droite PORTB lit les valeurs écrites précédemment dans portB. La main gauche PORTB écrit le résultat de l’et retour à portB. Étant donné que MaskL = 0b00000001 then ~ MaskL = 11111110. L’AND affecterez bit #0 en PORTB logique 0. Les bits restants de port ne seront pas affectés et les valeurs d’origine vont être réécrites sur le portB. C’est pourquoi la connectivité des résistances de pull-up ne souffrira pas. Le code pin B0, qui entraîne la LED, sera défini sur zéro et la LED sera « off ».

  • Articles Liés

    Atmel démarrage 5: Ligne de vie

    Atmel démarrage 5: Ligne de vie

    M. A. Parker c2015La longe est un circuit simple basé sur l'unité de microcontrôleur Atmel ATTiny2313A (MCU) qui fonctionne comme une source d'horloge de substitut pour une cible MCU rendus inopérante par des fusibles à tort de réglage de l'horloge.
    Atmel démarrage 3: Binky One – PORT, broches, DDR et del

    Atmel démarrage 3: Binky One – PORT, broches, DDR et del

    M. A. Parker c2015Blinky, le témoin clignotant, montre comment utiliser le langage C/C++ dans le Studio Atmel (AS) pour contrôler le MCU Atmel ports pour entrée et sortie (c.-à-d., IO) et révèle la vie « secrète » des registres Atmel PORT, de PIN et
    Atmel démarrage 2: Circuits de microcontrôleur et les fusibles

    Atmel démarrage 2: Circuits de microcontrôleur et les fusibles

    M. A. Parker c2015Circuits et fusibles construit un circuit simple mais important sur la maquette de l'expérimentateur qui sera utilisé comme plateforme de base pour de nombreux projets de microcontrôleur et pour définir les paramètres de microcontrô
    Atmel démarrage 1: Programmeur et Studio Atmel

    Atmel démarrage 1: Programmeur et Studio Atmel

    M. A. Parker c2015Installation Atmel Studio (AS) et un programmeur incarnent les prémices [0] sur le chemin d'accès à l'aide d'une unité individuelle de Microcontrôleur AVR Atmel MCU [1] par opposition à la MCU-a-bord comme Arduino [2]. Ici commence
    Initiation à l’ordinateur de poche Mini

    Initiation à l’ordinateur de poche Mini

    Environ un mois et demi, j'ai créé un projet appelé l'ordinateur de poche Mini et écrit une Instructable sur la façon de le construire. Ce Instructable prend l'ensemble du projet un peu plus loin en vous aidant à démarrer avec votre ordinateur de poc
    Cardan sans balais avec Arduino

    Cardan sans balais avec Arduino

    Il s'agit d'un projet de printemps 2014 Electronics à Pomona College créé par Andreas Biekert et Jonah Grubb. Merci au professeur Dwight Whitaker, Tony Grigsby et le département de physique de Pomona.Avec ce projet, notre but était de créer un cardan
    Matrice de LED avec contrôleur de jeu - premier projet A

    Matrice de LED avec contrôleur de jeu - premier projet A

    ce projet a été construit pour mon cours d'introduction électronique à l'Université de Waterloo au Canada.  Il s'agissait de ma première introduction à l'électronique et donc, mon premier projet.Suivez ces étapes pour construire un tableau de LED 16
    Commutateurs de lecture avec ATtiny2313

    Commutateurs de lecture avec ATtiny2313

    il y a eu plusieurs Instructables traitant des sorties de la ATtiny2313 et les dispositifs similaires à AVR. Par exemple,. Travaillant sur la dernière de l'Elliot réel, qui montre comment contrôler les moteurs pas à pas, j'ai trouvé qu'il serait vrai
    ATMega328 : perdre le cristal et gagner deux broches

    ATMega328 : perdre le cristal et gagner deux broches

    Cette instructable explique comment faire fonctionner la puce Atmega328 comme la puce dans un Arduino sans le cristal, ce qui rend breadboarding plus facile et en vous donnant deux broches supplémentaires pour travailler avec. Ce programme ne fonctio
    Commutateur du SIP & PUFF Arduino

    Commutateur du SIP & PUFF Arduino

    Arduino The série de microcontrôleurs ouvre un monde immense de possibilités pour les programmeurs débutants et amateurs ! Avec les systèmes de développement disponible gratuitement et tutoriels et une vaste gamme de fonctions de la bibliothèque et d
    Trouble de marbre - un simulateur de labyrinthe en marbre avec inclinaison commutateurs

    Trouble de marbre - un simulateur de labyrinthe en marbre avec inclinaison commutateurs

    marbre trouble est un cas limite de Marble Madness :)Il simule un labyrinthe en marbre en détectant l'orientation de la boîte avec 2 interrupteurs d'inclinaison.Arrêter la presse : il existe une version nouvelle et plus intuitive qui ne nécessite pas
    Commutateur intelligent

    Commutateur intelligent

    Le monde a changé si rapidement, et c'est toute la diligence science et la technologie. Choses ont amélioré, nouvelle ère est arrivé d'un meilleur et un monde intelligent. Mais selon moi, il y a une chose qui n'a pas changé encore... Un commutateur!!
    Conduite de deux tubes Nixie avec un Arduino via un registre à décalage et deux SN74141s.

    Conduite de deux tubes Nixie avec un Arduino via un registre à décalage et deux SN74141s.

    tubes Nixie sont vraiment cool, à la recherche et deviennent très populaires pour leur look « rétro ». Bien qu'il existe un certain nombre de tutoriels là-bas sur l'utilisation de tubes nixie et certaines unités préemballées sympa (voir ces gentils d
    Ajout d’un commutateur de puissance d’un pistolet à colle chaude

    Ajout d’un commutateur de puissance d’un pistolet à colle chaude

    j'ai fait cette modification il y a environ 8 ans et son encore en cours d'exécution forte.Le pistolet à colle chaude (d'où vient être nommé HGG) que j'ai possédé avait deux paramètres "Hot" (ferait fondre la colle chaude) et "Chaud" (