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 allons intensifier un cran et faire clignoter très vite. Le programme est étonnamment concis et facile à mettre en œuvre.

Voyez par vous-même :

 #include <avr/io.h>#include <util/delay.h> int main(void){ 
DDRB | = 1 << PINB0 ;
while (1)
{
PORTB ^ = 1 << PINB0 ;
_delay_ms(100) ;
 } 
 01001011 &10001101equals00001001 

HÉ ! Quels sont les symboles de fous!! Crazy semble être un thème commun ici. Eh bien, je vais vous expliquer. Mais, je vous promets, c’est assez facile. Vous avez juste besoin de mémoriser un certain nombre de choses. J’entrerai dans un peu de détail, mais si vous ne recevez pas, ne vous inquiétez pas, juste mémoriser ce qu’accomplit l’instruction entière et vous serez amende. Je vous donnerai un soupçon le long du chemin. Voici le détail des opérations au niveau du bit :

Il y a des opérateurs logiques appelés AND, OR, ne pas et XOR qui nous préoccupe à ce stade. Ils signifient vraiment ce qu’ils disent. C’est tout pour le bien de comparer deux bits, "1" et "0". Voir ? Comment peut juste en comparant deux numéros être difficile ! « 1 » et « 1 » est vrai ou « 1 ». Et oui, vous l’aurez deviné, « 0 » et « 0 » est faux ou « 0 ». Mais ce qui est « 0 » et « 1 » et vice versa ? Eh bien, faux ou « 0 », évidemment. Ces gars-là sont différents, alors, vraiment, elles sont fausses.

Exemple et une opération binaire numéro (le « & » est utilisé en programmation pour C et) :

 01001011 |10001101equals11001111 

Facile, pas vrai ? Eh bien, ou est encore plus facile ! « 1 » ou « 1 » est « 1 », évidemment. « 0 » ou « 0 » est également « 0 ». Il commence à être très semblables aux AND, mais voici la différence. Si les deux nombres sont différents, il se traduira par « 1 ». Oui, « 1 » ou « 0 » est « 1 ».

Nous allons utiliser le même nombre binaire pour l’exemple (ce personnage drôle "|" est l’OR, parfois situé au-dessus de la « \ » sur le clavier) :

 01001011 ^10001101equals11000110 

Hmm, qui s’est sur tous les endroits où il n’avaient pas chers ! C’est là que la magie opère. Oui, il a gardé les plus dans le premier numéro et où il y a ceux dans le deuxième nombre binaire, mais pas le premier, il a changé à ceux à ceux. Très simple. PAS simplement prend tous les bits et les flips. Par exemple, pour ce nombre binaire : 01001101 va se transformer en 10110010. Il est devenu les 0 1 en 0 et 1, mais n’obtiennent pas ce confondre avec le XOR.

XOR est semblable à l’OR mais le « 1 » XOR « 1 » est en fait « 0 ». Je vais juste montrer l’exemple et vous pouvez comprendre ce que happenes.

 #include <util/delay.h> 

Eh oui, vous l’aurez deviné, le "^" c’est qui précède le « 6 » est le symbole XOR. Hmmm... Le "|" et le "^" sont au programme. Cool. Eh bien, puisque nous sommes programme de pensée, nous allons disect les choses nous ne savons pas encore !

 DDRB = 0b00000001; 

Vous savez déjà ce que fait le < avr/io.h >, donc je ne perdez pas votre temps avec celui-là, mais il y a une nouvelle instruction #include. Le delay.h nous donnera quelques méthodes pratiques pour nous d’utiliser. Tout comme son nom l’indique, le delay.h va nous fournir un moyen de créer des retards dans notre programme.

Ignorant le « principal » puisque nous savons que déjà, nous voyons le DDRB a changé. N’ayez pas peur ! Voici le processus où nous étions là où nous sommes :

C’est ce que nous avions avant. Ce n’est pas un très bon moyen de minipulating les broches parce qu’on vient de changer toutes les broches de 1 à 7 en entrée, mais « what if », nous avons eu un programme plus vaste qui utilise ces broches pour d’autres choses, comme par exemple, broche 2 commande de pression de frein allpies pour le système de freinage avec antiblocage. Vous ne voulez pas juste arbitrairement la définir en tant qu’entrée. Qui rendrait vos freins inutiles (ce qui seraient vraiment mauvais).

 DDRB = DDRB | 0b00000001; 

