[Programmation] Débutant MPLAB X
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Débutant MPLAB X



  1. #1
    ark89

    Débutant MPLAB X


    ------

    Bonjour à tous, voilà, je débute sur MPLAB X, ou du moins, çà fait des années que je ne m'y suis plus intéressé !

    Je rencontre des difficultés pour l'organisation des dossiers des projets, pour les déclarations et pour la syntaxe ce qui me crée beaucoup d'erreur quand je veux compiler !

    Par exemple, sur ce petit programme :

    Code:
    
    #include "xc.h"
    #include "delays.h"
    
     char T[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x47,0x7F,0x6F};
        int i;
        
    
    void main(void) {
        
        trisb=0x00;
        portb=0x00;
        
        while(1){
            for(i=0;i<10;i++){
                portb=T[i];
                delay_ms(1000);
            }
        }
        
        
        
        return;
    }
    1 - Ou dois'je placer les fichiers xc.h et delays.h, dois-je les placer dans le dossier du projet ou les laisser où ils sont ?
    2 - Dois-je les importer dans documents importants, fichiers sources ou bibliothèque ou les 3 ?
    3 - Ai-je des fautes de syntaxe ?

    Je vous joins les logs du build !

    Code:
    CLEAN SUCCESSFUL (total time: 3ms)
    make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
    make[1]: Entering directory 'D:/ELECTRONIC/PROJETS/segment_1.X'
    make  -f nbproject/Makefile-default.mk dist/default/production/segment_1.X.production.hex
    make[2]: Entering directory 'D:/ELECTRONIC/PROJETS/segment_1.X'
    "D:\ELECTRONIC\bin\xc8-cc.exe"  -mcpu=16F84A -c   -mdfp="C:/Program Files/Microchip/MPLABX/v5.45/packs/Microchip/PIC16Fxxx_DFP/1.2.33/xc8"  -fno-short-double -fno-short-float -O0 -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,+mem,-hex,-file  -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto     -o build/default/production/Main.p1 Main.c 
    ::: advisory: (2049) C99 compliant libraries are currently not available for baseline or mid-range devices, or for enhanced mid-range devices using a reentrant stack; using C90 libraries
    In file included from Main.c:10:
    ./delays.h:32:18: error: invalid storage class specifier in function declarator
    void Delay10TCYx(PARAM_SCLASS unsigned char);
                     ^
    ./delays.h:21:22: note: expanded from macro 'PARAM_SCLASS'
    #define PARAM_SCLASS auto
                         ^
    ./delays.h:39:19: error: invalid storage class specifier in function declarator
    void Delay100TCYx(PARAM_SCLASS unsigned char);
                      ^
    ./delays.h:21:22: note: expanded from macro 'PARAM_SCLASS'
    #define PARAM_SCLASS auto
                         ^
    ./delays.h:46:18: error: invalid storage class specifier in function declarator
    void Delay1KTCYx(PARAM_SCLASS unsigned char);
                     ^
    ./delays.h:21:22: note: expanded from macro 'PARAM_SCLASS'
    #define PARAM_SCLASS auto
                         ^
    ./delays.h:53:19: error: invalid storage class specifier in function declarator
    void Delay10KTCYx(PARAM_SCLASS unsigned char);
                      ^
    ./delays.h:21:22: note: expanded from macro 'PARAM_SCLASS'
    #define PARAM_SCLASS auto
                         ^
    Main.c:18:5: error: use of undeclared identifier 'trisb'
        trisb=0x00;
        ^
    Main.c:19:5: error: use of undeclared identifier 'portb'
        portb=0x00;
        ^
    Main.c:23:13: error: use of undeclared identifier 'portb'
                portb=T[i];
                ^
    Main.c:24:13: warning: implicit declaration of function 'delay_ms' is invalid in C99 [-Wimplicit-function-declaration]
                delay_ms(1000);
                ^
    1 warning and 7 errors generated.
    (908) exit status = 1
    nbproject/Makefile-default.mk:107: recipe for target 'build/default/production/Main.p1' failed
    make[2]: Leaving directory 'D:/ELECTRONIC/PROJETS/segment_1.X'
    nbproject/Makefile-default.mk:91: recipe for target '.build-conf' failed
    make[1]: Leaving directory 'D:/ELECTRONIC/PROJETS/segment_1.X'
    nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
    make[2]: *** [build/default/production/Main.p1] Error 1
    make[1]: *** [.build-conf] Error 2
    make: *** [.build-impl] Error 2
    
    BUILD FAILED (exit value 2, total time: 458ms)
    En vous remerciant par avance !

    -----

  2. #2
    ark89

    Re : Débutant MPLAB X

    Bon, j'ai apporté quelques modif au programme, mais j'ai un problème avec la fonction
    Code:
    delay()
    !

    Code:
    #include "xc.h"
    #include <delay.h>
    
    
     char T[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x47,0x7F,0x6F};
        int i;
        
    
    void main(void) {
        
        TRISB=0x00;
        PORTB=0x00;
        
        while(1){
            for(i=0;i<10;i++){
                PORTB=T[i];
                delay(1000);
            }
        } 
        
        return;
    }
    J'ai IC8 v2.32
    Dernière modification par ark89 ; 03/04/2021 à 08h00.

  3. #3
    RISC

    Re : Débutant MPLAB X

    Salut,

    Tu trouveras toutes les fonctions de la librairie delay dans le manuel du compilateur XC8.
    Il faut impérativement ajouter la vitesse du PIC sur ta carte pour que les délais soient calculés par le compilateur :

    Code:
    #define _XTAL_FREQ 32000000                  // Fosc  frequency 32MHz  for _delay()  library
    #include <delay.h>
    ...
    __delay_ms(50);   // 50ms
    Tout est expliqué ici

    a+
    Dernière modification par RISC ; 07/04/2021 à 23h58.

  4. #4
    ark89

    Re : Débutant MPLAB X

    Merci RISC, mais il semble que mon PIC ne supporte pas la fonction delay() !

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

    Re : Débutant MPLAB X

    Salut,

    Quel PIC utilises-tu ?
    A quelle fréquence ?
    Tous les PICs 8 bits peuvent utiliser la librairie delay puisqu'elle utilise juste des boucles
    As-tu lu mon post précédent...regarde la syntaxe à utiliser et cela fonctionnera ;=)

    Je te recommande, pour avoir moins d'erreur de changer le standard de C99 à C90 dans les options globales du compilateur...
    Le C99 est plus à cheval sur les déclarations et génère plus d'erreurs...

    a+

  7. #6
    ark89

    Re : Débutant MPLAB X

    Salut RISC, bon j'ai changé le standart en C90 !

    J'utilise un PIC 18f14k22

    4 Mhz

    Le problème c'est que je ne trouve pas delay.h pour l'incorporer dans ma biblio, j'ai juste un delays.h !!!

    Mais la fonction delay_ms () ne fonctionne pas avec !

    Mercipour ton aide !

  8. #7
    ark89

    Re : Débutant MPLAB X

    Bon j'y ai passé du temps, mais çà va me servir pour la suite, j'ai programmé l'utilisation des interruption avec timer0, c'est très précis en plus !

    Code:
    #include "xc.h"
    
    #pragma config FOSC = HS
    #pragma config BOREN  = OFF
    #pragma config CPD   = OFF
    #pragma config MCLRE  = OFF
    #pragma config HFOFST = ON
    #pragma config STVREN = ON
    #pragma config LVP    = OFF
    #define XTAL_FREQ 4 /* frequence en MHz (4MHz)*/
    
    void Init(void){
        TRISA = 0b00001100;
        TRISB = 0b00000000; 
            
        INTCONbits.GIE=1;
        INTCONbits.PEIE=1;
        INTCONbits.TMR0IE=1;    
        INTCONbits.TMR0IF=0;
        T0CON=0b11000111;
        
    }
    
    
    int compteur = 0;
    void __interrupt () test (void) {
    
      if(INTCONbits.TMR0IF){
         INTCONbits.TMR0IF=0;
         compteur++;
         if(compteur==15){
             compteur=0;
             PORTBbits.RB6=~PORTBbits.RB6;
         }
      }
    }
    
    void main(void){
        
        Init();
        while(1){
            
        };
        
    }

  9. #8
    RISC

    Re : Débutant MPLAB X

    Salut,
    Plusieurs choses. Corriger :

    #include <xc.h>

    La bibliothèque de delais sera intégrée automatiquement.

    ensuite, il faut faire attention à la syntaxe...corriger :

    #define _XTAL_FREQ 4000000 /* frequence en Hz 4000000*/

    et ensuite utiliser les fonctions de la librairie

    __delay_ms(500); // 500 ms
    __delay_us(100); // 100 us

    Attention, il y a des valeurs maximum à ne pas dépasser (voir la documentation du compilateur : c:\Program Files\Microchip\xc8\v2.32\docs \MPLAB_XC8_C_Compiler_User_Gui de_for_PIC.pdf

    a+

  10. #9
    ark89

    Re : Débutant MPLAB X

    Merci beaucoup, çà fonctionne niquel, même avec mon 16f84a que je croyais mort, merci !

    Code:
    #include <xc.h>
    #include "stdint.h"
    #define _XTAL_FREQ 4000000 /* frequence en Hz 4000000*/
    #pragma config FOSC = HS
    #pragma config WDTE=OFF
    #pragma config CP=OFF
    #pragma config PWRTE=OFF
    
    
    
    void main(void)
    {
        
        unsigned long i = 0;
        TRISA = 0b00000000;
        TRISB = 0b00000000;
            while(1){
            i=0;
            PORTAbits.RA0 = 0;
            __delay_ms(1000);
    
            PORTAbits.RA0 = 1;
            i=0;
            __delay_ms(1000);
            }
    }

  11. #10
    RISC

    Smile Re : Débutant MPLAB X

    Salut,

    Tu as raison d'avoir passé du temps sur les interruptions car c'est la méthode la plus efficace d'utilisation du temps du micro et de temps de réponse aux interruptions.
    N'oublie pas que ce micro peut tourner à Fosc = 64MHz.
    Avec ton quartz 4MHz, tu peux aussi utiliser la PLL intégrée pour multiplier la fréquence par 4 (HSPLL) => 16MHz

    Pour les bits de configurations, tu peux utiliser MPLAB X pour les générer : Window > Target memeory view > Configuration bits
    Tu configure tes bits et tu sauve cela dans un fichier par exemple configbits.h que tu inclus dans ton main

    2 petites remarques sur ton code :

    1/ Pour les broches utilisées en sortie il est recommandé de toujours utiliser LATx et de réserver PORTx seulement pour les broches en entrée :
    Code:
    PORTBbits.RB6=~PORTBbits.RB6   ==> LATBbits.LATB6 =~ LATBbits.LATB6
    Il y a des cas très "vicieux" ou utiliser PORT peut poser un PB...
    (les premiers PIC16 n'avaient pas LATx et il a été rajouté par la suite sur les nouveaux PIC16F1xxx pour gérer ce PB potentiel)

    2/ Interruption
    Pour nettoyer le flag d'interruption, il peut être nécessaire d'utiliser le code suivant (encore un cas vicieux) si plusieurs interruptions sont utilisées simultanément et que l'on désactive temporairement cette interrution mais que les autres restent actives
    Code:
    ( INTCONbits.TMR0IF &&  INTCONbits.TMR0IE )
    on a PAS le droit de clearer un bit dans l'interruption si elle n'est pas active (cas ou une autre interruption est active)

    On peut passser des jours à chercher ces cas vicieux et perdre tous ses cheveux

    a+

  12. #11
    ark89

    Re : Débutant MPLAB X

    Vraiment merci beaucoup pour ces renseignements précieux !

  13. #12
    RISC

    Re : Débutant MPLAB X

    Salut,

    Juste un petit point important.
    Il me semble qu'il faut déclarer la fréquence avant le include <xc.h> :
    Code:
    #define _XTAL_FREQ 4000000 /* frequence en Hz 4000000*/
    #include <xc.h>
    ....
    a+

  14. #13
    ark89

    Re : Débutant MPLAB X

    ok merci !

Discussions similaires

  1. Mplab x ide
    Par kevin8z dans le forum Électronique
    Réponses: 9
    Dernier message: 12/06/2012, 14h42
  2. Debutant, debutant en HITEC C compiler + 18f4550
    Par biduleur34 dans le forum Électronique
    Réponses: 1
    Dernier message: 28/05/2012, 17h06
  3. Mplab x
    Par invite313e8f19 dans le forum Électronique
    Réponses: 2
    Dernier message: 22/02/2012, 20h50
  4. Réponses: 4
    Dernier message: 12/03/2011, 15h13
  5. débutant sur MPLAB ICD2
    Par benjibul dans le forum Électronique
    Réponses: 26
    Dernier message: 18/04/2010, 22h28
Découvrez nos comparatifs produits sur l'informatique et les technologies.