Allumer une LED avec un pic 16F884 (langage c)
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

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



  1. #1
    invitea9087f3b

    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. #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...

  3. #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/

  4. #4
    invitea9087f3b

    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

  5. A voir en vidéo sur Futura
  6. #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 invite5ea18acc dans le forum Électronique
    Réponses: 1
    Dernier message: 21/01/2008, 22h54
  2. PIC, comment allumer une LED précise et pas toutes celles du port ?
    Par invite116c4f9b dans le forum Électronique
    Réponses: 4
    Dernier message: 22/10/2007, 14h00
  3. clignoter une led avec pic 16F873
    Par invite0ff982b6 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 invite5ea18acc dans le forum Électronique
    Réponses: 5
    Dernier message: 30/10/2005, 19h55
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...