Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

PIC18F452 - Maître-esclave I2c



  1. #1
    lianoos

    PIC18F452 - Maître-esclave I2c


    ------

    Bonjour,

    J'ai besoin de votre aide car ça fait un sacré moment que je sèche sur mon projet. Je dois effectuer une communication I2c maitre-esclave entre 2 MCU PIC18F452 mais ça coince... En effet, en exécutant pas à pas côté maître, j'ai pu constater que le maître ne reçoit jamais d'acquittement. Pourriez-vous m'aiguiller svp ? Petite précision, mon code est en langage C.

    Code côté Maître :

    #include "scI2C_PIC18.h"
    #include <pic18.h>

    #define I2C_SLAVE_WRITE 0xDE /* 11011110b */
    #define I2C_SLAVE_READ 0xDF /* 11011111b */
    #define I2C_TC74CMD 0x54 /* character 'T' */
    #define I2C_ADCMD_0 0x30 /* character '0' */
    #define I2C_ADCMD_7 0x37 /* character '7' */

    /****************************** *****************************/
    int main(void)
    /* Main application
    ****************************** ******************************/
    {
    char l_cValue = 0; // To stock the result

    i2c_init(1); // Master mode
    i2c_start();
    i2c_write(I2C_SLAVE_WRITE);
    if (ACKSTAT) // test received ack bit state *********** DEJA ICI, IL NE RECOIT AUCUN ACQUITTEMENT...
    {
    i2c_stop();
    return 0; // bus device responded with NOT ACK
    }

    i2c_write(I2C_TC74CMD);
    if (ACKSTAT) // test received ack bit state
    {
    i2c_stop();
    return 0; // bus device responded with NOT ACK
    }

    i2c_restart();
    i2c_write(I2C_SLAVE_READ);
    l_cValue = i2c_read();
    i2c_nack();
    i2c_stop();

    return 0;
    }



    Côté esclave :

    #include "scAD_PIC18.h"
    #include "scI2C_PIC18.h"
    #include "scTC74_I2C.h"

    #define I2C_TC74CMD 0x54 /* character 'T' */
    #define I2C_ADCMD_0 0x30 /* character '0' */
    #define I2C_ADCMD_7 0x37 /* character '7' */

    /****************************** *****************************/
    int main(void)
    /* Main application
    ****************************** ******************************/
    {
    char l_cCmd = 0;

    i2c_init(0); // Slave mode

    while(1)
    {
    // RECEPTION -----------------------------
    i2c_read_slave(); // Receive the address

    l_cCmd = i2c_read_slave(); // Receive the command

    if (l_cCmd == I2C_TC74CMD)
    {
    l_cCmd = 66;
    }

    else
    l_cCmd = 88;


    // TRANSMISSION -----------------------------
    i2c_write_slave(l_cCmd);
    }

    return 0;
    }


    Dans la fonction Init du côté esclave, j'ai mis l'adresse 0x6F dans SSPADD et j'ai bien mis RC3 et RC4 à 1.

    Si besoin je peux joindre le corps des fonctions.

    Est-ce qu'avec ceci vous pourriez déjà éventuellement m'indiquer si une grossière erreur est visible ?

    Un grand merci d'avance.

    -----

  2. Publicité
  3. #2
    RISC

    Re : PIC18F452 - Maître-esclave I2c

    Bonjour Lianoos,

    Quel matériel utilises-tu pour déboguer ?
    Vérifie car certains outils n'acceptent pas les interruptions en mode pas-à-pas.....

    Sur le site Microchip j'ai trouvé cela :
    http://ww1.microchip.com/downloads/e...int.readme.pdf

    http://www.microchip.com/stellent/id...pnote=en023325

    http://www.aqra.ca/Communication-I2C-entre-2-PIC
    http://www.aqra.ca/spip.php?page=art...&id_article=62

    Un exemple en assembleur :
    http://www.piclist.com/techref/microchip/w-r_i2c.gif

    Bonne chance

  4. #3
    lianoos

    Re : PIC18F452 - Maître-esclave I2c

    Hello,

    Alors j'utilise 2 cartes de PICDEM 2 PLUS avec un MPLAB ICD 2 pour le débuggage In-Circuit.

    Je pense que les interruptions fonctionne en mode pas à pas car précédemment j'avais développé un petit bout de code permettant de récupérer une température sur le TC74 via une liaison I2C (mais donc uniquement côté Master).

    Je vais jeter un coup d'oeil à tout ces liens mais j'aimerais bien pouvoir continuer sur mon morceau de code au lieu de reprendre un autre exemple. Je continue de chercher ... Si des idées vous viennent.

    Merci bcp !

  5. #4
    RISC

    Re : PIC18F452 - Maître-esclave I2c

    Salut,

    Un des liens que je t'ai donné implémente une liaison comme la tienne (entre 2 PIC18F452) :

    http://www.aqra.ca/Communication-I2C-entre-2-PIC

    Je pense qu'en comparant ton code à ce code (qui semble très court) tu devrais trouver des pistes ;=)

    Vérifie bien également que les résistances de pull-up sur les lignes de la liaison I2C sont correctement calculées et que ta liaison entre les 2 micros soit courte... (cf au manuel de l'I2C de Philips pour les détails).

  6. A voir en vidéo sur Futura
  7. #5
    lianoos

    Re : PIC18F452 - Maître-esclave I2c

    Vérifie bien également que les résistances de pull-up sur les lignes de la liaison I2C sont correctement calculées et que ta liaison entre les 2 micros soit courte... (cf au manuel de l'I2C de Philips pour les détails).

    Merci beaucoup RISC pour tes réponses.

    J'y ai repassé l'après-midi et j'ai constaté qu'il n'y avait vraiment aucune information qui était passée du master au slave et réciproquement (ni acquitement, ni interruption, ni start, que dalle)... donc j'aimerais effectivement bien faire un petit contrôle côté électrique. Le seul HIC c'est que je ne connais pas grand chose en électronique .

    J'ai trouvé le manuel Philips http://1100f.free.fr/tout_sur_le_bus_i2c.htm et j'ai commencé à le parcourir.
    Pourrais-tu juste m'éclairer sur ce que signifie ta phrase "... résistances de pull-up sur les lignes de la liaison I2C sont correctement calculées" et si ce n'est pas trop compliqué comment je peux effectuer ce contrôle ?

    Côté liaison des deux cartes, voici ce qui a été effectué :
    J'ai simplement relié avec deux petits fils électriques (17cm chacun) les trous RC PORT 3 (SCL) entre maître/esclave, le RC PORT 4 (SDA) entre maître/esclave. J'ai également relié le GND des 2 cartes avec un plus gros fil et plus long (je ne sais pas si ça à une influcence env 35-40cm).

    La liaison doit-elle être plus courte ?

    Un grand merci d'avance.

  8. #6
    RISC

    Re : PIC18F452 - Maître-esclave I2c

    La description officielle du standard I2C est ici :
    http://www.nxp.com/acrobat_download/...8/39340011.pdf
    (en particulier le chapitre 16)

    Une note d'application de NXP (ex Philips) sur le bus I2C :
    http://www.nxp.com/acrobat_download/.../AN10216_1.pdf

    Je pense que tu devrais quand meme voir des signaux affaiblis. A ta description, j'ai l'impression que tes ports ne sont pas du tout activés...
    Es-tu sur de ton initialisation en mode I2C ?
    Tu fais appel à des librairies. Regardes en mode pas à pas avec fenetre "View > Disassembly listing" dans MPLAB pour voir si les bits des ports sont bien initialises en mode I2C.

    Je tacherais de compiler ton code si je trouve un moment...il se fait tardddddddd
    a+

  9. Publicité
  10. #7
    lianoos

    Unhappy Re : PIC18F452 - Maître-esclave I2c

    Hello Risc,

    Au cas où tu trouves un moment pour y jeter un petit coup d'oeil, je te joint mon code complet (esclave et maître) que je viens à l'instant de nettoyer au plus.

    Je n'utilise aucune librairie i2c uniquement la librairie pic18. Les fonctions i2c sont correctes côté maître car elles ont été testé pour relever une température du TC74.

    A vrai dire je doute un peu de mon installation car j'ai testé un code qui théoriquement fonctionnait et sur mes 2 cartes, il y a à nouveau aucun aquittement côté maître.
    Fichiers attachés Fichiers attachés

  11. #8
    Moezzz

    Re : PIC18F452 - Maître-esclave I2c

    Salut,
    J'ai simplement relié avec deux petits fils électriques (17cm chacun) les trous RC PORT 3 (SCL) entre maître/esclave, le RC PORT 4 (SDA) entre maître/esclave. J'ai également relié le GND des 2 cartes avec un plus gros fil et plus long (je ne sais pas si ça à une influcence env 35-40cm).
    pour la realisation electronique il faut ajouter deux resistances de pull up pour les lignes SDA et SCL sinon ca ne fonctionnra pas. lorsque tu utilise le module I2C les entree sortie correspondantes sont configurées en drain ouvert et donc ne peuvent fournir du +5V

  12. #9
    RISC

    Re : PIC18F452 - Maître-esclave I2c

    Citation Envoyé par Moezzz Voir le message
    Salut,

    pour la realisation electronique il faut ajouter deux resistances de pull up pour les lignes SDA et SCL sinon ca ne fonctionnra pas. lorsque tu utilise le module I2C les entree sortie correspondantes sont configurées en drain ouvert et donc ne peuvent fournir du +5V
    Moezz,

    Lianoos utilise la carte PICDEM2+ :
    http://ww1.microchip.com/downloads/e...ide_51275c.pdf

    On peut voir sur le schéma (page 19) que cette carte incorpore un capteur de température I2c (TC74) et aussi une E2PPROM I2C (24LC256).
    Il y a déjà 2 résistances de pull-up (R8 et R9) sur les lignes SCL et SDA qui font 4.7K.

    Lianoos,

    Si tu connectes 2 cartes PICDEM2+ ensemble tu as donc 6 composants actifs et 4 résistances sur le bus I2C...:
    2 x E2PROM 24LC256
    2 x TC74
    2 x PIC18F452
    2 résistances 4.7K en parallèle sur SDA (une sur chaque carte)
    2 résistances 4.7K en parallèle sur SCL (une sur chaque carte)

    Je pense que la situation devient très compliquée....

    Je te conseille

    a1/ monter des supports intermédiaires de 40 broches et de "couper les broches SDA et SCL" afin que le micro zau dessus du 2e support ait toutes les connections SAUF les broches I2C

    ou

    a2/ de "lever" les 2 broches SCL et SDA du micro en les mettant à l'horizontale et de souder dessus (plus délicat que a/) tes fils. Si tu fais cela des 2 cotés et que tu rajoute 2 résistances 4.7K (une sur SCL et une sur SDA) sur une des cartes, tu auras normalement quelque chose de propre au niveau sortance...

    Si mon explication n'est pas claire, n'hésite pas...

  13. #10
    lianoos

    Re : PIC18F452 - Maître-esclave I2c

    Hello,

    Me revoilà...

    RISC, je n'ai pas testé ce que tu m'as dit car mon prof, suite à ton message, m'a dit de simplifier la chose en faisant ceci :

    - On a dessoudé le thermomètre TC74 de la carte Master.
    - Dessoudé l'E2PROM de la carte Slave.
    - Dessoudé les résistances pull-up (R8 et R9) de la carte Master.

    Ca ne fonctionne toujours pas. J'ai testé mon code permettant de retourner la température du thermomètre TC74 (donc uniquement code master vu que le code slave est "géré" automatiquement par le TC74) en le mettant dans le MCU de la carte n'ayant plus de thermomètre en vue d'accéder à la carte ayant encore le thermomètre (branchement RC3-RC3, RC4-RC4 et GND-GND) et ça ne fonctionne pas... Donc c'est preuve cette fois que la source du problème est bien électronique.

    A partir de l'état actuel, que me conseilles-tu ?

  14. #11
    lianoos

    Re : PIC18F452 - Maître-esclave I2c

    Ah et côté informatique, j'ai regardé comme tu m'avais dit le code assembleur, je ne sais pas comment faire pour voir si les ports sont bien activés, voici les 2 lignes qu'il me génère quand j'active le TRISC (et une seconde c'est un essai pour voir ce que ça fait quand j'active le PORTC).

    65: TRISC = TRISC | RC3RC4_MASK;
    0062 0E18 MOVLW 0x18
    0064 1294 IORWF 0xf94, F, ACCESS

    66: PORTC = PORTC | RC3RC4_MASK;
    0066 0E18 MOVLW 0x18
    0068 1282 IORWF 0xf82, F, ACCESS
    J'ai contrôlé les résistances de mes pull-up (côté slave car de l'autre côté elles n'y sont plus).
    Quand RC PORT 4 n'est pas branché entre les 2 cartes, R8 et R9 valent bien 4.69K.

    Sur RC PORT 3 et 4, il n'y a aucune tension qui circule par contre.

  15. #12
    RISC

    Re : PIC18F452 - Maître-esclave I2c

    Lianoos,

    Récapitulons :

    1/ on veut être sur que le hard semble bon
    (que le micro fonctionne normalement et qu'aucune broche n'est endommagée)

    2/ S'il est bon c'est très probablement qu'il ya un problème du coté logiciel.

    1/ Alors le plus simple à ce stade pour vérifier le hard est d'utiliser l'exemple fourni avec la carte PICDEM2+.
    Cette carte est livrée avec un CD-ROM qui contient un programme d'exemple qu'on peut compiler et flasher pour le PIC16 ou le PIC18F452. Ce programme permet de lire la température et donc de vérifier que les broches I2C sont opérationnelles. Bien sur dans ton cas si les composants dessoudés sont détruits ce test devient difficile. C'est pourquoi je t'avais suggéré de faire une modif non "destructive" ... et facile à enlever.
    Si tu ne peux plus faire cela. Déconnectes les 2 cartes, et je te conseille d'écrire un programme très simple qui change l'état des broches I2C de 1 à 0 et inversément. Tu l'exécute en pas à pas et tu vérifie au scope que les ports changent bien. De cette manière on les vérifie et on peut passer à la phase logicielle.

    Ai-je bien compris que tu ne vois absolument aucune activité sur les borches I2C ?

    2/ Je vais jetter un oeil à ton code (c'est toujours celui fourni précédemment ?) si quelquechose me saute aux yeux dès que j'ai un moment...

  16. Publicité
  17. #13
    RISC

    Re : PIC18F452 - Maître-esclave I2c

    J'ai esayé de compiler et j'ai une erreur. Il me manque le fichier header pic18.h

    Quel compilateur utilises-tu ?

    Le fichier pic18.h est-il celui de Microchip renommé (p18f452.h) ?

  18. #14
    lianoos

    Re : PIC18F452 - Maître-esclave I2c

    Hello,

    Merci pour ton aide précieuse.

    J'utilise le compilateur HI-TECH, excuse-moi j'avais oublié de préciser. Je ne suis pas sûre que ça corresponde exactement. L'inverse c'est à dire mettre pic18.h au lieu de p18f425.h ne fonctionne pas, j'ai testé. Je ne trouve pas la librairie p18f425.h sur mon ordi.

    Pour le test non destructeur, en effet... Mais n'y connaissant rien en soudage, peut-être était-ce une erreur.

    En effet, je n'observe aucune activité sur le I2C.

    Je vais essayer de suivre tout d'abord ton conseil 1/.

  19. #15
    RISC

    Re : PIC18F452 - Maître-esclave I2c

    Ok,

    J'utilise habituellement le compilateur C18 de Microchip mais parfois aussi HiTech.
    Le fichier "p18f452.h" que j'ai mentionné est fourni avec le compilateur C, C18 de Microchip.

    Ce compilateur est gratuit et téléchargeable ici :
    http://www.microchip.com/c18
    La "student edition" est utilisable pendant 60 jours sans limitations et apres ces 60 jours, seule l'optimisation en taille ou en vitesse disparait (aucune importance pour les projets). On peux donc continuer à s'en servir sans problème après 60 jours ;=).

    Peux-tu poster ton fichier pic18.h ?

  20. #16
    lianoos

    Re : PIC18F452 - Maître-esclave I2c

    Le fichier pic18.h est-il suffisant ?
    Je l'ai zippé il ne passait pas sinon.

    J'aurais bien utilisé l'autre compilateur mais j'ai mon cahier des charges m'imposait celui d'Hi-Tech, c'est pour cela....
    D'ailleurs pour ceux qui auraient des problèmes avec le compilateur HI-TECH, n'oubliez pas d'activer le compilateur car après x jours, il ne fonctionne plus (période d'essai terminée), mais au lieu de simplement le mentionner, il génère une erreur d'impossiblité de compiler, et on cherche, on cherche, on cherche ... on ne trouve pas l'erreur du programme jusqu'à ce qu'on comprend que...
    Fichiers attachés Fichiers attachés

  21. #17
    lianoos

    Re : PIC18F452 - Maître-esclave I2c

    Hello,

    Je reviens à la charge...

    Alors j'ai fait relativement de l'avance dans mes recherches. Contrairement à ce que je croyais (j'en étais d'ailleurs convaincue), les 2 cartes fonctionnent électriquement.

    J'ai lancé mon code de mesure de température depuis la carte sans thermomètre et il m'affiche sur le LCD la température de l'autre carte. Mais évidemment dans cette solution, je n'utilise pas de code i2c slave vu qu'il est géré par le thermomètre directement.

    Premier bug constaté : Comme une patate, je chargeais le programme sur la carte en passant par le mode debug (pour la carte slave) et donc quand je faisais du pas à pas côté maître, le côté slave ne démarrait pas, fallait évidemment le charger en mode programming.

    Deuxième bug constaté, RISC, tu avais bien raison de me mettre en garde côté exécution pas à pas. Ca ne fonctionne effectivement pas. Maintenant que j'utilisais le LCD et plus aucune connexion sur le PC, alors là ça m'a permis de faire fonctionner mon code mesure TC74.

    Alors le problème est donc au niveau de mon code. J'aimerais bien trouver l'erreur de la communication master/slave de mon code.
    J'ai essayé d'exétuer le code du site http://www.aqra.ca/Communication-I2C-entre-2-PIC (comme tu m'avais conseillé RISC), j'ai donc du changer de compilateur (MCC) mais.... Aucune led ne s'allume ou ne s'éteint sur mes 2 cartes.

    Faut-il faire une manipulation spéciale, démarrer le code des MCU en même temps, etc ?? A ne rien y comprendre. Et chaque code que je testes pour cette communication i2c ça fait idem : rien ne se passe.

    Et mon code d'origine, il bloque côté maître et côté slave sur l'instruction if SSPIF (donc le flag d'interruption n'est jamais mis à 1, pourquoi ???).

    Si vous pouviez m'aider. Le délais de la fin de mon projet arrive au bout et j'ai jusqu'à dimanche pour trouver l'erreur

    Un grand merci.

  22. #18
    guanglier

    Re : PIC18F452 - Maître-esclave I2c

    Bonjour,

    le C18 de microchip je l'avais utilisé, et apres divers plantages (printf parex ) je l'ai lache, il a des comportements vraiment louches des fois ..

    pour le I2C il faut que tu passes par une interruption, c'est obligatoire pour faire du slave, je n'ai plus mes codes pour l'instant mais si tu le souhaites tu peux m'envoyer un mail pour me rappeler de les chercher . Dans tous les cas le pb d'ack sera résolu lorsque tu passeras a l'interruption avec l'I2C , apres pour la lecture il y a quelques subtilités mais bon...

    bonne chance ! (dfa_radar@yahoo.fr)

  23. Publicité

Discussions similaires

  1. Transaction I2C entre deux pics 18f4550 (maître-esclave)
    Par lynal1 dans le forum Électronique
    Réponses: 9
    Dernier message: 12/04/2011, 15h17
  2. Multi-prise maitre-esclave qui ne coupe pas?
    Par Burt67 dans le forum Dépannage
    Réponses: 1
    Dernier message: 10/04/2007, 19h31
  3. routine I2C esclave pour basic stamp
    Par lucs dans le forum Électronique
    Réponses: 5
    Dernier message: 06/03/2007, 16h47
  4. grveur dvd maitre ou esclave ???
    Par MeMyki dans le forum Matériel - Hardware
    Réponses: 35
    Dernier message: 13/07/2004, 14h51
  5. maitre/esclave
    Par weeman dans le forum Matériel - Hardware
    Réponses: 10
    Dernier message: 28/03/2004, 15h49
Découvrez nos comparatifs produits sur l'informatique et les technologies.