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

Allumer une LED avec un pic 16F884 (langage c)



  1. #1
    wisto59

    Allumer une LED avec un pic 16F884 (langage c)


    ------

    Je vous présente mon problème. Je débute en programmation en sur PIC et je n’arrive pas a allumer une LED (toute les pattes du PIC reste à 0). J’ai bien sur essayé plusieurs codes sur plusieurs compilateurs mais rien ne marche.
    Voici mon montage électronique. A la mise sous tension, seul D2 est allumé. Je vous joins un code compilé sous HITEC.

    Savez vous d'où viens le problème? le code, le montage?
    Code:
    #include <htc.h>
    #include "delay.h"
    
    void init(void);
    
    __CONFIG(MCLREN & UNPROTECT & WDTDIS );
    
    void main() {
    int h;
    char i, j;
    init();
     ANSEL  = 0;                            // Configure AN pins as digital I/O
     ANSELH = 0;
    
      PORTA = 0;                             // initialize PORT as output
      TRISA = 0; 
      PORTB = 0;                            
      TRISB = 0; 
      PORTC = 0;                             
      TRISC = 0; 
      PORTE = 0;                            
      TRISE = 0; 
                               
    OSCCON	= 0b01100000;
    
      j = 4;                                  
    
     do {
    h++;
    PORTB = 0xFF;
    PORTA = 0xFF;
    PORTC = 0xFF;
    PORTE = 0xFF;
     } while (1);
    
    }
    
    void init(void){
    	/***** Common Code ****
    	 *  CCP Module 1 interrupt disabled.
    	 */
    	PIE1	= 0b00000000;
    	/*
    	 *  Portbit7:4 interrupt-on-change enabled
    	 *  Peripheral interrupts not enabled
    	 *  Global interrupt disabled during initialization
    	 */
    	INTCON	= 0b00001000;
    	/*
    	 *  CCP Module 2 interrupt disabled.
    	 */
    	PIE2	= 0b00000000;
    	/*
    	 *  Weak pullup on PORT enabled
    	 */
    	OPTION	= 0b00000000;
    	/*
    	 *  Port directions: 1=input, 0=output
    	 */
    	TRISC	= 0b00000000;
    	
    	/***** 16F884 Code ****
    	 *  Internal oscillator set to 4MHz
    	 */
    	OSCCON	= 0b01100000;
    	
    	/***** CCP Module 1 Code ****
    	 *  CCP Module 1 disabled
    	 *  CCP Module 1 in PWM mode
    	 *  Output cleared on match
    	 */
    	CCP1CON	= 0b00101001;
    	/*
    	 *  DutyCycle set to 0.25 uSec
    	 */
    	CCPR1L	= 0b00000010;
    	
    	/***** CCP Module 2 Code ****
    	 *  CCP Module 2 disabled
    	 *  CCP Module 2 in PWM mode
    	 *  Output cleared on match
    	 */
    	CCP2CON	= 0b00101001;
    	/*
    	 *  DutyCycle set to 0.25 uSec
    	 */
    	CCPR2L	= 0b00000010;
    	
    	/***** PortA Code ****
    	 *  Port directions: 1=input, 0=output
    	 */
    	TRISA	= 0b00000000;
    	
    	/***** PortD Code ****
    	 *  Port directions: 1=input, 0=output
    	 */
    	TRISD	= 0b00000000;
    	
    	/***** PortE Code ****
    	 *  Port directions: 1=input, 0=output
    	 */
    	TRISE	= 0b00000000;
    	
    //	ei();	// Global interrupts enabled
    	
    }

    -----
    Images attachées Images attachées  

  2. Publicité
  3. #2
    cherwam07

    Re : Allumer une LED avec un pic 16F884 (langage c)

    Salut

    Il n'y a pas de _CONFIG qui spécifie que tu utilise l'oscillateur interne...

  4. #3
    Gérard

    Re : Allumer une LED avec un pic 16F884 (langage c)

    Bonjour,
    Si tu débutes, lis Bigonoff ici : http://www.abcelectronique.com/bigonoff/

  5. #4
    wisto59

    Re : Allumer une LED avec un pic 16F884 (langage c)

    merci pour vos réponses, j'ai en entre temps trouver après 20h recherche sur le net:
    J'ai omis de préciser que j'utilisais l'horloge interne via les bit de configuration. Voici le code compiler sous mikroC qui fonctionne (C'est pas forcément optimiser mais le résultat est la.)

    Code:
    void main() {
    
      ANSEL  = 0;                // Configure AN pins as digital I/O
      ANSELH = 0;
      ADCON1 =    0x07  ;
      PORTC = 0;                 // Initialize PORT
      TRISC = 0;                 // Configure PORT as output
      PORTA = 0;
      TRISA = 0;
      PORTB = 0;
      TRISB = 0;
      PORTB = 0xFF  ;             // portB is high
    
      while(1) {
        i++;
        PORTC =  ~PORTC;    // toggle PORTC
        PORTB -- ;       
        Delay_ms(1000);          // one second delay
      }
    }
    Gérard: le problème des cours Bigonoff est qu'il ne traite que l'assembleur.

    J'ai maintenant un nouveau problème. Quand je coupe l'alimentation et la relance, le led ne clignote plus, j'essaie de reset le pic en mettant MCLR à la masse mais tout ça à l'air très aléatoire, je n'ai pas encore trouver le protocole pour réactiver la LED

  6. A voir en vidéo sur Futura
  7. #5
    Gérard

    Re : Allumer une LED avec un pic 16F884 (langage c)

    Bigonoff traite de l'asm, c'est vrai, mais il explique très bien les principaux registres pour la config des périphériques.
    Si tu ne sais pas le faire, il y a fort à parier que tu auras des ennuis même si tu travailles en C.

Discussions similaires

  1. allumer une Led avec un transistor
    Par Arioch_76 dans le forum Électronique
    Réponses: 1
    Dernier message: 21/01/2008, 22h54
  2. Réponses: 4
    Dernier message: 22/10/2007, 14h00
  3. clignoter une led avec pic 16F873
    Par ibrakanet dans le forum Électronique
    Réponses: 5
    Dernier message: 26/05/2007, 12h25
  4. Test de PIC 16F628 avec une LED...
    Par Raphael2 dans le forum Électronique
    Réponses: 15
    Dernier message: 23/07/2006, 09h37
  5. Allumer et etteindre une LED fonction Volt
    Par Arioch_76 dans le forum Électronique
    Réponses: 5
    Dernier message: 30/10/2005, 19h55
Découvrez nos comparatifs produits sur l'informatique et les technologies.