Dernière mise à jour le 16/03/2019

Présentation


Il s’agit du même montage que celui ci Communication I2C – Mode Ecriture – PIC 18F4550 (Maitre) -> PIC 18F4550 (Esclave), sauf que j’utilise non pas un PIC mais un Arduino en tant que maitre. Des précaution sont à prendre entre les échanges de donnée Arduino et PIC 18F4550 surtout lorsque l’Arduino est configuré en tant que maitre et le PIC18F4550 en tant qu’esclave!

Arduino (Maitre) – PIC 18F4550 (Esclave) – Problème d’adressage !!!


Nous allons aborder le fonctionnement entre un Arduino qui est le maitre, et le PIC 18F4550 qui sera l’esclave. Comme vous avez dû le remarquer dans le titre du paragraphe j’ai indiqué « Problème d’adressage » et oui !! il y’en à bien un !


Prenons un exemple, lorsque vous avez configuré le PIC 18F4550 avec pour adresse 0xA8 (soit 10101000b (en binaire) ou bien 168d (en décimal)) et que vous demandez a votre Arduino d’envoyer des données I2C à l’esclave qui possède l’adresse 0xA8 vous allez vous apercevoir que rien ne va fonctionner comme prévu. Étrange vous ne trouvez pas ?Hum.. que ce passe t’il encore ?


Nous avons ici ce qu’on appel un problème de compatibilité entre un Arduino et un PIC, en réalité, lorsque vous adressé 0xA8 au PIC 18F4550, l’Arduino lui devra devra envoyer l’adresse 0x54 étrange non vous ne trouvez pas?


Programme de l’esclave (PIC 18F4550) en MikroPascal:

SSPADD = 0xA8; // Configuration de l’adresse de l’esclave du PIC 18F4550 (Correspond à l’héxadécimal 0x54 pour ARDUINO en mode ecriture)


Programme du maitre (Arduino) en C:

Wire.beginTransmission(0x54); // début de la transmission au périphérique d’adresse)


Côté PIC 18F4550 – En binaire 0xA8 = 10101000b
Côté Arduino – En binaire 0x54 = 01010100b


La différence entre les 2 c’est que si vous regarder bien les nombres en binaires, il y’a eu un décalage de 1 bit vers la droite, il en résulte que si nous adressons par exemple 0x70 à un PIC ce qui donne 01110000 en binaire nous allons donner comme adresse à l’Arduino 00111000b (soit 0x38). Conclusion avec un décalage de 1 bit et pas plus par la droite!!, nous pouvons désormais communiquer entre un Arduino et un PIC.

Schéma


Logiciel du PIC et Arduino


Ci-dessous les réglages dans le menu”Edit Project” (MikroPascal ou MikroC) à réaliser. je n’ai pas continué les autres captures d’écran mais tout le reste est à desactiver “Disabled”.


Programme MikroPascal du PIC 18F4550 – MikroPascal


Programme MikroC du PIC 18F4550 – MikroC

Prototype


Oui prototype réalisé avec Platine EasyPic7 et Arduino le voici le voilà!! on remarque les 4 données via les leds qui sont:

– L’adresse pour le PORTA
– 1ère donnée pour le PORTC de la platine EasyPic7 (1 leds allumée) = 0x02h
– 2ème donnée pour le PORTD de la platine EasyPic7 (2 leds allumées)= 0x03h
– 3ème donnée pour le PORTE de la platine EasyPic7 (3 leds allumées) = 0x07h


Pour finir on remarque bien les 2 fils qui partent de l’Arduino.

Circuit(s) imprimé(s)


Aucun.

Historiques


16/03/2019
-1er mise à disposition