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

Liaison I2C entre deux PIC (Maître-Esclace)
pic18f4580
Membre
Membre
Messages : 11
Enregistré en : mai 2016

#21 Message par pic18f4580 » mer. 11 mai 2016 17:48

Idem avec : (code du maitre)

Code : Tout sélectionner


    StartI2C
();        // fait SSPCON2bits.SEN=1
    WriteI2C(2);    // adresse de l'eclave, ça marche bien, l'esclave reçoit le "2"
    //IdleI2C();    --> ne change rien
    //RestartI2C();    // fait SSPCON2bits.RSEN=1  --> ne change rien non plus, l'esclave ne reçoit pas le "4"
    WriteI2C(4);
    StopI2C();        // fait SSPCON2bits.PEN=1


Liaison I2C entre deux PIC (Maître-Esclace)
pic18f4580
Membre
Membre
Messages : 11
Enregistré en : mai 2016

#22 Message par pic18f4580 » mer. 11 mai 2016 18:28

Pour l'histoire du bit de poids faible qui dit à l'esclave si d'est une requête ou une donnée, j'ai essayé avec l'adresse "3" au lieu de "2".
L'esclave ne reçoit que le premier message.
Tandis qu'avec l'adresse "2", il reçoit en boucle son adresse "2".

Je ne sais plus si je vous ai donné les paramètres d'initialisation

Code : Tout sélectionner


SSPADD 
= 249;                //20kHz avec un quartz à 40MHz
OpenI2C(MASTER,SLEW_OFF);    // Setup MSSP for master I2C
 


Code : Tout sélectionner


SSPADD                
= 2;    //adresse de l'esclave
OpenI2C(SLAVE_7,SLEW_OFF);    // Setup MSSP for slave I2C
 


Je tente avec SLEW_ON... ne change rien.

Dans le code de l'esclave, juste après avoir lu le buffer SSPBUF, j'ai tenté tout ça :

Code : Tout sélectionner


        
//relire SSPBUF tout de suite ou après une petite tempo ne change rien...il garde sa valeur, soit son adresse...
        //si je le mets à 0 après lecture, il reste à 0 tan que le prochain message n'est pas reçu...
        //si je mets SSPSTATbits.BF à 1 ou à 0 pour "effacer" SSPBUF, et que je relis SSPBUF dans la foulée, ou après tempo, il reste à sa valeur d'origine...
        //si je mets SSPCON1bits.SSPOV à 0, ça change rien...
        //si je mets SSPCON2bits.RCEN à 1, idem...
        //si je mets SSPCON2bits.ACKDT à 1 ou 0 et SSPCON2bits.ACKEN à 1 : rien...
        //AckI2C(); et NotAckI2C();bloquent la communication


J'ai aussi fait

Code : Tout sélectionner


ma_donnee_recue_du_maitre 
= ReadI2C();
 

...rien de neuf... c'est comme faire :

Code : Tout sélectionner


ma_donnee_recue_du_maitre 
= SSPBUF;


Sous MPLab, je tente :
alt/tools/5 visual initialiser
et j'ajoute l'I2C.
Options : Je coche Enable on statup, idem pour Enable interrrupt on startup.
Pour le maitre, Je coche tout, et mets 100kbs
Pour l'esclave , je mets l'adresse.--> rien
Je coche tout : rien...


J'essai avec

Code : Tout sélectionner

putcI2C(donnée);
...

J'ai une piste, ça bouge!!!

Liaison I2C entre deux PIC (Maître-Esclace)
Jérémy
Administrateur du site
Administrateur du site
Messages : 2123
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#23 Message par Jérémy » ven. 13 mai 2016 22:18

pic18f4580 a écrit :Source du message C'est curieux, les tabulations sont toujours mal alignées sur ce forum. Y a pas une astuce ?


tu veux parler dans le code ou dans le corps du message ?
Il te faut utiliser le Bouton tabulation

Le texte entre balise est codée différemment les balises ne fonctionnent pas , vue que c'est du code

Tu n'as pas un analyseur logique pour voir ce qui passe sur le BUS I2C ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Liaison I2C entre deux PIC (Maître-Esclace)
pic18f4580
Membre
Membre
Messages : 11
Enregistré en : mai 2016

#24 Message par pic18f4580 » mer. 18 mai 2016 11:55

C'est
dans le corps du message
quand je fais un copié collé depuis mon compilateur.

Tu n'as pas un analyseur logique
et non !

