Tutoriel d’assembleur AVR 10 (4 / 10 étapes)

Étape 4: Vue d’ensemble des communications de TWI

Dans ce tutoriel, nous tenons à mettre en place les communications entre nos dé-roller et notre affichage à 4 chiffres afin que l’écran affiche le résultat de la lancer de dés. Nous pourrions très facilement juste utiliser la méthode « rouler » de communiquer que nous avons fait avant avec notre analyseur de « Registre » et le rouleau de dés, cependant, à l’avenir Tutoriels nous ajouterons plus de composants et nous tenons tous à être capables de communiquer entre eux. Donc c’est beaucoup mieux si nous utilisons un protocole qui utilise uniquement deux fils et peuvent encore communiquer avec plusieurs contrôleurs de l’esclave. C’est exactement ce que la DHT intégrée pour le Microcontrôleur AVR. Donc, nous allons maintenant apprendre comment l’utiliser.

Vous voulez tourner au chapitre 22, page 206, dans la fiche technique de ATmega328P où il traite de la DHT. Il serait judicieux de consulter il et obtenir un aperçu de comment ça marche. Nous seront à l’aide de la méthode de mise en route facile qui consiste à examiner l’exemple de code qu’ils donnent à la page 216 et modifiez-le pour nos besoins. Pour le moment nous communiquons seulement entre deux microcontrôleurs et donc ce code est assez bien tous nous avons besoin. Plus tard, nous devrons étendre là-dessus, mais quand nous en avons réellement besoin, nous allons couvrir ce matériel supplémentaire.

Voici le fragment de code qu’ils donnent dans la feuille de données :

LDI r16, (1--TWINT) | (1--TWS) | (1--TWEN)
sur Confirm, r16
wait1 :
en r16, Confirm
SBR r16, TWINT
rjmp wait1
en r16, TWSR
Andi r16, 0xF8
IPC r16, START
Brne erreur
LDI r16, SLA_W
sur TWDR, r16
LDI r16, (1--TWINT) | (1--TWEN)
sur Confirm, r16
wait2 :
en r16, Confirm
SBR r16, TWINT
rjmp wait2 :
en r16, TWSR
Andi r16, 0xF8
IPC r16, MT_SLA_ACK
Brne erreur
LDI r16, données
sur TWDR, r16
LDI r16, (1--TWINT) | (1--TWEN)
wait3 :
en r16, Confirm
SBR r16, TWINT
rjmp wait3
en r16, TWSR
Andi r16, 0xF8
IPC r16, MT_DATA_ACK
Brne erreur
LDI r16, (1--TWINT) | (1--TWEN) | (1--TWSTO)
sur Confirm, r16

Notez que dans le code ci-dessus énoncés comme

(1--TWINT) | (1--TWEN)

sont en fait censés pour avoir "<" en eux au lieu du "-" signe, mais pour une raison quelconque l’éditeur stupide que Instructables a choisi de donner nous aime à faire des hypothèses sur ce que nous écrivons et il supprimera tout ce qui suit un "<" lorsque vous essayez de le publier. C’est parce qu’il suppose que lorsque vous écrivez un « code », c’est html et tout ce qui suit un "<" est un lien ou un mode d’affichage. Il ajoute également le
saut de ligne retour de symboles dans au hasard fois alors que je reçois tout droit, et la prochaine fois que je me connecte, je vois que le code est devenu toute une longue série avec"
« de là où les sauts de ligne devraient être ! Argh. Malheureusement, si j’essaie d’écrire notre code dans un autre type, comme la « citation » ou « liste » ou « texte normal », il fera des hypothèses sur l’espacement et de mise en forme et il ne permettent pas moi d’avoir les lignes de code sur des lignes différentes sans double espacement entre eux et la mise en retrait. Qui ruine le look du code et il est difficile pour vous de lire correctement. Utilisez le format de « code » destiné à html et je juste contourner les problème des parties. Ce qu’ils ont vraiment besoin, c’est un type semblable à du LaTeX un appelé « textuellement » où il sera juste imprimer textuellement ce que vous tapez et pas essayez de bite avec elle. Telephone, vous commencez sans doute à voir quelques-unes des raisons pour lesquelles j’aime éditeurs de ligne de commande (comme vi) et la ligne de commande de codage mieux que de l’IDE et éditeurs de base de HTML/Java. En outre, un ennui plus est que si vous écrivez des choses dans un autre éditeur et ensuite copier/coller dans ce celle qu’il supprime toute votre mise en forme et le colle tout comme une longue série que vous devrez ensuite traverser et reformater ! Cet éditeur est fastidieux et ennuyeux. Ces tutoriels d’écriture a été un exercice de patience et de tolérance, permettez-moi de dire, et au moment où que nous avons terminé si je n'ai pas été conduit à l’alcoolisme et la prescription des médicaments, je suis sûr que je serai qualifié pour une vie comme un moine bénédictin ou bouddhistes.

Ouf ! Très bien ! Mettons-nous au travail.

