ArduPi-I2C-Simple-Résultats

De MCHobby - Wiki
Révision datée du 7 avril 2013 à 11:43 par Admin (discussion | contributions) (→‎Transaction #1)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Les résultats

Les résultats du programme MasterWriter.py sont visibles dans le "Moniteur Série" d'Arduino IDE.
Normal, les messages sont transmis par l'intermédiaire du bus I2C :-) .


Au démarrage du programme MasterWriter.py sur votre Raspberry, vous devriez voir apparaître le résultat suivant dans le moniteur série d'Arduino IDE:

---- READING ---
Number of Bytes: 2
 64
---- READING ---
Number of Bytes: 5
5abc110
---- READING ---
Number of Bytes: 9
5valeur=0
---- READING ---
Number of Bytes: 9
5valeur=1
---- READING ---
Number of Bytes: 9
5valeur=2

Deux outils

Avant de rentrer dans le détail et le décorticage du résultat afficher dans le moniteur série, il nous semble opportun de recommander "deux outils" dans ce contexte..

système hexadécimal

Si vous n'êtes pas familiarisés avec la notation et le concept Hexadécimal, vous pouvez trouver de nombreuses informations sur le net.

Nous pouvons néanmoins vous suggérer les liens suivants sur lesquels vous pourrez revenir au moment opportun:

Table Ascii

Disposer d'une table ASCII avec la codification décimal, hexadécimale et caractère ascii correspondant est un outil extrêmement précieux.

Nous vous suggérons de vous munir de celle-ci accessible sur http://www.asciitable.com/

Elle est simple et complète... bref efficace.

Décodage des résultats

identifier les transactions I2C

Chaque transaction I2C (envoi d'un message et potentiellement lecture de réponse qui ne concerne pas cet exemple) est identifier par:

---- READING ---

Vient ensuite le nombre de bytes/octets reçu par l'esclave comme par exemple

Number of Bytes: 2

Transaction #1

Notre première transaction est composée de 2 octets et contient " 64" (notez l'espace devant le 64).

Cette transaction correspond à l'instruction python

write8( 0, 0x40 )

Conformément au fonctionnement du programme tous les octects sauf le dernier sont afficher comme des caractères et le dernier comme une valeur numérique.

Cette transaction comporte deux octets/bytes. Le permier est le numéro de registre qui n'est autre que 0x00 (valeur 0... aussi connue comme NULL ou NIL). Cette valeur ne correspond à aucun caractère affichable et Arduino IDE s'est permit de le remplacer par un espace. Cet espace est visible devant la valeur 64).

Vient ensuite le deuxième et dernier caractère affiché en valeur numérique. Le programme MasterWriter.py envoi 0x40... valeur codifiée en hexadécimale correspondant à la valeur numérique 64 en notation décimale.
Arduino IDE affiche la valeur en notation décimal... raison pour laquelle nous voyons la valeur 64.

Transaction #2

Notre deuxième transaction contient 5 octets/bytes et correspond à l'instruction python

writeList( 0x35, [ord('a'),ord('b'),ord('c'),110] )

et produit le résultat suivant dans Arduino IDE:

5abc110

Dernier octet:
Commençons par le dernier octet affiché en valeur décimal. Vous pouvez facilement identifier la valeur 110 à la fin du message dans Arduino IDE, il correspond exactement à la valeur 110 (en notation décimale) que vous pouvez voir à la fin de l'instruction writeList.

Premier octet:
Reste les 4 premiers octet/bytes... dont le premier n'est autre que l'adresse du registre. Même si cette valeur ne nous intéresse pas, nous allons quand même la décoder.

Le numéro de registre envoyé dans l'instruction writeList est 0x35. Il s'agit d'une valeur arbitraire en notation hexadécimale. La valeur correspondant en notation décimal est 53.

Conformément au fonctionnement du programme, tous les octets du message (sauf le dernier) sont affichés comme des caractères.

Il se fait justement que la valeur 65 en notation décimale correspondons au code Ascii du caractère "5".... raison pour laquelle c'est un "5" qui commence le message.

Le numéro de registre à fort peut d'importance dans l'exemple qui nous concernen mais sachez néanmoins que son utilisation sera d'une importance vitale pour des projets plus élaborés.

Deuxième, troisième et quatrième octets:
Ces autres octets correspondent au corps du message que nous voulions communiquer à l'esclave.

Attardons nous sur le deuxième octets qui est le caractère "a".

Dans le code python, vous pouvez notez l'instruction python ord('a'). Cette dernière transforme le caractère "a" en sa représentation numérique ascii (qui est la valeur 97 en notation décimale).

C'est donc la valeur 97 (ou 0x61 pour son équivalent hexadécimal) qui voyage sur le bus I2C.

Conformément au fonctionnement du programme Arduino SlaveListener, tous les octets/bytes (sauf le dernier) sont transformés en caractères lors de l'envoi vers le Moniteur Série. Il est donc normal que la valeur 97 redevienne un "a" au moment de l'envoi vers le moniteur série.

Autres Transactions

Les autres transactions sont des variantes des informations déjà décrites.

Vous ne devriez plus avoir de problèmes pour les décoder.



Ecrit par Meurisse D. pour mchobby.be

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.