Début microcontrôleurs partie 6: Écrit le premier programme à tour sur une LED

Je sais que vous êtes prêt à écrire le premier programme. Vous avez visité par beaucoup jusqu'à présent ! Alors que nous sommes sur le sujet, récapitulons les événements. Vous avez sortit et le microcontrôleur Atmel AVR de votre choix. J’ai choisi theATMega32 pour mon utilisation. Vous ont présenté le concept de microcontrôleurs leur fonctionnement ; et ont également été introduites pour le programmeur, le dispositif qui permet de transférer le programme dans le microcontrôleur. Vous avez construit une interface pratique qui sert à relier les broches SPI aux broches du microcontrôleur corrects. Vous vérifié que les pilotes de programmeur (USBTinyISP) ont été installés correctement pour les versions 32 bits et 64 bits de Windows (XP, 7 et Vista). Vous avez également installé la programmation environnement installé l’environnement « programmation » appelé WinAVR afin que vous puissiez avoir un environnement dans lequel écrire votre programme et transférez-le dans le microcontrôleur. Et pour s’assurer que tout fonctionne correctement, vous avez utilisé avrdude pour testé le programmeur alors que branché à l’ordinateur et le microcontrôleur. Rappelons que ce programme est l’utilitaire de transfert de programme de passer notre programme compilé dans la mémoire du microcontrôleur. Enfin, vous avez construit le premier circuit afin que nous puissions avoir quelque chose à écrire un programme pour. Ouf... c’est beaucoup ! Mais puisque vous avez sauté à travers tous ces obstacles, le travail acharné est terminée et c’est bon voile d’ici sur. J’espère que vous étiez en mesure d’obtenir à travers les étapes précédentes sans aucun problème--alors maintenant Let's get avec notre premier programme.

Dans un souci de simplification, nous allons classer la fonction du microcontrôleur en trois catégories : contrôle, de détection et de communication. Nous allons laisser les détails de comment développer chacune de ces fonctions et se plonger dans ces détails que nous écrivons les divers programmes. Notez qu’il existe de nombreuses façons de programmer ces fonctions. Pour le premier programme, nous allons faire le microcontrôleur « maîtrise » quelque chose. Et comme vous le savez depuis le post précédent, nous allons utiliser une LED à cet effet. Fondamentalement, nous nous tournerons la del. Oui je sais... ennuyeux, droite ? Eh bien, j’ai besoin de commencer quelque part ! Comme je vous prends à travers l’expérience de la programmation, je vais ajouter plus de complexité un peu à la fois si vous êtes facilement capable d’envelopper votre tête autour de ces concepts importants.

Si à ce stade vous vous demandez probablement... Comment faire un programme pour contrôler une LED ? Eh bien, c’est vraiment facile : nous dirons simplement Pin0 sur PORTB en sortie 5 volts. N’oubliez pas que c’est la broche auquel est connecté le fil positif (anode). La première clé dans ce scénario est "sortie", et l’appelle « volts 5. » Il y a un moyen que nous pouvons dire une épingle particulière pour être fixé à une sortie de la MCU. Une fois un code pin a été défini pour fournir une sortie, vous serez alors capable de contrôler qui épingle et qu’il soit élevé (5 volts) ou rendent faible (zéro de tension). Et puisqu’il n’y a que deux États pour cette broche dans le mode de sortie (5v ou 0v) et seuls deux États pour le mode elle-même (entrée ou sortie), vous n’avez qu’à définir la valeur logique 1 ou un 0. Notez que ceci doit être accompli pour chaque broche, que nous souhaitons faire usage de notre circuit. Mais avant d’arriver à brancher en 1 ou 0, nous allons parler de l’entrée et sortie. Quand une broche est en mode d’entrée, il est à l’écoute pour une tension. Lorsque la broche est en mode de sortie, it peut être facturé à 5v ou pas inculpé à 0v. C’est tout !

Il y a plusieurs façons de le faire. Il s’agit de ne pas vous embrouiller, mais plutôt de rendre les choses plus simples. J’ai introduira vous à l’une des nombreuses façons d’accomplir cette tâche, et plus tard, je vais vous expliquer quelques autres méthodes tout en écrivant des autres programmes. Notez cependant que, même si cette première méthode est excellente pour l’introduction du concept, il n’est probablement pas aussi bon dans la pratique. C’est pourquoi vous verrez les autres méthodes dans les programmes futurs qui laisseront broches contextuelles (ces pins de chaque côté de l’axe d’intérêt) affectés, car elles peuvent très bien ont été précédemment définies dans le programme. Mais étant donné que nous allons écrire un programme simple, nous ne vous inquiétez cette complexité en ce moment.