Nous avons besoin d’un moyen seulement affecter un bit, la broche 0 bit. Eh bien, si vous regardez le « OR » ci-dessus, nous pouvons le faire avec un masque (pas le masque de carnaval, que vous pensez, mais un masque binaire.

 DDRB |= 0b00000001; 

Cette volonté prend son ancien moi et « OR » à un masque. Le masque est : 0b00000001. Oui cela ressemble au nombre binaire réel, mais si le DDRB précédente a été, disons, 0b01001010, puis faire un RC à celle avec notre masque serait : 0b01001010 | 0b00000001 = 0b01001011. Ce qui est différent dans le résultat. C’est vrai, que la broche 0 bit est changé !

Cette statememt peut être plus compressé en C++ :

 PORTB |= 1 << PINB0;_delay_ms(100);PORTB &= ~(1 << PINB0);_delay_ms(100); 

Mais ce n’est pas ce qui est dans le programme. Même si cela est parfaitement valide, pourquoi ne nous profiter de certaines des définitions dans le fichier d’en-tête io.h. Je veux dire, c’est là pour notre confort, n’est-il pas ? Notez mon utilisation des contractions ! C’est la même chose en C++: "c’est" vraiment « c’est », comme "DDRB | = 0b00000001" équivaut à "DDRB = DDRB | 0b00000001 ". J’ai couler dans mon fauteuil avec cette mauvaise analogie. Whataver, aide !

Alors, pourquoi "DDRB | = 1 << PINB0" ?

1 << PINB0 est l’acte de créer le masque. Le « 1 » représente ce qui sera inséré dans le masque, le << est un opérateur de décalage vers la gauche. Il fait exactement ce qu’il dit, et PINB0 est un nombre de postes que le « 1 » se déplacera à gauche. En substance, le PINB0 est juste égale à 0. Donc, vous commencez avec un 0b00000000 et vous ajoutez un « 1 » pour faire 0b00000001 et ensuite vous quart-positions 0 à gauche. Si vous vous retrouvez avec 0b00000001, le même nombre d’en-haut. Donc, si c’était PINB4 ? La déclaration serait: 1 << PINB4. Le « 1 » serait déplacé à gauche 4 fois consistant en une : 0b00010000. N’oubliez pas, nous utilisons un indice de zéro, donc il y a quatre 0 s après le 1.

Passons sur le tout en boucle. Vous avez raison, nous n’avions rien dans la « boucle infinie » avant. Eh bien, maintenant nous devons le microcontrôleur pour montrer une action. Cela n’est possible dans le cadre de la boucle. La boucle est où l’action se répète encore et encore. Si l’action était situé avant la boucle, puis l’action se produirait seulement une fois, comme l’établissement de l’orientation de l’axe, ce qui est approprié pour ce programme. Mais pour créer le clignotant pour toujours, nous devons tourner la PINB0 sous et hors tension dans la boucle. Voici également les retards interviennent. Si nous n’avions pas de délais, nous ne verrions pas la LED clignote en tout, il ressemblerait comme si c’était tout de suite, puisque le clignotement produirait plus vite que le œil peut percevoir, donc nous avons besoin pour la ralentir.

Nous savons comment définir un bit spécifique dans le nombre binaire, mais nous ne savons pas comment faire un bit spécifique « 0 » si c’est un « 1 » encore. Le code suivant fait juste cela, mais vous remarquerez qu’il n’est pas ce que montre le programme. Les deux premières lignes se transforme le bit « 1 » (5 volts, lumière) et fait une pause pour 100 millisecondes (en passant, vous pouvez utiliser microsecondes en changeant les « ms » « nous »). Les deux deuxièmes lignes transforme le bit PINB0 "0" (0 Volt, pas de lumière). Non, la comparaison et ne peut pas faire juste un « 0 » de la mèche, mais si vous n’est pas "~" le masque de numéro binaire, il se tournera de 0 à 1 et tous les 1 s à 0 s. Ces prises permettent à n’affecter le bit PINB0 et transformez-le en un « 0 ». J’ai ajouté la parenthèse juste pour contenir l’opération de masquage pour le ne puisse pas les clés d’activation multiple entier et pas seulement le « 1 » avant le déplacement vers la gauche "<<".

 PORTB ^= 1 << PINB0;_delay_ms(100); 

Si le retard se passe même pour être sur et en dehors, nous pourrions raccourcir les quatre lignes précédentes à seulement deux et profiter de l’opération XOR. N’oubliez pas, le XOR transformera notre broche spécifique à un 1 si c’est 0 et vice versa. Cette instruction ne touchent que le PINB0. Chaque fois que l’instruction est exécutée, elle renversera le foret à l’opposé.

C’est tout. Voir ce n’était pas douloureux du tout.

Articles Liés

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

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 th
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 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 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 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 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 de microcontrôleurs de début 11 : Horloges, compteurs et l’horloge de microcontrôleur

Partie de microcontrôleurs de début 11 : Horloges, compteurs et l’horloge de microcontrôleur

Temporisations et compteurs sont donc essentiels que vous verrez de nombreux exemples impliquant tout au long de cette série. Comme son nom l'indique, minuteries sont utilisés pour le temps et le comptage. Comptage et le calendrier vous permet de fai
Le monde part du microcontrôleur

Le monde part du microcontrôleur

Future électronique a une large gamme de microcontrôleurs. Il est conçu pour être utilisé pour les applications embarquées. Microcontrôleurs (parfois abrégé μc, uc ou MCU ) se consacrent un ordinateurs petit et low-cost en électronique qui est constr
En savoir plus sur microcontrôleurs

En savoir plus sur microcontrôleurs

Cet Instructable a été conçu pour répondre à la question : Comment puis-je commencer à microcontrôleurs ? Maintenant, en clair, un anglais simple, vous pouvez apprendre ce qu'un microcontrôleur est et comment utiliser un. Vous apprendrez comment fair
Comment choisir un microcontrôleur

Comment choisir un microcontrôleur

il l'habitude d'être assez limitait le nombre de jetons de microcontrôleur différents disponibles pour les amateurs. Tu dois utiliser tout ce que vous arrivaient à acheter chez le marchand de puce de correspondance, et qui réduit le choix à un petit
Manipulation de Registre microcontrôleur

Manipulation de Registre microcontrôleur

Je suis toujours étonné par la nouvelle technologie qui va constamment sortir qui permet aux amateurs comme moi accéder aux microcontrôleurs puissants et bon marché comme les conseils de développement Arduino ou chipKIT. Ils sont faciles à programmer
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