É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.