Pour choisir le mode de sortie d’entrer un NIP, vous allez utiliser le registre de Direction de données (DDR). Oh punaise ! Ce qui est un registre?! ? Ne laissez pas cela vous inquiétez pas. Un registre est tout simplement un emplacement de mémoire qui rend le microcontrôleur réagir d’une certaine façon. Nous avons un registre permet de définir un État pour le microcontrôleur, ou faire le microcontrôleur à faire quelque chose. C’est comme les réflexes, ou chatouille. Lorsqu’une personne chatouille une autre personne, elle appelle rire. Nous pouvons faire le MCU faire quelque chose en définissant une valeur spécifique dans un registre. C’est tout ce que vous devez savoir pour le moment.

Donc, lorsque vous utilisez le livre DDR, vous êtes en mesure de mettre la broche à la sortie de données, ou acceptent des données. Mais nous avons dit d’entrée ou de sortie, maintenant vous dites données également. Le terme « données » utilisé ici simplement ajoute une autre dimension à cette idée sous forme de « temps ». Si vous faites une broche 5 volts, puis zéro volts et ensuite 5 volts à nouveau... vous envoient réellement 1 s et 0 s. À la broche, c’est rien de plus qu’un État haut (5 volts), puis un état bas (zéro Volt): The MCU voit cette logique haut/bas. Et vous pouvez également recevoir des données de la même manière.

Il y a plusieurs façons de définir pin0 pour le port B, à la sortie. Pour ce faire consiste à écrire :

DDRB = 0b00000001 ;

