Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Configuration liaison I2C entre deux PICs !
Jérémy
Administrateur du site
Administrateur du site
Messages : 2727
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » mer. 27 janv. 2016 13:30

Bonjour à tous,

J'ouvre un nouveau pour dissocier les différents sujets traités. en règle général j'ai l'habitude communiquer en I2C avec des composants qui possèdent déjà une adresse bien définie par le constructeur ( enfin pour moi). Mais alors, comment faire une liaison entre deux PICs ?

D'après mes lectures, le maitre n'a pas besoin d’être configuré car lui seul doit connaitre les adresses des esclaves . Les esclaves n'ont pas besoin de savoir son adresse. En effet soit le maitre va chercher les infos qui l'intéresse ( mis à la disposition par l'esclave), soit il envoie des infos aux esclaves .

La tache compliquée est donc de donner une adresse I2C à un PIC esclave . Y'a pas tant de sujet que ca, qui traite de cela sur la toile.

J'ai donc épluché la DS de mon PIC ( que vous trouverez aussi en haut de chaque posts ), il s'agit du PIC18F46K22 qui se trouve sur ma carte EasypicV7 qui jouera le rôle de l'esclave, et celui de mon écran un PIC18FJ qui jouera celui du maitre .

Sur le PICécran j'utilise le I2C2 pin RD5 et RD6 qui vous trouverez ici en page 37
Et sur le PICeasy ce sera l'I2C1 en broche RC3 et RC4 .
Les masses sont communes.

Je regarde donc du coté de la DS du PICeasy pour lui affecté uen adresse I2C . PIOUUUUUU !!!! chaud les marrons pour comprendre .

Pouvez vous infirmez ou confirmer ma reflexion .
Rendez-vous en page 260 de la DS

Je dois donc déclaré une adresse sur 7 bit ( pourquoi 7 plutot que 10 je sais pas), pour déclarer une adresse je dois lui dire qu'elle genre d'adresse il attend pour faire la comparaison :
Donc dans le SSP1CON1: je dois mettre les bit 3-0 à 0110 pour I2C slave mode 7 bit

Ensuite rendez-vous en page 265:
Je dois désigné l'adresse avec le registre : SSP1ADD oui je place les bit 7-1 à ma convenance ? le bit 0 est inutilisé .

Pensez vous qu'avec ca , je peux créer ma liaison ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Configuration liaison I2C entre deux PICs !
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#2 Message par satinas » mer. 27 janv. 2016 14:44

C'est toujours le maître qui parle le premier, dans ton cas c'est l'Easypic qui doit être le maître, puisqu'il est censé envoyer des ordres à la carte lcd.
Les adresses sont sur 7 bit, cela fait 128 esclaves max. Cela permet au maître d'envoyer en un seul octet (0baaaaaaac) une adresse d'esclave et une commande, c = 1 pour lire l'esclave, c = 0 pour lui envoyer des données.

Y aurait pas une librairie MikroC dans un coin qui fait tout le boulot i2c ?

Configuration liaison I2C entre deux PICs !
Jérémy
Administrateur du site
Administrateur du site
Messages : 2727
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » mer. 27 janv. 2016 15:24

C'est toujours le maître qui parle le premier, dans ton cas c'est l'Easypic qui doit être le maître, puisqu'il est censé envoyer des ordres à la carte lcd.

Dans la réalité, je ne sais pas encore qui sera le maitre ou non . Pour l'entrainement et pour des raisons de simplicité j'ai opté pour mettre celui ci en esclave et l'écran en maitre, car c'est en appuyant sur l’écran que l'on envoie une info .


Ok pour les 7 bits. Merci.
Oui il existe une librairie MikroC toute faite , mais c'est dans la plupart du temps dialoger avec un accessoire. Y'a pas grand chose a s'occuper dans ce cas ; l'adresse d'envoi et la donnée . Mais la ca se corse, car je dois envoyer une valeur, puis la recevoir la stcokée et l'affcihée .

Je pense que je dois faire un peu comme la liasion serie en UART non ?
A savoir detecté par INT un envoi et stockée la valeur recue dans un tableau .
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Configuration liaison I2C entre deux PICs !
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#4 Message par satinas » mer. 27 janv. 2016 15:52

Si la librairie MikroC ne prévoie pas le mode slave, il faut le gérer en bas niveau, et je trouve toujours que c'est plus compliqué que l'UART. L'i2c, c'est fait pour piloter des périphériques, pourquoi tu veux compliquer les choses.
Les modules bluetooth, esp8266, ... utilisent l'UART/RS232 (50 ans d'existence) car c'est le plus pratique pour communiquer à la fois en host to host, ou host to device, et surtout full duplex.

Configuration liaison I2C entre deux PICs !
Jérémy
Administrateur du site
Administrateur du site
Messages : 2727
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#5 Message par Jérémy » mer. 27 janv. 2016 16:11

