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

Probleme liaison I2C PIC 16F877



  1. #1
    geiinantes21

    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. Publicité
  3. #2
    mperu

    Re : Probleme liaison I2C PIC 16F877

    Bonsoir,

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

    Cordialement,

    Michel

  4. #3
    geiinantes21

    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

  5. #4
    mperu

    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

  6. #5
    HULK28

    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...
    L’ignorance engendre plus fréquemment la confiance en soi que ne le fait la connaissance.

  7. A voir en vidéo sur Futura
  8. #6
    HULK28

    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.
    @+
    L’ignorance engendre plus fréquemment la confiance en soi que ne le fait la connaissance.

  9. Publicité
  10. #7
    HULK28

    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.
    L’ignorance engendre plus fréquemment la confiance en soi que ne le fait la connaissance.

  11. #8
    geiinantes21

    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.

  12. #9
    HULK28

    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.
    @+
    L’ignorance engendre plus fréquemment la confiance en soi que ne le fait la connaissance.

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. 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 anji dans le forum Électronique
    Réponses: 4
    Dernier message: 19/06/2006, 14h31
  5. Réponses: 3
    Dernier message: 01/11/2005, 22h45
Découvrez nos comparatifs produits sur l'informatique et les technologies.