Je m’explique. « DDRB » se réfère au livre de Direction données pour port B ; « 0 » est pour indiquer au compilateur que ce qui suit est l’expression binaire d’un nombre ; et le « 1 » sur la fin indique la position de la broche 0 (la première broche au port B). Rappelons qu’il y a 8 broches pour le port B ; tiges à 0 bien que 7. Il y a également 8 chiffres dans notre ligne de code. Chaque chiffre représente donc une épingle sur le port, et nous pouvons utiliser les chiffres individuels pour se référer spécifiquement à l’une des broches dans le port B. Si le « 1 » à la fin de notre instruction de code se réfère à la première goupille dans port B, qui dans ce cas est pin 0. (Rappel que C et C++ sont des langues de base zéro, alors le premier index d’une structure de données se réfère à est l’élément de zero'th, le second indice désigne le premier élément, etc..) Vraiment, nous pas besoin de devenir plus complexes à ce stade, comme cela sera couvert en beaucoup plus en détail à l’avenir tutoriels. Cependant si vous souhaitez en savoir plus sur le système binaire, cochez ici.

Maintenant nous devons appliquer 5v sur la broche. Cela fonctionne comme l’instruction de code DDR, nous avons utilisé plus haut. Nous utiliserons un nombre binaire de mettre 5v sur la broche (0) à l’aide de cette instruction :

PORTB = 0b00000001 ;

La seule différence entre this et l’instruction précédente, c’est que nous utilisons maintenant le registre PORT. Ce registre sait les broches de ce port spécifique et nous donne accès pour spécifier la valeur de données réelles (logique 0 ou 1) pour ces pions.

Maintenant, nous avons besoin de parler un peu de la structure globale de notre programme. Tous les programmes ont besoin d’un endroit spécifié pour démarrer l’exécution. C’est comme quelqu'un qui donne un ensemble d’instructions sur comment faire un gâteau sans leur dire qui pour commencer sur l’étape. La fonction « main » est l’endroit où démarrent l’exécution à tous les programmes C/C++. Si nous allons créer une fonction principale.

int main (void)
{
}

Pour le programme comprendre le DDR et le PORT s’inscrire les informations et comment ceux-ci fonctionnent dans le microcontrôleur, une instruction include doit être ajoutée, qui contient toutes les informations sur les microcontrôleurs AVR. Il s’agir d’instruction seront probablement dans l’ensemble de vos programmes.

#include < avr/io.h >
int main (void)
{
}

Au démarrage du processus de compilation, la portion de préprocesseur du compilateur recherche dans le répertoire "avr" pour le fichier "io.h". L’extension « .h » ici indique qu’il s’agit d’un fichier d’en-tête, et (comme son nom l’indique) le code dans ce fichier sera inséré au début du fichier source que vous créez (tête). Maintenant, nous pouvons insérer les instructions DDR et PORT dans notre code, étant donné que l’inclusion du fichier d’en-tête io.h a informé le compilateur à leur sujet.

#include < avr/io.h >
int main (void)
{

DDRB = 0b00000001 ; //Data pin0 de réglage Direction s’inscrire à la sortie et les broches restantes comme entrée PORTB = 0b00000001 ; //Set pin0 à 5 volts

}

Maintenant la direction de la pin0 a la valeur de sortie, avec une valeur définie à 5v. Mais nous ne sommes toujours pas terminés. Nous devons garder le microcontrôleur exécutant indéfiniment, donc nous avons besoin d’une routine de le faire. C’est ce qu’on appelle une boucle sans fin (ou infinie). La boucle infinie s’assure que le microcontrôleur n’arrête pas ses opérations. Je vais vous expliquer cela plus en détail lorsque nous avons des choses à faire dans cette boucle. Il existe plusieurs types de boucles, nous pouvons utiliser à cette fin, mais pour cette démonstration, je vais utiliser le tout en boucle. Il signifie la même chose en anglais comme il le fait dans le code : par exemple, « alors que » j’ai ma main vers le haut, vous devriez garder frappant.

#include < avr/io.h >
int main (void)
{

DDRB = 0b00000001 ; Données Direction s’inscrire les réglage pin0 à la sortie et les broches restantes comme entrée
PORTB = 0b00000001 ; Set pin0 à 5 volts
while(1)
{

//Code serait ici, s’il fallait exécuter encore et encore et encore... sans cesse

}

}

Notez que nous utilisons un « 1 » comme argument pour le tout en boucle, parce que rien d’autre que "0" est une véritable logique. Par conséquent, le tout en condition de boucle ne sera jamais autre chose que logiquement vrai, et le programme continuera à exécuter indéfiniment (c.-à-d. ; Je garde ma main levée).

Donc, voici le fruit de notre travail. C’était un long trajet jusqu'à maintenant, mais je vous promets, tout partir d’ici sera gratifiant et beaucoup beaucoup moins de temps. Dans la prochaine vidéo et instruction, nous allons faire le clignotement de la LED. Nous étudierons comment créer un retard si la LED ne clignote pas si vite qu’il semble qu’il ne clignote pas.

Articles Liés

Début microcontrôleurs partie 3: Transfert d’un programme dans le microcontrôleur (pilotes)

Début microcontrôleurs partie 3: Transfert d’un programme dans le microcontrôleur (pilotes)

Bienvenue à la partie 3. Il s'agit d'un petit tutoriel qui traitera simplement chargement des pilotes pour s'assurer que votre programmeur puisse communiquer avec votre ordinateur correctement.Veuillez noter que parfois les appareils TinyISP et USBAV
Début microcontrôleurs partie 7: Réviser le premier programme de faire le clignotement de la LED

Début microcontrôleurs partie 7: Réviser le premier programme de faire le clignotement de la LED

Vous avez écrit le premier programme qui allume une LED. Oui, c'était spectaculaire ! Eh bien, pas vraiment, mais nous allons introduire un peu de folie à la LED. Nous allons donner une personnalité « bipolaire » en faisant clignoter. Puis nous allon
Début microcontrôleurs partie 9: Bouton et logiciel Debouncing des méthodes

Début microcontrôleurs partie 9: Bouton et logiciel Debouncing des méthodes

Dans cette partie du tutoriel, nous allons discuter le bouton et le logiciel debouncing.Nous voulons étudier le bouton debouncing premier et en détail, donc nous avons une bonne compréhension de ce qu'elle implique. Bouton debouncing est important et
Début microcontrôleurs partie 2: Création d’une Interface SPI du programmateur au microcontrôleur

Début microcontrôleurs partie 2: Création d’une Interface SPI du programmateur au microcontrôleur

Bonjour, nous espérons que vous avez apprécié la partie 1 de début de microcontrôleurs. Nous allons avancer dans la partie 2 et de commencer à parler sur les interfaces et comment obtenir votre microcontrôleur pour communiquer avec un ordinateur.Donc
Début microcontrôleurs partie 5: Essais le programmeur et la construction du premier Circuit

Début microcontrôleurs partie 5: Essais le programmeur et la construction du premier Circuit

Jusqu'à présent, vous devriez avoir tous les logiciels installés et construit l'interface qui assurera une liaison commode du programmateur pour les microcontrôleurs (MCU). Pour l'étape suivante, vous aurez besoin une maquette (ceux avec les nombres
Début microcontrôleurs partie 4: Installation de l’environnement de programmation (WinAVR)

Début microcontrôleurs partie 4: Installation de l’environnement de programmation (WinAVR)

Bienvenue à la prochaine étape de notre série. Nous allons introduire certains éléments de programmation base maintenant. Ce tutoriel est tout simplement sur l'installation de votre environnement de programmation. L'environnement de programmation que
Début microcontrôleurs partie 13 : Intro pour interfacer les LCD

Début microcontrôleurs partie 13 : Intro pour interfacer les LCD

Le microcontrôleur est une merveilleuse pièce de génie et il peut faire beaucoup de choses (avec l'aide de certaines émissions grande), mais c'est toujours une boîte noire opaque. Si vous voulez partager des informations ou vous montrer ce qu'il essa
Partir de microcontrôleurs partie 1

Partir de microcontrôleurs partie 1

C'est la première d'une longue lignée de tutoriels visant à fournir un guide débutants et tutoriel basé autour du microcontrôleur Atmel AVR Atmega32. Je vais montrer vous, par le biais de projets et d'exemples, comment programmer et assurent les fonc
Partie 1 - réparation de la Base sur une planche à neige ou skis

Partie 1 - réparation de la Base sur une planche à neige ou skis

adore les voitures ? Découvrez mon nouveau site web ! http://nukem384.blogspot.com/http://www.youtube.com/watch?v=5qOXG8B3jQoComment réparer la base sur votre snowboard si vous avez des gouges grandes éraflures ou rayures en utilisant p-tex, égalemen
Comment faire pour lire binaire/hexadécimal molette avec un microcontrôleur AVR

Comment faire pour lire binaire/hexadécimal molette avec un microcontrôleur AVR

cette instructable va vous montrer comment lire le numéro sur un pushwheel binaire ou molette commutateur à l'aide de LED ou un microcontrôleur AVR (j'utilise un ATmega328p mais cela peut être adapté à n'importe quel AVR ou probablement un autre micr
Début de la partie microcontrôleurs 8: Ajout d’un bouton au microcontrôleur et rendant Do Something

Début de la partie microcontrôleurs 8: Ajout d’un bouton au microcontrôleur et rendant Do Something

Un moyen très simple et facile de prévoir l'interaction humaine avec le microcontrôleur est d'insérer un bouton dans le circuit. Nous communiquons avec les ordinateurs à l'aide de deux principaux dispositifs d'entrée : la souris et le clavier. Un cla
LYT LED compteur: LED, microcontrôleur PIC et déplacement moyenne Code

LYT LED compteur: LED, microcontrôleur PIC et déplacement moyenne Code

Bonjour à tous, Merci de vérifier sur mon premier Instructable. J'ai aimé voir vos créations au fil des ans et aimer ce que vous tous apportent leur contribution. Ce projet est un essaimage de celui que j'ai vu récemment ici et je dois donner une cri
Groovin ' Grover : Une marionnette microcontrôleur à base

Groovin ' Grover : Une marionnette microcontrôleur à base

Grover Groovin ' est une marionnette manipulée par quatre servos de passe-temps et un contrôleur de servo microcontrôleur à base de Pololu Maestro. Vous pouvez contrôler chacun des membres de Grover indépendamment et lui faire à pied, vague et plus d
3D imprimés microcontrôleur Dice Roller

3D imprimés microcontrôleur Dice Roller

Il s'agit d'un projet juste pour le plaisir que j'ai fait dans la Digilent MakerSpace. Généralement, chaque fois que je joue des jeux de société j'utilise une application smartphone laminage dés puisque les dés sont si faciles à perdre. J'ai pensé qu