pourquoi tu veux compliquer les choses.

Je ne sais pas trop regarde mon Organigramme , je ne sais pas quoi faire comme liaison ?
Il se peut qu'il y ai d'autre équipements a raccordés, avec l'I2C c'est plus pratique non ? mais je suis ouvert a toutes propositions ( concernant la comm hein ??!! :D ).
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Configuration liaison I2C entre deux PICs !
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#6 Message par satinas » mer. 27 janv. 2016 16:18

Ton pic a 2 ports série I2C et 2 ports série SPI. 1 seul port I2C et un seul port SPI sont utilisables car ils partagent leurs pins.
Ton pic a 2 ports série UART, les 2 sont utilisables, et ils ne figurent pas clairement dans ton schéma, alors ...

Tu as tout de même 2 ports série sur ton pic qui glandouillent, C6/C7 et G1/G2. Un port série ça peut allez très vite si les 2 horloges sont précises.
Attention de pas relier 2 pins configurées en output, griller un pic c'est pas trop grave, une carte à 100$ c'est plus embêtant.


fallait bien lire :)

Configuration liaison I2C entre deux PICs !
Jérémy
Administrateur du site
Administrateur du site
Messages : 2727
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#7 Message par Jérémy » mer. 27 janv. 2016 21:12

Bon ca veut pas !!!

Voici la partie émission . je vous passe les détails, qui je pense ne sont pas nécessaire . j'ai créer un Bouton sur mon écran . Quand j'appuie dessus , cette fonction est lancée .
Sur l'écran je me suis connecté aux broches RD6 et RD7 correspondant a l'I2C N°2.
J'arrive sur les broches RC3 et RC4 de mon PIC18F46K22 qui correspondent a l'I2C N°1 . j'ai la présence des pull up à Vcc sur les lignes.

Code : Tout sélectionner

void Tx_I2C_OnClick() {
     TFT_Set_Font(TFT_defaultFont, CL_YELLOW, FO_HORIZONTAL);
     TFT_Write_Text("TX_I2C", 130, 45);  // On ecrit un mot  sur l'écran pour verifier l'execution de la fonction
     
     I2C2_Init
(100000);
     delay_ms(100);

     I2C2_Start();              // départ de l'I2C
     I2C2_Wr(0x78);             // adresse de l'esclave
     I2C2_Wr('A');             // Donnée à écrire
     I2C2_Wr(0x0D);
     I2C2_Stop();               // Arret de l'I2C

     delay_ms(500);

     TFT_Set_Brush(1, CL_BLACK, 0, LEFT_TO_RIGHT, CL_BLACK, CL_WHITE); // On efface le texte par un rectangle noir
     TFT_Rectangle(130,48, 200,60);
}


Mon text témoin s'affiche bien, me démontrant que ma fonction est bien lancée . et il s'efface également , je sais ainsi que ma fonction à bien été exécutée .
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Configuration liaison I2C entre deux PICs !
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 51
Enregistré en : août 2015
Localisation : Dans l'est de la France

#8 Message par sylvain54 » jeu. 28 janv. 2016 09:00

Salut Jeremy,

En regardant ton organigramme, il y a un truc que je ne comprends pas :?:
Pourquoi veux tu rajouter un second pic derrière le PIC18FJ50 ? Le second PIC se trouve t'il au même endroit (télécommande ?) ou se trouve t'il sur l'embarqué ?

Sylvain

Configuration liaison I2C entre deux PICs !
Jérémy
Administrateur du site
Administrateur du site
Messages : 2727
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#9 Message par Jérémy » jeu. 28 janv. 2016 10:32

Bonjour,

Oui le second PIC se trouve au même endroit a savoir sur la télécommande . Je précise que j'ai déjà fabriquer un drône de ce type mais avec des picaxes ( je salue les personnes du forum au passage).
Le pic 18FJ ne s'occupe que des données peu importantes, je souhaite avoir un PIC dédié a la transmission de données, pour etre le )lus rapide possible et gérer au mieux .
J'avais rencontrés des problèmes d’interruption et de détection de perte de communication. La priorité N°1 c'est d'envoyer les infos du pilotage ( notamment l’arrêt du moteur).
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Configuration liaison I2C entre deux PICs !
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 51
Enregistré en : août 2015
Localisation : Dans l'est de la France

#10 Message par sylvain54 » jeu. 28 janv. 2016 17:08

Ok, j'avais donc bien compris le schéma :mrgreen:
Bon, par contre, je n'ai jamais essayé la com en I2C entre deux PIC, je ne vais pas pouvoir t'aider beaucoup. Je vais regarder si dans mes bouquins j'ai quelque chose la dessus.

A +


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : paulfjujo et 96 invités