Si vous examinez le fragment de code ci-dessus, que vous voyez qu’il est séparé en plusieurs blocs de wait1, wait2 et wait3 intitulée boucles. À l’intérieur de chacune d’elles, nous attendons pour l’indicateur TWINT pour indiquer que la DHT a terminé tout ce qu’on nous dit enfin qu’il fasse. Entre ces attendre blocs est le code pour démarrer les comm, pour transmettre l’adresse de l’esclave de quel microcontrôleur, nous voulons parler avec, de transmettre les données à cet esclave, et enfin d’arrêter la transmission. Cela se traduit par un seul octet de données transmises.

Avant de continuer avec le fragment de code de transmission, vous devez prenez votre copie de la m328Pdef.inc fichier include et allez dans la section traitant de TWI. Vous pourrez voir les définitions des registres associés à la DHT et les noms des différents bits dans ces registres. Dans le fragment de code ci-dessus, comme d’habitude, nous utilisons les noms des bits et l’opération de décalage vers la gauche, plutôt que le nombre de bits afin que le code est plus facile à lire. L’assembleur ne tient pas bien. Comme je l’ai mentionné plusieurs fois dans le passé, si vous vouliez écrire

LDI r16, 0b10010100

sur 0xbc, r16

Au lieu de

LDI r16, (1--TWINT) | (1--TWEN)

sur Confirm, r16

Il fonctionne parfaitement bien, en fait, l’assembleur voit le premier, celui mais vous devrez être pluie-homme de comprendre votre code six mois dès maintenant et vous n’auriez aucun ami ordinateur parce que tout le monde essaie de lire votre code vous détesterais. Je mentionne à nouveau pour vous rappeler la distinction entre ce qui appartient à la langue de l’Assemblée et quelles sont les étiquettes justes, nous avons nous-mêmes pour nous aider à comprendre notre code écrit. C’est tout le m328Pdef.inc inclure fichier est. Si vous voulez passer par le fichier include et changer les noms de tout ce que vous pourriez faire de même. Vous pouvez appeler TWINT « beavis » et TWEN « butthead » si vous vouliez, mais alors vous auriez des difficultés à lire la fiche technique. En fait, tout ce que « Buddy », le gars (ou ordinateur) qui a écrit le fichier include a fait, essentiellement, est juste traversé la feuille de données et regarda toutes les tables définissant les registres (comme celle sur la page 217 définissant le registre Confirm) et a écrit les instructions .equ pour eux et leurs morceaux. Donc si vous écriviez le code pour un nouveau microcontrôleur et vous n’avez pas le fichier include, que vous pouvez simplement utiliser la feuille de données et définir les bits et les registres que vous utilisez dans votre code en haut de votre programme avec quelques déclarations de .equ. En tout cas, permet de déplacer...

Il y a quelques choses dans le fragment de code ci-dessus qui ne sont pas dans le fichier include. Par exemple START, données et erreur. Les données sont le registre que vous souhaitez envoyer. L’erreur est une sous-routine qui vous pouvez écrire à attraper des problèmes avec la transmission et de traiter avec eux. START est la condition dans le registre d’état de TWI (TWSR) que vous souhaitez comparer avec. Cela change selon ce que vous faites. Par exemple, si vous êtes le maître microcontrôleur en mode émetteur puis tableau 22-2 donne les codes d’État que vous pouvez choisir de. De la même façon tableaux 22-3, 4-22 et 22-5 donne les codes d’État pour les modes récepteur maître, esclave émetteur et récepteur Slave respectivement. Ainsi selon quel microcontrôleur dans votre réseau, votre code est assemblé pour vous fixera début en conséquence.

Donc ce que vous devriez vraiment faire si vous voulez comprendre ce genre de choses est de passer par la code fragment par ligne, en levant les registres dans la feuille de données et de comprendre exactement ce qui se passe à chaque étape. Nous allons écrire notre propre version de l’extrait de code ci-dessus dans notre dé-roller et notre code 4 digits. Dans ce tutoriel, notre rouleau dés sera le maître et l’affichage à 4 chiffres sera l’esclave. Toutefois, à l’avenir, il n’y aura plus d’esclaves et il y aura plus de maîtres dont un qui s’exécute le spectacle et communique avec eux tous. Nous allons traverser le fonctionnement détaillé de la DHT lorsqu’il lit chaque ligne de notre code afin que nous sachions exactement ce qui se passe sur la ligne, et pourquoi nous devons les lignes de fil et exécuter les commandes que nous faisons. Toutefois, tout d’abord, nous devons regarder comment relier les deux microcontrôleurs et ce qui exactement a lieu à travers chacune des lignes de TWI.

Exercice 2: Rechercher les emplacements de mémoire de Registre dans la fiche technique pour le registre de contrôle de TW (Confirm), le registre de statut du TW (TWSR) et le registre de données de TW (TWDR). Examinez ensuite l’exemple de code donné ci-dessus qui est copié directement à partir de la feuille de données. Vous trouverez une erreur flagrante qui rend le code inutilisable sur le ATmega328P ? Pouvez vous comprendre les changements nécessaires pour le fixer ?

Articles Liés

Tutoriel d’assembleur AVR 11

