Probleme liaison I2C PIC 16F877
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Probleme liaison I2C PIC 16F877



  1. #1
    invitecd367060

    Exclamation Probleme liaison I2C PIC 16F877


    ------

    Bonjour,
    Nous sommes en train de réaliser une carte électronique permettant de commander 4 afficheurs 7segments. Nous utilisons un PIC 16877A. Nous avons branché les broches SCL et SDA sur le port C du microcontroleur. Nous avons une erreur lorsque l'on compile. En effet, nous avons un problème de librairie. Nous ne pouvons pas utilisesr les variables utilisées dans : reg_pic16f87x.h

    Voici notre bout de programme :

    #include <reg_pic16f87x.h>

    unsigned short por[4];

    int tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6 D,0x7D,0x07,0xFF,0x6F}; /* valeur de 0 à 9 des afficheurs */
    int adresse1,adresse2,data1,data2; /* variable pour l'envoi i2C */


    void interrupt() {
    TMR0 = 0; // reset timer
    INTCON = 0x20; // clear TMR0IF and set TMR0IE
    }//~

    void envoi_score_i2c(void)
    {
    i2c_start();
    i2c_Wr (adresse1);
    i2c_Wr (data1);
    i2c_stop();
    i2c_start();
    i2c_Wr (adresse2);
    i2c_Wr (data2);
    i2c_stop();
    }


    void affichage_7seg(void)
    {
    adresse1=0x40; /* afficheur gauche rouge */
    data1= tab[0];
    adresse2=0x42; /* afficheur droite rouge */
    data2=tab[1];
    envoi_score_i2c();
    }

    void main() {

    OPTION_REG = 0x80; //pull up
    TMR0 = 0;
    INTCON = 0xA0; // disable PEIE,INTE,RBIE...; enable T0IE
    PORTA = 0X02; // Permet de commander les leds pour l'affichage de la manche
    while(1){
    affichage_7seg();
    }
    }

    Merci d'avance

    -----

  2. #2
    invite819d0622

    Re : Probleme liaison I2C PIC 16F877

    Bonsoir,

    Quelle est l'erreur donnée par le compilateur?

    Cordialement,

    Michel

  3. #3
    invitecd367060

    Re : Probleme liaison I2C PIC 16F877

    En faite il nous met sa :

    from C:/Program Files/Mikroelektronika/mikroC/Examples/EasyPic4/P16F877A/7seg4cifS/Seg4Cif_Static.c: 1: #include <reg_pic16f87x.h>

    c:/program files/mikroelektronika/mikroc/include/reg_pic16f87x.h:9: error: Unknown #directive "byte" #byte PORTA = 0x05


    PORTA étant une variable utilisé dans le fichier: reg_pic16f87x.h

  4. #4
    invite819d0622

    Re : Probleme liaison I2C PIC 16F877

    Bonsoir,

    Est-ce que le fichier "reg_pic16f87x.h" fait partie de la distribution du compilateur? L'erreur ressemble a un type de données inconnu de ce compilateur.

    Michel

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

    Re : Probleme liaison I2C PIC 16F877

    Bonsoir,

    mperu a mis le doigt sur le problème, mikroC n'a pas besoin de cette directive pour effectuer sa compilation.
    Il faut donc l'enlever.
    Lorsque vous créez le projet vous devez déclarer le PIC utilisé, le compilateur indiquera au préprocesseur le bon fichier à prendre, vous devez également indiquer la valeur du quartz, et lui indiquer le répertoire où sont stockés les fichiers nécessaires au build.
    Il y stockera les fichiers résultants du build ainsi que le hex dès que la compilation aura réussie.
    Par contre vous allez avoir d'autres soucis, il y a des choses qui ne vont pas dans votre programme, notamment dans l'interruption.
    Dernière modification par HULK28 ; 16/03/2009 à 20h53. Motif: orthographe...

  7. #6
    invite03481543

    Re : Probleme liaison I2C PIC 16F877

    Code:
    unsigned short por[4];
    
    int tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0xFF,0x6F}; /* valeur de 0 à 9 des afficheurs */
    int adresse1,adresse2,data1,data2;                       /* variable pour l'envoi i2C */
    
    
    void interrupt() {
    
      if(TMR0IF)
       {
      TMR0 = 0;                   // reset timer
      TMR0IF=0;              // clear TMR0IF and set TMR0IE
       }}//~
    
    void envoi_score_i2c(void)
    {
          i2c_start();
          i2c_Wr (adresse1);
          i2c_Wr (data1);
          i2c_stop();
          i2c_start();
          i2c_Wr (adresse2);
          i2c_Wr (data2);
          i2c_stop();
    }
    
    
    void affichage_7seg(void)
    {
          adresse1=0x40;                               /* afficheur gauche rouge */
          data1= tab[0];
          adresse2=0x42;                               /* afficheur droite rouge */
          data2=tab[1];
          envoi_score_i2c();
    }
    
    void main() {
    
      OPTION_REG  = 0x80;         //pull up attention à 1désactivé
      TMR0        = 0;
      INTCON      = 0xA0;         // disable PEIE,INTE,RBIE...; enable T0IE
      PORTA       = 0X02;            // Permet de commander les leds pour l'affichage de la manche
      while(1){
             affichage_7seg();
             }
    }
    Je pense qu'il y a d'autres problèmes sur l'I2C le double start m'étonne aussi dans votre routine.
    Que vous donne la compilation maintenant?
    Vous utilisez un SAA1064 pour vos afficheurs 7 segments?
    adresse1, etc se contente d'un simple char.
    @+

  8. #7
    invite03481543

    Re : Probleme liaison I2C PIC 16F877

    Autre chose le portA n'est pas bien configuré, il est en analogique par défaut, il faut mettre CMCON=0x07 et TRISA=0, et ADCON1=0x06 pour avoir tout le port en digital.

  9. #8
    invitecd367060

    Re : Probleme liaison I2C PIC 16F877

    Bonjour,
    Merci de vos réponses.
    Pour les afficheurs 7 segments, nous utilisons un PCF 8574.
    Nous avons compilé le programme de HULK28, celui-ci nous donne une erreur :
    Assigning to non -lvalue[TMR0IF]
    pour la ligne:
    TMR0IF=0; // clear TMR0IF and set TMR0IE

    On veut tout d abord que l affichage fonctionne correctement, pour le portA ce n'est pas un souci, c'est secondaire.

    Merci de votre aide.

  10. #9
    invite03481543

    Re : Probleme liaison I2C PIC 16F877

    Oui, j'ai renommé les registres pour mes propres applications c'est pour cela.
    Dans ce cas tu remplaces TMR0IF par INTCON.T0IF et ça compilera cette fois.
    @+

Discussions similaires

  1. Probleme PIC 16f877 & taille de ram
    Par joseph4008 dans le forum Électronique
    Réponses: 11
    Dernier message: 21/07/2009, 09h59
  2. Problème de programmation PIC 16F877, SAA 1064 et afficheurs 7 segments
    Par invite64e12149 dans le forum Électronique
    Réponses: 6
    Dernier message: 18/05/2009, 09h33
  3. [Pic] Problème compilation MPLAB 16F877... Merci
    Par CED_TV_JVC dans le forum Électronique
    Réponses: 2
    Dernier message: 27/06/2008, 10h21
  4. pic 16F877 et le protocole I2C
    Par invitee2e07f1d dans le forum Électronique
    Réponses: 4
    Dernier message: 19/06/2006, 14h31
  5. Communication I2C entre PIC et ordinateur / Problème d'interruption
    Par invite68d5b092 dans le forum Électronique
    Réponses: 3
    Dernier message: 01/11/2005, 22h45
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...