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

Étape 6: Comment la DHT transmet données ?

Maintenant, nous aimerions discuter exactement ce qui se passe lorsque la DHT transmet des données.

La première chose que nous transmettons est la « condition de départ ». Il s’agit d’un signal SDA baisse lorsque le signal SCL est élevé. Ainsi, si vous regardez les deux lignes, vous verrez le SCL monter et descendre entre 0 v et 5 v dans une onde carrée 490 fois par seconde. La ligne SDA, en revanche, il est là à 5V. Maintenant, tout d’un coup, la ligne SDA descend jusqu'à 0 v en même temps que la ligne SCL est dans la partie haute (5V) de son cycle. Il s’agit d’une condition de « départ ». Quand le voir esclave qui arrive il ressorts en action. Eh bien... Je dis « ressorts en action », mais étant donné que l’esclave de la fréquence du processeur est 16 MHz et la fréquence SCL est 490 Hz, que cela signifie que l’esclave a 32653 cycles de s’asseoir autour de se tourner son pouce avant le prochain cycle SCL arrive. Donc c’est difficilement « jaillissant en action », mais vous obtenez mon sens.

Lorsque l’esclave détecte une condition de départ, il surveille les lignes et démarre l’enregistrement sur l’impulsion d’horloge élevée suivante. Les 7 bits sera l’adresse de l’esclave que le maître veut lui parler. Ainsi, par exemple, supposons que je suis l’esclave et je vois SDA chute à 0V pendant une impulsion haute sur la ligne SCL. Alors je sais la transmission a commencé, je vois alors la valeur SCL aller à sa partie basse, puis retour jusqu'à haut encore, puis j’ai regarder SDA au cours de la partie haute et voir c’est bas (0V), cela signifie que le premier bit de l’adresse est 0, je puis attendre l’impulsion élevée suivante et encore regarder le SDA, encore une fois, je vois un 0V , le prochain bit de l’adresse est donc un autre 0, alors l’impulsion suivante je vois 5V sur la ligne SDA, donc je sais pas le bit d’adresse suivant est un 1, et cela continue jusqu'à ce que j’ai le 7 adresse bits. Une fois que j’ai l’adresse esclave ensemble 7 bit j’ai comparer avec ma propre adresse et si elle est différente, j’ai simplement ignorer la ligne TWI après cela. Si c’est le même que mon adresse alors je sais que le contrôleur maître veut me parler.

J’attends ensuite le pouls très prochain de la SCL haut et si SDA est un 1 alors je sais le maître veut lire de moi. Cela signifie que le maître est en Mode « Master récepteur ». Autrement si SDA était un 0 au lieu de cela il signifierait maître veut écrire pour moi. Cela signifie que le maître est en Mode « Master émetteur ». Maintenant je sais pas si je suis l’esclave étant adresse, et je sais pas si c’est une lecture ou une écriture. Cela a pris 8 cycles d’horloge et transmis 8 bits (7 bits d’adresse et un peu de lecture/écriture), ce qui est bon parce que je suis automatiquement stocker cet octet dans un registre de données appelé TWDR qui je vais utiliser pour comprendre si c’est mon adresse et si c’est une lecture ou une écriture.

Ensuite, je dois reconnaître que j’ai reçu qu’informations donc je tire la ligne SDA faible dans le prochain SCL haut du cycle (le 9ème cycle depuis le début), et cela indique le maître que j’ai tout et je suis prêt pour le prochain paquet de données.

Si je veux, à ce stade, je peux tirer la ligne SCL faible et juste le garder là aussi longtemps que je veux. Cela fera « une pause » choses jusqu'à ce que j’ai laisser aller haut encore une fois.

Une fois que les choses se poursuivent, suppose que c’était un signal d’écriture. Cela signifie que le maître m’enverra maintenant quelques octets de données. Alors j’ai regarder à nouveau la ligne SDA et recueillir les bits comme elles viennent. Cette fois, il y aura 8 bits (va de MSB LSB, c'est-à-dire du bit 7 à bit 0) et puis, si je les ai tous sans aucun problème, je ferai venir la ligne SDA au 0V à nouveau dans le 9ème cycle de reconnaître que je les ai eus. Cela peut durer indéfiniment, envoyant octet après octet. Chaque fois que je reçois un il sera automatiquement stocké dans TWDR et mon travail consiste à sortir de là le copier et faire quelque chose avec elle avant le prochain octet de données arrive et écrit dessus. Enfin, quand le capitaine a fini de m’envoyer des données, un état « arrêt » sera envoyé. C’est quand le maître tire la ligne SDA élevée au milieu de la partie haute du cycle horloge SCL. Quand je vois cela, j’ai terminé avec la DHT jusqu'à ce que je détecte une condition de départ suivie de mon adresse encore une fois.

Remarquez quelque chose. Quand le cycle d’horloge SCL est faible lorsque le contrôleur met en place le bit suivant. Par exemple si je veux envoyer un 1 à l’esclave dans l’horloge du prochain cycle, je me sers au moment où la ligne SCL est faible entre les cycles pour définir la ligne SDA soit haute ou basse de sorte que quand le prochain cycle élevé apparaît mon SDA ligne est déjà représentant le peu que je veux envoyer. Puis je laisse 0 ou 1 et que toute la phase haute jusqu'à ce que la valeur SCL remonte vers le bas et je peux ajuster à nouveau à mon peu de données nouvelles. En revanche, si je veux envoyer un démarrage ou un arrêt, j’ai mis en place un état initial au cours de la partie basse du cycle comme d’habitude, mais alors au lieu de juste laisser comme ça dans la prochaine phase haute, j’ai passer à l’état opposé au cours de la partie haute du cycle.

Par exemple, que je suis le maître et j’ai fini transmettant mes octets de données et je veux envoyer un signal d’arrêt à l’esclave. Puis lors du prochain cycle faible après que j’ai reçu l’accusé de réception pour mon dernier morceau de données je vais tirer la ligne SDA faible et attendre, puis au cours de la prochaine phase haute de la SCL j’ai va tirer la ligne SDA élevée. Cette transition indique à tout le monde sur la ligne qu’une condition d’arrêt s’est produite.

Vous devriez examiner la totalité des diagrammes aux pages 208 à 211 et comprendre les mécanismes des signaux TWI. Ils discutent également « starts répétées », arbitrage entre plusieurs masques et autres choses que je n’obtiendrai en étant donné que nous n’avez pas besoin eux encore.

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