Tutoriel d’assembleur AVR 11

Bienvenue au didacticiel 11 !Dans ce bref didacticiel, nous allons enfin construire la première partie de notre projet final.La première chose que vous devriez faire est d'aller à la toute dernière étape de ce tutoriel et voir la vidéo. Puis revenez
Tutoriel d’assembleur AVR 1

Tutoriel d’assembleur AVR 1

J'ai décidé d'écrire une série de tutoriels sur la façon d'écrire des programmes de langage d'assemblage pour le Atmega328p qui est le microcontrôleur utilisé dans l'Arduino. Si les gens restent intéressées, je vais continuer à mettre un une semaine
Tutoriel d’assembleur AVR 8

Tutoriel d’assembleur AVR 8

Bienvenue au didacticiel 8 !Dans ce bref didacticiel, nous allons prendre un peu d'une déviation de l'introduction de nouveaux aspects de la programmation en langage assembleur pour montrer comment déplacer nos composants de prototypage pour un circu
Tutoriel d’assembleur AVR 6

Tutoriel d’assembleur AVR 6

Bienvenue au didacticiel 6 !Tutoriel d'aujourd'hui sera un court où nous mettrons au point une méthode simple pour transmettre des données entre un atmega328p et un autre à l'aide de deux ports qui les relient. Nous puis prendre dés rouleau de tutori
Tutoriel d’assembleur AVR 9

Tutoriel d’assembleur AVR 9

Bienvenue au didacticiel 9.Aujourd'hui nous allons montrer comment piloter un afficheur 7 segments, mais aussi un affichage à 4 chiffres à l'aide de notre code en langage assembleur ATmega328P et AVR. Ce faisant cela que nous allons devoir prendre de
Tutoriel d’assembleur AVR 2

Tutoriel d’assembleur AVR 2

Ce tutoriel est une continuation de "tutoriel d'assembleur AVR 1"Si vous n'avez pas passé par 1 tutoriel, vous devez arrêter maintenant et faire celui-là en premier.Dans ce tutoriel, nous allons poursuivre notre étude de programmation en langage
Tutoriel d’assembleur AVR 7

Tutoriel d’assembleur AVR 7

Bienvenue au didacticiel 7 !Aujourd'hui nous allons voir la première comment faire pour nettoyer un clavier et ensuite montrer comment utiliser les ports d'entrée analogiques pour communiquer avec le clavier.Nous ferons cela en utilisant les interrup
Tutoriel d’assembleur AVR 5

Tutoriel d’assembleur AVR 5

Aujourd'hui nous allons regarder de plus près aux divers emplacements mémoire dans le microcontrôleur Atmega328p et voir si nous pouvons mieux comprendre comment les choses sont stockés, où ils sont stockés et comment les pointeurs et les tables de r
Tutoriel d’assembleur AVR 4

Tutoriel d’assembleur AVR 4

Bienvenue au didacticiel numéro 4 !Dans ce tutoriel, nous allons construire un circuit qui simulera l'enroulement des deux dés. Ensuite, nous allons tout d'abord écrire un programme de force brute qui fait le travail. Puis nous permettra de simplifie
Tutoriel d’assembleur AVR 3

Tutoriel d’assembleur AVR 3

Bienvenue au didacticiel numéro 3 !Avant que nous commencions, je tiens à faire un point philosophique. N'ayez pas peur d'expérimenter avec les circuits et le code que nous construisons dans ces tutoriels. Changer les câbles près, ajouter de nouveaux
MRETV - vidéo, stéréo Sound et beaucoup plus d’un Arduino standard !

MRETV - vidéo, stéréo Sound et beaucoup plus d’un Arduino standard !

MRETV - vidéo, stéréo Sound et beaucoup plus d'un Arduino standard !Maintenant mis à jour pour Arduino 1.6.6 novembre 2015 !Utiliser seulement deux résistances et deux diodes pour générer la vidéo plein écran. Texte 47 x 29 de 8 x 8 caractères, doubl
Comment charger des programmes à un Arduino UNO de Atmel Studio 7

Comment charger des programmes à un Arduino UNO de Atmel Studio 7

Dans ce court Instructable, nous allons apprendre à charger un programme à une carte Arduino UNO utilisant Atmel Studio au lieu de l'IDE Arduino. Cela est utile lorsque vous avez besoin élaborer un programme à l'aide de plusieurs fonctions avancées o
Star Trek sonnette Hack

Star Trek sonnette Hack

J'ai toujours été un fan de la Star Treks et comme tel, j'étais très excité lorsque mon colocataire ramené un panneau la comm série style Star Trek original. Je n'avais jamais vu l'un d'entre eux, mais une recherche rapide nous a pris sur le site de
Carte de développement pour microcontrôleurs Attiny84

Carte de développement pour microcontrôleurs Attiny84

Il s'agit d'une carte de développement pour microcontrôleur Attiny84. Tha Attiny84 puce possède 11 broches adressables avec l'IDE Arduino, 8k de mémoire flash pour le stockage de programme et 512 octets de mémoire vive disponible pour les variables d