PIC 16F690 Programmation en C d'un Compte tour
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

PIC 16F690 Programmation en C d'un Compte tour



  1. #1
    invite056ed43e

    PIC 16F690 Programmation en C d'un Compte tour


    ------

    Bonjour, voila je me suis inscrit sur futura forum il y a une semaine de ça pour un buttage sur la programmation d'une incrémentation.
    Le problème étant réglé je bute sur un autre...
    J'ai testé la ligne de code qui permet que quand j'appuie sur le bouton poussoir un segment de mon premier afficheur s'allume. Cela fonctionne !!
    Donc en principe si j'appuie sur mon bouton poussoir une fois cela devrait m'afficher un 1 et puis si j'appuie une autre fois cela devrait me remplacer le 1 par un 2 ...etc
    Mais non, rien ne ce passe ...

    Je ne sais plus quoi faire donc si vous pourriez m'éclairer su mon petit problème ...

    Voici mon code :
    Code:
     #define SegA 0xEF    //11101111
     #define SegB 0xDF    //11011111
     #define SegC 0xEF    //11101111
     #define SegD 0xFD    //11111101
     #define SegE 0xFE    //11111110
     #define SegF 0xF7    //11110111
     #define SegG 0x7F    //01111111
    
     #define AFF1 0xBF    //10111111
     #define AFF2 0x7F    //11110111
     #define AFF3 0xBF    //10111111
     #define AFF4 0xDF    //11011111
     #define AFF5 0xFB    //11111011
     #define unite 1
     #define dizaine 2
     #define centaine 3
     #define millier 4
     #define diz_millier 5
    
    unsigned int num=0, temp; //Variable d'affichage
    unsigned int const tempo=30; //30ms
    
    
     void init(){
      ANSEL  = 0;            // Configure AN pins as digital
      ANSELH = 0;
    
      C1ON_bit = 0;          // Disable comparators
      C2ON_bit = 0;
    
      TRISA = 0x04;
      TRISB = 0x00;          // set direction to be output
      TRISC = 0x00;          // set direction to be output
    
    
      PORTB = 0xff;
      PORTC = 0xff;          // L'afficheur est totalement éteind
    
     /* INTCON = 0b10110000 ;
      OPTION_REG = 0b11010001;
      OSCCON = OSCCON | 0b01110000;      //Fréquence 8MHz  */
    }
     
    
    
     
     void affiche(unsigned int chiffre, unsigned char digit){
    //Extinction de l'afficheur : aucun digit ni segment sélectionnés
    PORTB = PORTB | 0b11111111;
    PORTC = PORTC | 0b11111111;
    
    
     switch(chiffre){
            case 0 : PORTC & SegA & SegB & SegD & SegF, PORTB & SegC;
            case 1 : PORTC & SegB, PORTB & SegC;
            case 2 : PORTC & SegA & SegB & SegE & SegD, PORTB & SegG;
            case 3 : PORTC & SegA & SegB & SegD, PORTB & SegC & SegG;
            case 4 : PORTC & SegF & SegB, PORTB & SegC & SegG;
            case 5 : PORTC & SegA & SegF &SegD, PORTB & SegC & SegG;
            case 6 : PORTC & SegA & SegF & SegE & SegD, PORTB & SegC & SegG;
            case 7 : PORTC & SegA & SegB, PORTB & SegC;
            case 8 : PORTC & SegA & SegB & SegD & SegF & SegE , PORTB & SegC & SegG;
            case 9 : PORTC & SegA & SegB & SegD & SegF, PORTB & SegC & SegG;
    
    
    
     }
    
    
    switch( digit ){
            case unite : PORTC=PORTC & AFF1;
            case dizaine : PORTC=PORTC & AFF2;
            case centaine : PORTB=PORTB & AFF3;
            case millier : PORTB=PORTB & AFF4;
            case diz_millier : PORTC=PORTC & AFF5;
    delay_ms(10);
    }
    }
    
    
    
    void main() {
    init ();
    test_seg();
    while(1)   {
               // detection d'appui sur le poussoir
              // while(1){
               if (PORTA.B2 ==0){
               num+=1;  //num = num + 1;
               delay_ms(100);
    
              // PORTC = PORTC & AFF1 & SegA;
               }
                       // } // test de mon bouton poussoir
    
               //séquencement en chiffre du nombre à afficher
               temp = num/10;
               temp=temp*10;
               temp=num-temp;
               affiche(temp,unite);
    
    
    
    
    
    }
    }

    -----

  2. #2
    invite89303051

    Re : PIC 16F690 Programmation en C d'un Compte tour

    Bonjour

    Par défaut, sur un PIC, pour commander un port en sortie, on utilise LATX.
    Pour ton port C, LATC
    Cordialement

  3. #3
    invitef86a6203

    Re : PIC 16F690 Programmation en C d'un Compte tour

    comme ça, c' est surement mieux;

    case 0 : PORTC = 0xFF & SegA & SegB & SegD & SegF, PORTB = 0xff & SegC;

  4. #4
    invitef86a6203

    Re : PIC 16F690 Programmation en C d'un Compte tour

    LATC c est du 18F pas du 16F !

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

    Re : PIC 16F690 Programmation en C d'un Compte tour

    Merci freepicbasic de tes réponses.
    Mais pourrais tu m'expliquer pourquoi tu mets 0xFF ?

  7. #6
    invitef86a6203

    Re : PIC 16F690 Programmation en C d'un Compte tour

    c est toi qui définis que les digits éteint sont à 1, alors 0xFF c est tout éteint !
    Puis on allume les seg désirés.

    Code:
     PORTB = 0xff;
      PORTC = 0xff;          // L'afficheur est totalement éteind

Discussions similaires

  1. Compte tour à l'aide d'un TCRT5000 et PIC18F2550-I/SP
    Par invite67d63d6b dans le forum Électronique
    Réponses: 3
    Dernier message: 05/03/2012, 23h19
  2. Programmation compte tours PIC
    Par invite02a9928f dans le forum Électronique
    Réponses: 12
    Dernier message: 25/06/2011, 11h47
  3. [Pic 16F690] Signal pwm
    Par invite7656582f dans le forum Électronique
    Réponses: 8
    Dernier message: 30/08/2010, 00h16
  4. [PIC] Détécter l'état logique d'une entrée sur pic 16f690
    Par invitece85d109 dans le forum Électronique
    Réponses: 12
    Dernier message: 31/12/2009, 18h53
  5. modification d'un compte tour
    Par invite5a7234ef dans le forum Électronique
    Réponses: 22
    Dernier message: 10/11/2008, 17h29
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...