🎯 Objectif du projet

Faire clignoter une LED connectée sur la broche RA0 du PIC16F683 :

C'est le « Hello World » de la programmation embarquée. Ce projet simple vous permet de vérifier que votre chaîne d'outils fonctionne correctement et de comprendre les bases de la configuration du PIC.

🔌 Schéma de connexion

Composants nécessaires :

  • 1× PIC16F683 (boîtier DIP-14)
  • 1× LED rouge (ou couleur de votre choix)
  • 1× Résistance 330Ω (pour limiter le courant à ~15mA)
  • 1× Alimentation 5V (ou programmateur PICkit avec alimentation)
  • 1× Breadboard et fils de connexion

Connexions :

  • RA0 (broche 13) → Résistance 330Ω → Anode LED (+)
  • Cathode LED (-) → GND
  • VDD (broche 1) → +5V
  • VSS (broche 14) → GND
  • MCLR (broche 4) → +5V via résistance 10kΩ (ou désactiver MCLR dans les fuses)

📝 Code source complet

C (XC8 Compiler)
/*
 * Projet : LED Clignotante sur PIC16F683
 * Auteur : JLQDeveloppement
 * Microcontrôleur : PIC16F683
 * Compilateur : XC8
 */

// Configuration des fuses
#pragma config FOSC = INTOSCIO  // Oscillateur interne
#pragma config WDTE = OFF       // Watchdog désactivé
#pragma config PWRTE = ON       // Power-up Timer activé
#pragma config MCLRE = ON       // MCLR activé
#pragma config CP = OFF         // Protection code OFF
#pragma config CPD = OFF        // Protection données OFF
#pragma config BOREN = ON       // Brown-out Reset ON
#pragma config IESO = ON        // Switchover activé
#pragma config FCMEN = ON       // Fail-Safe Clock ON

#include <xc.h>
#include <stdint.h>

#define _XTAL_FREQ 4000000  // 4 MHz

void main(void) {
    
    // ÉTAPE 1 : Oscillateur interne 4 MHz
    OSCCON = 0b01100000;
    
    // ÉTAPE 2 : Toutes les broches en numérique
    ANSEL = 0b00000000;
    
    // ÉTAPE 3 : RA0 en sortie, autres en entrée
    TRISA = 0b11111110;
    TRISC = 0b11111111;
    
    // ÉTAPE 4 : Tout à 0
    PORTA = 0b00000000;
    PORTC = 0b00000000;
    
    // Boucle infinie
    while(1) {
        PORTA = 0b00000001;  // LED ON
        __delay_ms(1000);
        
        PORTA = 0b00000000;  // LED OFF
        __delay_ms(1000);
    }
    
    return;
}

🔧 Variantes du code

Variante 1 : Modification d'un seul bit

Méthode PORTAbits
while(1) {
    PORTAbits.RA0 = 1;    // Allumer LED
    __delay_ms(1000);
    PORTAbits.RA0 = 0;    // Éteindre LED
    __delay_ms(1000);
}

Variante 2 : Opérations bit à bit

Opérations bitwise
while(1) {
    PORTA |= 0b00000001;   // ON avec OR
    __delay_ms(1000);
    PORTA &= 0b11111110;   // OFF avec AND
    __delay_ms(1000);
}

Variante 3 : Toggle avec XOR

Toggle élégant
while(1) {
    PORTA ^= 0b00000001;   // Bascule RA0
    __delay_ms(1000);
}

Variante 4 : Chenillard 4 LEDs

Effet chenillard
TRISA = 0b11110000;  // RA0-RA3 en sortie

while(1) {
    PORTA = 0b00000001;  __delay_ms(200);
    PORTA = 0b00000010;  __delay_ms(200);
    PORTA = 0b00000100;  __delay_ms(200);
    PORTA = 0b00001000;  __delay_ms(200);
}

⚠️ Points d'attention

  • Résistance obligatoire : Toujours mettre une résistance (220-470Ω) en série avec la LED pour limiter le courant
  • Courant maximum : Ne pas dépasser 25mA par broche du PIC
  • ANSEL : Ne jamais oublier de désactiver le mode analogique
  • _XTAL_FREQ : Doit correspondre à la fréquence réelle de l'oscillateur pour que __delay_ms soit précis