Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 59

Développement code pour pic16f628a via MPLAB X



  1. #1
    erwannomar

    Développement code pour pic16f628a via MPLAB X


    ------

    Bonjour,

    Je suis actuellement en train de m'amuser a utiliser un pic16f628a, sur le principe "d'apprendre en s'amusant", et j'arrive à un stade ou je souhaite écrire un code super simple permettant d'allumer juste une LED sur la sortie RB1... sauf que cela ne s'avère pas super simple (pour moi), et que cela commence à ne plus m'amuser...

    Du coup, et malgré le fait que je n'arrive pas à trouver seul la cause du non fonctionnement sur plaque d'essai (car j'arrive bien à compiler le code et à le transférer dans le microcontroleur) et malgré les très très nombreux sujets dispos sur le net, je le conçois, j'en appelle aux personnes expérimentées qui pourront me dire ou est mon ou mes erreurs. Me dire ce qui ne va pas, j'essaierai de trouver la solution par moi même.

    En vous remerciant.

    /** I N C L U D E S ****************************** ****************************/
    #include <stdio.h>
    #include <stdlib.h>
    #include <htc.h>
    #include <pic16f628a.h>

    /** Configuration Bit Settings ****************************** *****************/
    #pragma config FOSC = EXTRCCLK
    #pragma config WDTE = ON
    #pragma config PWRTE = OFF
    #pragma config MCLRE = ON
    #pragma config BOREN = ON
    #pragma config LVP = OFF
    #pragma config CPD = OFF
    #pragma config CP = OFF


    /** D E F I N E S ****************************** ****************************/
    #define LED1 RB1
    #define TRISLED1 TRISB1

    /** I N I T I A L I S ****************************** *************************/
    void initCtrlPorts(void)
    {
    LED1 = 1;
    TRISLED1 = 1;
    }

    /************* START OF MAIN FUNCTION ***************/
    int main(void)
    {
    CMCON = 0x07;
    initCtrlPorts();

    while(1)
    {
    LED1 = 1;
    }
    }

    -----

  2. Publicité
  3. #2
    bisou10

    Re : Développement code pour pic16f628a via MPLAB X

    hum...

    déjà tu inclues les entetes HITECH C qui n'existe plus, et qui a été remplacé par XC8

    #include <xc.h>

    ce qui rend htc.h et pic16f628a.h inutile

    Ensuite tu utilises les mauvais define (mauvais dans le sens ou ils sont fonctionnels mais peu universel)

    #define LED1 PORTBbits.RB1
    #define TRISLED1 TRISBbits.RB1

    Enfin, verifie dans la DS du PIC si RB1 n'est ps multiplexé, et si TRISB a la bonne valeur (moi j'utilise des macros INPUT OUTPUT...). Pour tout ca, tu peux utiliser Microchip Code Configurator

    Dernier point, utilise l'oscillateur interne, tu as un circuit RC externe pour l'horloge ?? S'il le faut, ton PIC ne démarre meme pas.

  4. #3
    invite03481543

    Re : Développement code pour pic16f628a via MPLAB X

    Bonjour,

    c'est surtout qu'avec TRISLED1 = 1 ton port est en entrée... donc aucune chance d'allumer la led

  5. #4
    andre_teprom

    Re : Développement code pour pic16f628a via MPLAB X

    Vous activez le compteur de "watchdog", mais ne pouvez pas trouver dans votre programme où la remise à zéro; pense donc que vous devriez le désactiver, comme ci-dessous:

    Code:
    # pragma config WDTE = OFF

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    Bonjour,
    Je prends note de toutes vos remarques et corrige mon code...

    Merci.

  9. #6
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    Après de nombreux essais, ça ne fonctionne pas, et je ne comprends pas comment faire. Normalement je configure le portB en sortie avec une valeur de "0", puis ensuite j'affecte la valeur 1 aux sortie RB1 et RB3. Résultats, rien... aucune tension mesurée en sortie. N'y a t'il pas un paramètrage numérique/analogique des sorties qui peut me poser problème ? j'ai fait l'essai avec PORTB = 1; => même résultat.
    Est-ce que mes valeurs sont au bon format (décimal, binaire, hexa ??) ?.

    Merci.

    Voici mes modifications :

    /** I N C L U D E S ****************************** ****************************/
    #include <stdio.h>
    #include <stdlib.h>
    #include <xc.h>

    /** Configuration Bit Settings ****************************** *****************/
    #pragma config FOSC = EXTRCCLK // Oscillator Selection bits (RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN)
    #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
    #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
    #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
    #pragma config BOREN = ON // Brown-out Detect Enable bit (BOD enabled)
    #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has PGM function, low-voltage programming enabled)
    #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)
    #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)

    /** T R I S ****************************** ****************************/


    /** D E F I N E S ****************************** ****************************/
    //#define LED1 PORTBbits.RB1
    //#define TRISLED1 TRISBbits.RB1

    /** I N I T I A L I S ****************************** *************************/
    void initCtrlPorts(void)
    {
    PORTB = 0; // attribution valeur 0 aux PIN du port B
    TRISB = 0b00000000; // les PIN du port B sont toutes en sortie
    }
    /************* START OF MAIN FUNCTION ***************/
    int main(void)
    {
    CMCON = 0x07;
    initCtrlPorts();

    while(1)
    {
    PORTBbits.RB1 = 1; // attribution de la valeur 1 à la sortie RB1 (pin 7)
    PORTBbits.RB3 = 1; // attribution de la valeur 1 à la sortie RB3 (pin 9)
    }
    }

  10. Publicité
  11. #7
    andre_teprom

    Re : Développement code pour pic16f628a via MPLAB X

    Pourrait fixer ici le schéma du circuit électrique que vous utilisez dans les tests?

  12. #8
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    oui, tout de suite

  13. #9
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    voici le schéma
    Images attachées Images attachées

  14. #10
    invite03481543

    Re : Développement code pour pic16f628a via MPLAB X

    Et où se trouvent les cathodes de tes leds?

  15. #11
    invite03481543

    Re : Développement code pour pic16f628a via MPLAB X

    Et tu n'as rien branché sur MCLR?

  16. #12
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    les cathodes sont coté Gnd, et non je n'ai rien branché sur MCLR, d'ailleurs c'est une question que je me suis posé : est-ce que il doit y avoir du +3,3V sur MCLR??

  17. Publicité
  18. #13
    invite03481543

    Re : Développement code pour pic16f628a via MPLAB X

    Oui à travers une 10K sur le 3.3V.

  19. #14
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    ok, alors je vais essayer.
    Merci.

  20. #15
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    et bien, ça ne fonctionne toujours pas ...

  21. #16
    andre_teprom

    Re : Développement code pour pic16f628a via MPLAB X

    Si vous utilisez une LED bleue, la chute de tension à ses bornes sera plus élevé que prévu dans une LED rouge (environ 2 volts), et donc la résistance de 500R va générer un courant de ~3 mA, dont l'intensité lumineuse est imperceptible.

  22. #17
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    Non, j'ai une LED jaune et une verte, mais je n'ai aucune tension aux bornes des LED, et après mesure je n'ai rien non plus entre la pin 9 et la masse. Du coup je ne pense pas que ce soit une erreur de montage, mais plutôt un problème de code.

  23. #18
    satinas

    Re : Développement code pour pic16f628a via MPLAB X

    Bisou10 t'avais parlé d'horloge ...

  24. Publicité
  25. #19
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    oui, mais a quoi me sert l'horloge ? pour l'instant je ne veux pas utiliser de timer.
    je vais consulter la DS.

  26. #20
    RISC

    Re : Développement code pour pic16f628a via MPLAB X

    Salut,

    Tu as un problème de sélection de l'horloge du PIC...
    Tu as par erreur choisis une horloge externe RC mais tu n'en as pas sur ta carte.. :
    au lieu de
    Code:
    #pragma config FOSC = EXTRCCLK
    il faut mettre :
    Code:
    #pragma config FOSC = INTRCIO     // utiliser l'oscillateur interne du PIC
    a+
    Ma marotte ? les microcontrôleurs ;=)

  27. #21
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    Ok, si je reste sur la configuration actuelle :

    #pragma config FOSC = EXTRCCLK

    Alors si j'ai bien compris je dois intégrer une résistance + condensateur dans le circuit. Chose de que j'ai fait mais qui ne donne pas de résultat. R = 4,6k et C = 1uF.

    Si du coup je selectionne l'horloge interne du PIC, en paramétrant FOSC = INTOSCIO (je n'ai pas trouvé INTRCIO) alors pareil ça ne donne rien..

  28. #22
    invite03481543

    Re : Développement code pour pic16f628a via MPLAB X

    Tu peux essayer d'indiquer la chose suivante dans ton programme:

    Code:
    PCON = 0x07;
    A la place de CMCON = 0x07 et qui ne sert à rien du tout.
    Dernière modification par HULK28 ; 20/08/2014 à 07h31.

  29. #23
    invite03481543

    Re : Développement code pour pic16f628a via MPLAB X

    Ton PIC est bien un modèle PIC16F628A ?

  30. #24
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    Affirmatif ! PIC16F628A

  31. Publicité
  32. #25
    invite03481543

    Re : Développement code pour pic16f628a via MPLAB X

    Tu as essayé ce que je t'ai écrit au post#22?

  33. #26
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    oui et cela ne donne pas grand chose de plus.

    je remets le code avec les qqes modifications :

    /** I N C L U D E S ****************************** ****************************/
    #include <stdio.h>
    #include <stdlib.h>
    #include <xc.h>

    /** Configuration Bit Settings ****************************** *****************/
    #pragma config FOSC = INTOSCIO
    #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
    #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
    #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
    #pragma config BOREN = ON // Brown-out Detect Enable bit (BOD enabled)
    #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has PGM function, low-voltage programming enabled)
    #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)
    #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)

    /** T R I S ****************************** ****************************/


    /** D E F I N E S ****************************** ****************************/
    //#define LED1 PORTBbits.RB1
    //#define TRISLED1 TRISBbits.RB1

    /** I N I T I A L I S ****************************** *************************/
    void initCtrlPorts(void)
    {
    PORTB = 0; // attribution valeur 0 aux PIN du port B
    TRISB = 0b00000000; // les PIN du port B sont toutes en sortie
    }
    /************* START OF MAIN FUNCTION ***************/
    int main(void)
    {
    PCON = 0x07;
    initCtrlPorts();

    while(1)
    {
    PORTBbits.RB1 = 1; // attribution de la valeur 1 à la sortie RB1 (pin 7)
    PORTBbits.RB3 = 1; // attribution de la valeur 1 à la sortie RB3 (pin 9)
    }
    }

  34. #27
    invite03481543

    Re : Développement code pour pic16f628a via MPLAB X

    Plutôt que d'écire:
    Code:
    PORTBbits.RB1 = 1;
    Ecris:

    Code:
    LATBbits.RB1 = 1;

  35. #28
    invite03481543

    Re : Développement code pour pic16f628a via MPLAB X

    Tu es bien certain que ta compilation s'exécute et que tu génères bien un nouvel hex à chaque fois?
    Il faut vérifier avec l'heure et minute en face du fichier généré.

  36. #29
    invite03481543

    Re : Développement code pour pic16f628a via MPLAB X

    Si ça ne fonctionne toujours pas, il faudra que tu écrives ça:

    Code:
    ....
    LATBbit.RB1=1;
    while(1);
    inutile d'essayer avec RB3 si déjà on allume pas RB1...
    En principe tu dois allumer cette led avec ce code.
    Sinon il faut vérifier avec un voltmètre tout ton montage, au cas où il y aurait un soucis de câblage.

  37. #30
    erwannomar

    Re : Développement code pour pic16f628a via MPLAB X

    Quand je remplace PORTBbits.RB1 = 1; par LATBbits.RB1 = 1;
    ça me met des erreurs lors de la compilation :

    main.c:44: error: (192) undefined identifier "LATBbits"
    main.c:44: error: (196) struct/union required
    main.c:45: error: (196) struct/union required
    (908) exit status = 1

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. code vb 2008 pour code bouton eteindre ou allumer une lampe
    Par candolf dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 16/02/2013, 20h44
  2. Pic16F628A PGC et PGD en sortie ??
    Par Biname dans le forum Électronique
    Réponses: 3
    Dernier message: 15/02/2013, 19h36
  3. [MPLAB / PIC16F628A] Delays.h n'est pas trouvé
    Par RichardNoirPlus dans le forum Électronique
    Réponses: 4
    Dernier message: 28/12/2011, 22h30
  4. probléme code erreur avec MPLAB
    Par bibax76 dans le forum Électronique
    Réponses: 7
    Dernier message: 20/04/2011, 18h12
  5. problème compilation code ccs avec mplab
    Par bach91 dans le forum Électronique
    Réponses: 2
    Dernier message: 01/06/2009, 09h57
Découvrez nos comparatifs produits sur l'informatique et les technologies.