Étape 7: Mettre en œuvre les routines I²C
Il est très important de se rappeler, que nous parlons d’un périphérique esclave ici, nous allons garder cela à l’esprit.
Si vous décidez d’écrire des fonctions pour cela, ce sont les fonctions que vous devez implémenter.
void AckI2C (void) Cette fonction est chargée de définir le bit ACK et en l’envoyant. Reconnaître est envoyé pour chaque octet, qui a été reçue avec succès par notre esclave
void IdleI2C (void)
Rend le bus deviennent inactives
void CloseI2C (void) Ferme le bus I²C, aucune autre transmission est fait, ce n’est qu’un OpenI2C() s’appelle
unsigned char ReadI2C (void)
Lit le bus et retourne la valeur qu’elle reçoit
unsigned char DataRdyI2C (void)
Une transaction de données complètes sur les signaux
unsigned char WriteI2C (unsigned char)
Écrit un octet dans le bus I²C
Sub OpenI2C (unsigned char, unsigned char)
Ouvre et configure le module MSSP pour communication I²C
Comme je l’ai déjà dit, je vais utiliser la feuille de données bref pour que cela fonctionne : j’activer SSP1 interruption et traiter tout I²C associés dans la routine d’interruption du service. Étant donné que cette application n’est pas le moment critique, cela nous ne donnera pas trop de problèmes. Découvrez ma routine d’interruption du service qui gère la communication I²C :
J’ai fait quelques captures de communication avec mon analyseur logique :
Être heureux de voir ce travail, j’ai envoyé le numéro 6500 par I²C à l’autre PIC, réduit en deux morceaux.
6500 h 1964 en hexadécimal, c’est ce que nous devrions voir quand le progressbar se remplit. Et c’est un match !
Spot sur nouveau ! J’ai dû couper celles-ci en deux morceaux, pour les rendre plus faciles à voir, il y a des dizaines de microsecondes entre les transmissions de données à deux.
Une paquet comme représentation de l’échange de données :Une image du Conseil d’administration affichant les choses nous lui commande :
Le PICKIT fournit actuellement sur le circuit. Je me souviens avoir lu à ce sujet, que le courant maximal qu’il peut fournir est environ de 30 mA. Je dis, c’est une très bonne consommation pour un circuit avec 32 LED-s !
Ceci fait, nous avons un PIC, qui répond aux commandes de I²C. Le nouveau périphérique dont nous venons de créer sera utilisé dans notre bande de mesure par ultrasons.