Liaison I2C entre deux PIC (Maître-Esclace)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1063
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#25 Message par paulfjujo » jeu. 18 mai 2017 17:44

bonsoir,

Le SCANALOGIC-2 . Je l'ai acheter chez lextronic, une cinquantaine d'€ je crois


A priori ikalogic ne le ferait plus ..
ils ont des modeles SQ25, 50,100 ...
ton modele correspondrait auquel ?

Liaison I2C entre deux PIC (Maître-Esclace)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1063
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#26 Message par paulfjujo » jeu. 18 mai 2017 18:13

Je ne vais peut etre pas aider "PIC18F4580" mais je propose ici
un teste de liaison I2C entre 2 pic 16F1847 .. qui devrait t'interesser (Jeremy).
Je crois que je vais acheter l'outil Scan logique SQ 50 , car j'ai quand meme galéré depuis plusieurs jours là dessus
pour enfin avoir un dialogue

Config Hardware :
2 planches à pain avec liaison UART 19200,8,N,1 sur les 2 modules ( via des cordons USB/TTL Prolific => 2 vue ecran Teratem)
la liaison I2C entre les 2 modules
j'ai utilisé la meme alim 3,6V (donc avec le meme 0V Gnd)

donc 1 PIC MAster I2C1 bus <---> 1 PIC ESCLAVE I2C bus
j'ai aussi un LCD2119 sur le bus I2C ..mais pas activé pour ce test là. ..à suivre donc AVEC le LCD comme 2em esclave
je suis parti d'un[url=1470586910_i2c_master_slave_mikroc_pic.zip]exemple libstock[/url] pour 16F887 .. (qui à mon avis doit avoir des bugs) .
mais qui est tout de meme tres formateur, car s'appuyant sur la note microchip AN 734 I2C Maitre -esclave.
J'utilise l'adresse I2C 0x40 (sur 8 bits ,donc R/W=0) , et non pas l "'adresse <<1" , qui est perturbant, par rapport
à l'adressage habituel utilisé avec d'autres composants esclave (LCD2119,DS1307..)
le bit R/W etant ,bien sur, manipulé en fonction de Ecriture=0 ou Lecture =1

La transposition 16F1847 n'est pas immediate .. UART specific , I2C1 specific .aun niveau des affectation PINS via registre APFCON0
le maitre envoi 2 valeurs à l'esclave
celui ci en fait l'adittion et retourne le resultat au Maitre

un rappel du Pinout

16F1847_pinout_2xDS18B20_Schem.jpg


Le projet complet MAITRE
PIC16F1847_I2CMaster_Protocol.zip

Code : Tout sélectionner


Presentation 
:
 Directory : C:\_MikroC\_MesProjets_MikroC
 
\_16Fxx_MASTER_SLAVE_I2C_MikroEPIC16F1847_I2CMaster_Protocol
 Projet 
: 16F1847_Slave_I2C_2017.mcppi
 PIC 
: 16F1847  FOSC:  Interne 8MHz
 Source MikroC 7.01 
: PIC16F1847_I2CMaster_Protocol_170518.C
 16F1847 en mode MAITRE I2C1 RB1
=SDA  RB4=SCL
 en liaison avec 16F1847 ESCLAVE I2C1 at 
@0X40

Init 
(RAZ) des 3 registres PIC ESCLAVE
  0
+  1=  1      SUCCES!
  1+  2=  3      SUCCES!
  2+  3=  5      SUCCES!
  3+  4=  7      SUCCES!
  4+  5=  9      SUCCES!
  5+  6= 11      SUCCES!
  6+  7= 13      SUCCES!
  7+  8= 15      SUCCES!
  8+  9= 17      SUCCES!
  9+ 10= 19      SUCCES!
 10+ 11= 21      SUCCES!
 11+ 12= 23      SUCCES!
 12+ 13= 25      SUCCES!
 13+ 14= 27      SUCCES!
 14+ 15= 29      SUCCES!
 15+ 16= 31      SUCCES!
 16+ 17= 33      SUCCES!
 17+ 18= 35      SUCCES!
 



le projet complet ESCLAVE
PIC16F1847_I2CSlave_Protocol.zip


l'esclave

Code : Tout sélectionner

Presentation :
 Directory : C:\_MikroC\_MesProjets_MikroC
 
\_16Fxx_MASTER_SLAVE_I2C_MikroE\PIC16F1847_I2CSlave_Protocol
 Projet 
