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

Aide pour programme PIC 16F628A en C



  1. #1
    titoftit

    Aide pour programme PIC 16F628A en C


    ------

    Bonjour,

    J'aurais besoin d'un peu d'aide pour un petit programme pour un PIC 16F628A.

    Je le code en C sur MPLAB.

    Il contrôle un afficheur 7 segments, qui commence à 9 et qui décompte jusqu'à 1, puis repart à 9.
    En gros, ça fonctionne, mais je n'arrive pas à gérer les rebonds ... J'utilise l'oscillateur interne.

    Voici le code (c'est le premier que je fais ... )

    Code:
    void delay_ms( uns16 millisec);
    int compteur;
    
    void main(void)
    {
    
    TRISB = 0b00000000;
    TRISA = 0b00010000;
    INTCON = 0b01100000;
    
    PORTB = 0b01111011;
    compteur = 9;
    
    for (;;)
    {
    	if (RA4 == 0) {
    		delay_ms(50);
    	}	
    	if (RA4 == 0) {
            
            compteur = compteur -1;
            
            if (compteur == 0) {
                compteur = 9;
            }
    
            if (compteur == 9) {
                    PORTB = 0b01111011;
            }
            if (compteur == 8) {
                    PORTB = 0b01111111;
            }
            if (compteur == 7) {
                    PORTB = 0b01010010;
            }
            if (compteur == 6) {
                    PORTB = 0b01101111;
            }
            if (compteur == 5) {
                    PORTB = 0b01101011;
            }
            if (compteur == 4) {
                    PORTB = 0b00111010;
            }
            if (compteur == 3) {
                    PORTB = 0b01011011;
            }
            if (compteur == 2) {
                    PORTB = 0b01011101;
            }
            if (compteur == 1) {
                    PORTB = 0b00010010;
            }
            
            while (RA4 == 0){
            }
    	}
    
    }
    
    }
    
    void delay_ms( uns16 millisec) {
    // Delays a multiple of 1 milliseconds at 4 MHz
    // using the TMR0 timer
        char next = 0;
    
        OPTION = 2; // prescaler divide TMR0 rate by 8
        TMR0 = 2;  // deduct 2*8 fixed instruction cycles delay
        do  {
            next += 125;
            //clrwdt();  // needed only if watchdog is enabled
            while (TMR0 != next)   // 125 * 8 = 1000 (= 1 ms)
                ;
        } while ( -- millisec != 0);
    }
    La méthode delay_ms, je l'ai récupéré comme ça. Même en augmentant le timer, je dois rester plus longtemps appuyer, mais j'arrive quand même à avoir des sauts de numéro.


    Vous voyez quelque chose qui ne va pas ?

    Merci

    -----

  2. Publicité
  3. #2
    antek

    Re : Aide pour programme PIC 16F628A en C

    Connais pas ce langage mais écrire dans tmr0 effece le contenu du prédiviseur.

    Un anti-rebond hard c'est bien !

  4. #3
    titoftit

    Re : Aide pour programme PIC 16F628A en C

    Mon circuit est déjà fait, donc pour l'anti rebond en hard c'est mort ...

    Ca s'est un peu amélioré en supprimant cette condition :

    Code:
    if (RA4 == 0) {
    	delay_ms(50);
    }
    Et en ajoutant le delay_ms à la fin :

    Code:
    delay_ms(1000):
    while (RA4 == 0){
            }
    Mais j'ai toujours des sauts aléatoirement ... même avec un délai d'une seconde.

    Pour la méthode delay_ms je l'ai récupérée telle quelle dans le fichier delay.c qui se trouve dans le répertoire du compilateur CC5X ...

  5. #4
    titoftit

    Re : Aide pour programme PIC 16F628A en C

    En utilisant le code sur ce site, ça fonctionne nickel : http://pila.fr/wordpress/?p=77

    Problème résolu !!

  6. A voir en vidéo sur Futura

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/01/2015, 14h04
  2. Besoin d'aide programme en c sur PIC 16F628A
    Par Because dans le forum Électronique
    Réponses: 10
    Dernier message: 25/04/2013, 22h17
  3. Programme sur PIC 16f628a
    Par anthonydu62 dans le forum Électronique
    Réponses: 12
    Dernier message: 25/02/2013, 14h21
  4. programme PIC 16F628A
    Par pierre0059 dans le forum Électronique
    Réponses: 82
    Dernier message: 31/01/2013, 12h00
  5. Aide pour le pic 16F628A
    Par dandano22 dans le forum Électronique
    Réponses: 6
    Dernier message: 29/03/2008, 09h15
Découvrez nos comparatifs produits sur l'informatique et les technologies.