16F887 : programmes indépendants
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

16F887 : programmes indépendants



  1. #1
    invite47d60888

    16F887 : programmes indépendants


    ------

    Bonjour à tous,

    Voilà : pour mon TFE, je dois utiliser un 16F887 que je programme avec EasyPic6 de Microchip.
    J'ai réalisé plusieurs programmes indépendants, s'occupant chacun d'une tâche particulière. Pour le moment, j'ai un "void interrupt(void)" qui est un programme à part, qui gère donc les interruption et qui fonctionne, et les résultats seront affichés sur un GLCD 128x64.

    Donc, j'ai un "void InitGLCD()" indépendant également de mon "void main()".

    Seulement voilà : je ne parviens pas à faire appel à mon programme d'initialisation GLCD depuis mon "main".

    Code:
    int i;
    
    void main(void) {
    InitGLCD(void);
    INTCON=0xD9;
    
    ANSEL = 0;              // Permet de configurer les entrées en digital
    ANSELH = 0;
    
    TRISD = 0x00;
    TRISB = 0xff;
    TRISC = 0x00;           // LES PORTS B,C ET D SONT CONFIGURES EN SORTIE
    TRISA = 0xFF;           // LE PORT A EST EN ENTREE
    PORTD=0;                // LES PORTS B,C ET D ONT UNE VALEUR DE DEPRART DE 0
    PORTC=0;
    
    while (1) {
    PORTD=0;
    for (i=0;i<255;i++)
        {
        i++;
        delay_ms(1000);
        PORTD=i;
        }
    i=0;
    }
    }
    Pour le moment, le programme ici me permet de tester les interruptions et le GLCD, j'ai le code complet, mais je ne vais pas le mettre ici, c'est trop long !

    Donc, ici, je fais appel à "InitGLCD()" qui est en fait un "void InitGLCD()".

    Mais ca ne fonctionne pas : je n'appelle pas mon InitGLCD !
    Code:
    char GLCD_DataPort at PORTD;
    
    sbit GLCD_CS1 at RB0_bit;
    sbit GLCD_CS2 at RB1_bit;
    sbit GLCD_RS  at RB2_bit;
    sbit GLCD_RW  at RB3_bit;
    sbit GLCD_EN  at RB4_bit;
    sbit GLCD_RST at RB5_bit;
    
    sbit GLCD_CS1_Direction at TRISB0_bit;
    sbit GLCD_CS2_Direction at TRISB1_bit;
    sbit GLCD_RS_Direction  at TRISB2_bit;
    sbit GLCD_RW_Direction  at TRISB3_bit;
    sbit GLCD_EN_Direction  at TRISB4_bit;
    sbit GLCD_RST_Direction at TRISB5_bit;
    // End Glcd module connections
    
    void InitGLCD(void) {
    int i=0;
    char *text, *text2;
    text="essais";
    text2="test";
      ANSEL  = 0;                                    // Configure AN pins as digital
      ANSELH = 0;
      C1ON_bit = 0;                                  // Disable comparators
      C2ON_bit = 0;
    
      Glcd_Init();                                   // Initialize GLCD
      Glcd_Fill(0x00);                               // Clear GLCD
      Glcd_Fill(0x00);                                           // Clear GLCD
      Glcd_Set_Font(Font_Glcd_System5x7, 5, 7, 32);        // Change font
      Glcd_write_Text (text,0,0,1);
      Glcd_Set_Font(Font_Glcd_System3x5, 3, 5, 32);        // Change font
      Glcd_write_Text(text2,0,1,1);
    
    
    }
    Quelqu'un pourrais-t-il m'aider ??

    Merci à vous !!

    Geoffroy

    -----

  2. #2
    invite89303051

    Re : 16F887 : programmes indépendants

    Bonjour
    Normalement, il faut que tes différents fichiers soient déclarés dans ton projet.
    Les différents fichiers sont compilé, charge ensuite au linker de faire son travail.
    Qu'obtiens tu comme erreur ?
    Cordialement

  3. #3
    invite47d60888

    Re : 16F887 : programmes indépendants

    Salut,

    Je me suis absenté de l'après-midi, désolé de répondre si tard !

    Voilà ce que j'ai fait : j'ai ajouter un fichier au programme principal :



    Dans la source, j'ai donc les différents programmes. Mais sont-ils bien configurées ?? et comment les appeler depuis mon main ??

    Merci à vous pour votre aide précieuse.
    Images attachées Images attachées  

  4. #4
    invitef86a6203

    Re : 16F887 : programmes indépendants

    TRISB = 0xff;
    ça c est en entrée pas en sortie !

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

    Re : 16F887 : programmes indépendants

    Pour l'appeler, il faut écrire initGLCD() et non initGLCD(void)

    On ne redéfinit pas les types des paramètres lors de l'appel

  7. #6
    invite47d60888

    Re : 16F887 : programmes indépendants

    Merci pour les remarques ! mais il ne faut pas tenir compte des remarques dans le programme, car il à tellement été modifier qu'ils ne correspondent plus à la réalité des chose !! mais le port B est bien définis en 0xff, en entrée... Merci quand même pour cette judicieuse remarque !!

    Pour l'appel de fonction, lorsque je met "InitGLCD()", avec ou sans le "void", il me renvois un message d'erreur à la compilation du genre :
    "Undeclared identifier 'InitGLCD' in expression"...

    Je pense donc qu'il doit être configuré quelque part dans le main de manière à pouvoir l'utiliser plus tard, mais je ne vois pas où et ne trouve pas de programme tout fait sur internet !!

    Si quelqu'un sait m'aider...

    Merci à vous pour vos réponses !!

    Geoffroy

  8. #7
    invitef86a6203

    Re : 16F887 : programmes indépendants

    le problème n'est pas le commentaire mais la déclaration du LCD
    sbit GLCD_CS1 at RB0_bit;
    sbit GLCD_CS2 at RB1_bit;
    sbit GLCD_RS at RB2_bit;
    sbit GLCD_RW at RB3_bit;
    sbit GLCD_EN at RB4_bit;
    sbit GLCD_RST at RB5_bit;

    si c est en entrée ça ne fonctionne pas.

    pour la fonction je ne vois pas de .H , il faudrait donc declarer la fonction comme prototype en début de prog.

    int i;
    void InitGLCD(void);

    void main(void) {

  9. #8
    invite47d60888

    Re : 16F887 : programmes indépendants

    Bonjour,

    Voilà, j'ai refait le programme, et j'ai, cette fois-ci, utilisé "Add files to project", et j'ai sélectionner tout les fichiers du GLCD et maintenant, j'ai une autre erreur qui apparait : "'GLCD_data port' Identifier redefined".

    pourtant, le programme GLCD fonctionnait !



    Je n'ai plus, dans le programme, de définition du port D :

    Code:
    int i;
    
    
    void main(void) {
    //InitGLCD();
    INTCON=0xD9;
    
    ANSEL = 0;              // Permet de configurer les entrées en digital
    ANSELH = 0;
    
    TRISB = 0xFF;
    TRISC = 0x00;
    TRISA = 0x00;
    PORTC=0;
    
    
    while (1) {
    PORTA=0;
    for (i=0;i<255;i++)
        {
        i++;
        delay_ms(1000);
        PORTA=i;
        }
    i=0;
    }
    }
    Ce programme sert juste à un test d'appel !

    Merci...
    Images attachées Images attachées  

  10. #9
    invite89303051

    Re : 16F887 : programmes indépendants

    Bonjour

    Si tu as l'indication "GLCD_data port" identifer redefined, c'est que tu as du définir GLCD_data port dans 2 fichiers sources différents.
    fait une recherche de GLCD_data port dans tout tes fichiers, et élimine le coupable.
    Cordialement

Discussions similaires

  1. Probleme USART 16f887
    Par invite591e1a94 dans le forum Électronique
    Réponses: 1
    Dernier message: 29/01/2011, 17h15
  2. PIC 16f887 et MCP3208
    Par invitee507dba1 dans le forum Électronique
    Réponses: 11
    Dernier message: 26/03/2010, 12h05
  3. 16f887 a 16f636
    Par inviteb12aee8d dans le forum Électronique
    Réponses: 7
    Dernier message: 09/06/2009, 08h07
  4. Programmer un 16f887 en jdm ?
    Par invite60243f9b dans le forum Électronique
    Réponses: 3
    Dernier message: 18/04/2008, 20h04
  5. Mplab / 16f887 Tqfp
    Par Toufinet dans le forum Électronique
    Réponses: 5
    Dernier message: 10/02/2007, 13h54
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...