: 16F1847_Slave_I2C_2017.mcppi
 PIC 
: 16F1847  FOSC:  Interne 8MHz
 Source MikroC 7.01 
: PIC16F1847_I2CSlave_Protocol_170518.C
 16F1847 en mode ESCLAVE I2C1 at 
@ 0x40

I2C register status 
: 00        01
**I2C register status : 01      02
*I2C register status : 02       03
**I2C register status : 03      04
**I2C register status : 04      05
**I2C register status : 05      06



il serait interressant de voir , ce que l'outil Scan Logic peut donner comme renseignement, :sifflotte: hein, jeremy ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Liaison I2C entre deux PIC (Maître-Esclace)
Jérémy
Administrateur du site
Administrateur du site
Messages : 2123
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#27 Message par Jérémy » jeu. 18 mai 2017 19:53

Bonsoir à tous,

Oui Paul tu as carrément raison, cela va fortement m’intéressè .

A l'heure actuelle j'ai le cul par dessus tête .... . Pour la partie PIC, je dois finir mon projet avec mes modules radio et mon écran tactile ... ensuite des tutos notamment sur les capteurs de température ! ensuite encore plusieurs projets en phase de réflexion !
Mais l'I2C est quasiment incontournable dans les projets que j'aime réaliser, alors oui.... cela va bien me servir !

Pour l'analyseur logique c'est effectivement essentiel quand on se frotte aux différents protocole de communication .
La dessus je pense que celui que je possède est un peu juste au niveau de la fréquence échantillonnage . Tu ne peux pas décoder des signaux sur de longues périodes ( genre 3 secondes) . Le logiciel mérite aussi quelques corrections, mais ca reste bien utile. La prochaine fois je prendrais un peu plus pêchus ! . Attention l'impedance réglable est un plus pour ne pas déclencher par inadvertance des portes logiques !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Liaison I2C entre deux PIC (Maître-Esclace)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1063
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#28 Message par paulfjujo » lun. 22 mai 2017 16:15

bonsoir Jeremy et à tous !

je viens juste de commander le ScanaQuad SQ50 .. 118,30€ TVA et port compris.
j'espere qu'il sera suffisant ..
Je le testerai sur ma liaison Maitre esclave. I2C
avec un 2em esclave (un PIC12F1840) et le LCD2119 I2C deporté ..
detinataire d'affichage commun aux 3 pic ?
.. pour verifier ce que cet outil peut apporter comme aide et infos.

proposition ou cooperation,aide, serait vivement appréciée.

à "PIC18F4580"
pourrais-tu ISOLER ta partie de code maitre esclave I2C qui t'embete
pour l'essayer sans l'environnement CAN et autre, avec un autre PIC (ex 18F45K22).

Liaison I2C entre deux PIC (Maître-Esclace)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1063
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#29 Message par paulfjujo » lun. 5 juin 2017 12:27

Bonjour,

rajout du LCD2119 sur le MAITRE ..
quelques echanges, au niveau Byte,mot,ascii et flottant

table d'echange du PIC16F1847 ESCLAVE

Code : Tout sélectionner


Le PIC16F1847 ESCLAVE a une table d
'echange définie sur 32 registres (bytes)

2 data value  8 bits  data#1, data#2
1    <-  byte from MASTER
2    <-  byte from Master
result of  data#1 + data#2
3    ->  byte to Master 

Analogue Value
4    <-  byte from Master   lecture EA1 MSB
5    <-  byte from Master   lecture EA1 LSB

Message Ascii 16 cars
6        ->  byte to Master 
7        ->  byte  to Master 
...         ......
19      ->  byte  to Master 
20       -> byte  to Master 

return conversion EA1 Matser en Float Volts 
22       ->  byte  to Master 
23       ->  byte  to Master 
24       ->  byte  to Master 
25       ->  byte  to Master 

Le PIC Maitre pilote aussi un LCD I2C at @0x74
affiche le result de la conversion en volts effectuée par l'
esclave, mais mesure (en points) par le maitre
et la mesure de temperature faite par l
'esclave est affichée sur la 2em ligne du LCD , par le maitre



Mes premiers test du Scanquad SG50 montrent deja que c'est un outil TRES interessant.
mais pas si evident à voir l'ascii 'pur' dans la trame, meme avec l'option affichage data en Hexa+ascii !

plus de details surma Pageweb
pour ne pas trop encombrer.

détails à developper ici ?



details à suivre ..


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot] et 2 invités