- 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 ---
Modérateur : Jérémy
-
pic18f4580
Membre- Messages : 11
- Enregistré en : mai 2016
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
-
pic18f4580
Membre- Messages : 11
- Enregistré en : mai 2016
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!!!
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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 ?
-
pic18f4580
Membre- Messages : 11
- Enregistré en : mai 2016
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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
Le projet complet MAITRE
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
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, hein, jeremy ?
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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 !
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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).
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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 ..
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 52 invités