Besoin d'aide programme en c sur PIC 16F628A
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Besoin d'aide programme en c sur PIC 16F628A



  1. #1
    invite1848d4ec

    Besoin d'aide programme en c sur PIC 16F628A


    ------

    Bonjour à tous,

    Voilà mon pb : J'aimerais simplement faire un programme en c me permettant de faire clignoter des leds sur les pins RA0, RA1, RA7,RA6, RA2 et RA3 pendant une certaine durée sur simple appui avec un bouton poussoir sur la pin RA5 et que lors du relachement du bouton, que les leds s'éteignent etc ... Mais j'ai beau essayer, les leds clignotent bien lors de l'appui mais continuent de clignoter sans fin lorsque je relache le bouton poussoir.
    J'utilise MPLAB 8.85 et comme compilateur CC5X avec un pickit2.

    Aurais je oublié quelque chose ? Une boucle ou autre ? Que manque t il ? Merci de votre aide.

    Voici mon programme :

    #include "delay.c"

    char sortiea @ PORTA;

    bit LED0 @ RA0;//affectation des leds respectivement aux pins
    bit LED1 @ RA1;
    bit LED7 @ RA7;
    bit LED6 @ RA6;
    bit LED2 @ RA2;
    bit LED3 @ RA3;

    bit Inter @ RA5;
    int i;

    void main(void)
    {
    TRISA = 0b00100000;//Définition de RA5 comme entrée (interrupteur)
    CMCON = 0x07;//désactivation des comparateurs
    sortiea = 0;

    if(Inter==1)
    {
    for(i=0;i<=15;i++)
    {
    LED0=1;
    delay_ms(10);
    LED0=0;
    delay_ms(10);

    LED1=1;
    delay_ms(10);
    LED1=0;
    delay_ms(10);

    LED7=1;
    delay_ms(10);
    LED7=0;
    delay_ms(10);

    LED6=1;
    delay_ms(10);
    LED6=0;
    delay_ms(10);

    LED2=1;
    delay_ms(10);
    LED2=0;
    delay_ms(10);

    LED3=1;
    delay_ms(10);
    LED3=0;
    delay_ms(10);
    }
    sortiea=0;
    }
    }
    }

    -----

  2. #2
    invite635643ae

    Re : Besoin d'aide programme en c sur PIC 16F628A

    il suffit de rajouter une condition tant que inter1 appuyé faire sinon de rien faire

    ca donne un truc comme ca en C
    while(inter) {iinstruction}

  3. #3
    invite635643ae

    Re : Besoin d'aide programme en c sur PIC 16F628A

    Code:
    #include "delay.c"
    
    char sortiea @ PORTA;
    
    bit LED0 @ RA0;//affectation des leds respectivement aux pins
    bit LED1 @ RA1;
    bit LED7 @ RA7;
    bit LED6 @ RA6;
    bit LED2 @ RA2;
    bit LED3 @ RA3;
    
    bit Inter @ RA5;
    
    void main(void)
    {
    TRISA = 0b00100000;//Définition de RA5 comme entrée (interrupteur)
    CMCON = 0x07;//désactivation des comparateurs
    sortiea = 0;
    Inter=0;
    
    while(Inter){
    
    LED0();
    LED1();
    LED3();
    LED6();
    LED7();
    LED2();
    
    }
    
    sortiea = 0;
    
    
    
    void LED0 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED0=1;
    delay_ms(10);
    LED0=0;
    delay_ms(10);
    }
    }
    
    void LED1 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED1=1;
    delay_ms(10);
    LED1=0;
    delay_ms(10);
    }
    }
    
    
    void  LED7 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED7=1;
    delay_ms(10);
    LED7=0;
    delay_ms(10);
    }
    }
    
    
    void  LED6 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED6=1;
    delay_ms(10);
    LED6=0;
    delay_ms(10);
    }
    }
    
    void  LED3 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED3=1;
    delay_ms(10);
    LED3=0;
    delay_ms(10);
    }
    }
    
    void  LED2 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED2=1;
    delay_ms(10);
    LED2=0;
    delay_ms(10);
    }
    }


    Utilise des fonctions pour plus de clarté dans ton code, voici ce que ca peut donner

    Et puis déclarer une variable int pour un comptage qui dépasse pas 15, est ce une bonne idée? tu dépenses 1 octet de mémoire inutilement, préfère le char non signé si pas de val négatif

  4. #4
    invite1848d4ec

    Re : Besoin d'aide programme en c sur PIC 16F628A

    Super, merci beaucoup pour ton aide et tes conseils.

    Je prends note.

    A bientôt.

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

    Re : Besoin d'aide programme en c sur PIC 16F628A

    sinon je vois une patte d'interruption sur la pin RBO du pic16f628, une fois a l'aise avec le code, tu peux t'amuser a programmer des routines d'interruptions, primordiales pour les projets plus gros

  7. #6
    invite1848d4ec

    Re : Besoin d'aide programme en c sur PIC 16F628A

    Bonsoir,

    Navré mais ça ne marche toujours pas. Puis il me semble qu'il y a un pb lors de la compilation (erreur lors de l'appel du sous programmes LED0() ) syntax error.
    J'ai essayé d'une autre façon, mais les leds restent allumées sans fin (en boucle).
    Une idée ? Tu as parlé d'interruption ? Comment ça marche ?

    Merci.

  8. #7
    invite635643ae

    Re : Besoin d'aide programme en c sur PIC 16F628A

    Code:
    #include "delay.c"
    
    char sortiea @ PORTA;
    
    bit LED0 @ RA0;//affectation des leds respectivement aux pins
    bit LED1 @ RA1;
    bit LED7 @ RA7;
    bit LED6 @ RA6;
    bit LED2 @ RA2;
    bit LED3 @ RA3;
    
    bit Inter @ RA5;
    
    
    void  LED0 (void);
    void  LED1 (void);
    void  LED3 (void);
    void  LED6 (void);
    void  LED7 (void);
    void  LED2 (void);
    
    
    
    
    void main(void)
    {
    TRISA = 0b00100000;//Définition de RA5 comme entrée (interrupteur)
    CMCON = 0x07;//désactivation des comparateurs
    sortiea = 0;
    Inter=0;
    
    while(Inter){
    
    LED0();
    LED1();
    LED3();
    LED6();
    LED7();
    LED2();
    
    }
    
    sortiea = 0;
    
    }
    
    
    
    void LED0 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED0=1;
    delay_ms(10);
    LED0=0;
    delay_ms(10);
    }
    }
    
    void LED1 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED1=1;
    delay_ms(10);
    LED1=0;
    delay_ms(10);
    }
    }
    
    
    void  LED7 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED7=1;
    delay_ms(10);
    LED7=0;
    delay_ms(10);
    }
    }
    
    
    void  LED6 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED6=1;
    delay_ms(10);
    LED6=0;
    delay_ms(10);
    }
    }
    
    void  LED3 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED3=1;
    delay_ms(10);
    LED3=0;
    delay_ms(10);
    }
    }
    
    void  LED2 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED2=1;
    delay_ms(10);
    LED2=0;
    delay_ms(10);
    }
    }

    Normal il faut ajouter les prototypes des fonctions en entête je viens de le faire

  9. #8
    invite635643ae

    Re : Besoin d'aide programme en c sur PIC 16F628A

    essaye le nouveau code ca marche chez moi

  10. #9
    invite1848d4ec

    Re : Besoin d'aide programme en c sur PIC 16F628A

    Bonsoir,

    Je m'excuse mais ça ne marche toujours pas, j'ai fais un copier coller de ton programme et j'ai l'erreur suivante :

    void LED0 (void); Illegal name.

    Si ça fonctionne chez toi, je ne comprends plus !

  11. #10
    invite635643ae

    Re : Besoin d'aide programme en c sur PIC 16F628A

    Code:
    #include "delay.c"
    
    char sortiea @ PORTA;
    
    bit LED0 @ RA0;//affectation des leds respectivement aux pins
    bit LED1 @ RA1;
    bit LED7 @ RA7;
    bit LED6 @ RA6;
    bit LED2 @ RA2;
    bit LED3 @ RA3;
    
    bit Inter @ RA5;
    
    
    void  LED0 (void);
    void  LED1 (void);
    void  LED3 (void);
    void  LED6 (void);
    void  LED7 (void);
    void  LED2 (void);
    
    
    
    
    void main(void)
    {
    TRISA = 0b00100000;//Définition de RA5 comme entrée (interrupteur)
    CMCON = 0x07;//désactivation des comparateurs
    sortiea = 0;
    Inter=0;
    
    while(1){
    while(Inter){
    
    LED0();
    LED1();
    LED3();
    LED6();
    LED7();
    LED2();
    
    }
    }
    
    sortiea = 0;
    
    }
    
    
    
    void LED0 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED0=1;
    delay_ms(10);
    LED0=0;
    delay_ms(10);
    }
    }
    
    void LED1 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED1=1;
    delay_ms(10);
    LED1=0;
    delay_ms(10);
    }
    }
    
    
    void  LED7 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED7=1;
    delay_ms(10);
    LED7=0;
    delay_ms(10);
    }
    }
    
    
    void  LED6 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED6=1;
    delay_ms(10);
    LED6=0;
    delay_ms(10);
    }
    }
    
    void  LED3 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED3=1;
    delay_ms(10);
    LED3=0;
    delay_ms(10);
    }
    }
    
    void  LED2 (void){
    
    unsigned char i;
    for(i=0;i<=15;i++)
    {
    LED2=1;
    delay_ms(10);
    LED2=0;
    delay_ms(10);
    }
    }
    ca marche chez moi, copie ca et essaye

  12. #11
    invite635643ae

    Re : Besoin d'aide programme en c sur PIC 16F628A

    apres faut voir au niveau de la syntaxe de ton compilo, moi je code sur mikroc

Discussions similaires

  1. Programme sur PIC 16f628a
    Par anthonydu62 dans le forum Électronique
    Réponses: 12
    Dernier message: 25/02/2013, 15h21
  2. programme PIC 16F628A
    Par invite980b6e62 dans le forum Électronique
    Réponses: 82
    Dernier message: 31/01/2013, 13h00
  3. Besoin d'aide sur programme PIC
    Par invite4fcb028d dans le forum Électronique
    Réponses: 7
    Dernier message: 07/10/2009, 00h41
  4. besoin d'aide pour programme d'un pic svp
    Par invite51ae8ee2 dans le forum Électronique
    Réponses: 34
    Dernier message: 06/02/2006, 21h37
  5. Besoin d'aide sur un montage avec pic 16F876
    Par inviteada012db dans le forum Électronique
    Réponses: 17
    Dernier message: 03/02/2006, 14h25
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...