🎯 Objectif du projet

Faire clignoter une LED connectée sur la broche GP2 du PIC12F683 :

C’est le « Hello World » des microcontrôleurs PIC : idéal pour valider ton programmateur, ta config MPLAB X/XC8 et comprendre la direction des broches (TRISIO) et l’écriture sur le port (GPIO).

🔌 Schéma de connexion (PIC12F683 DIP-8)

Composants nécessaires :

  • 1× PIC12F683 (boîtier DIP-8)
  • 1× LED (couleur au choix)
  • 1× Résistance 220Ω à 470Ω (330Ω recommandé)
  • 1× Alimentation 5V (ou PICkit avec alimentation)
  • 1× Breadboard + fils

Connexions :

  • VDD (broche 1) → +5V
  • VSS (broche 8) → GND
  • GP2 (broche 5) → Résistance → Anode LED (+)
  • Cathode LED (–) → GND
  • MCLR / GP3 (broche 4) → +5V via résistance 10kΩ (si MCLRE = ON)

💡 Astuce : si tu veux éviter le câblage MCLR, mets MCLRE = OFF dans les fuses (la broche 4 devient une entrée GP3).

📝 Code source complet (XC8) — LED sur GP2

C (XC8 Compiler)
/*
 * Projet : LED Clignotante sur PIC12F683 (DIP-8)
 * Auteur : JLQDeveloppement
 * Microcontrôleur : PIC12F683
 * Compilateur : XC8
 * Sortie LED : GP2
 */

// Configuration des fuses (PIC12F683)
#pragma config FOSC = INTRCIO  // Oscillateur interne, GP4/GP5 en I/O
#pragma config WDTE = OFF      // Watchdog désactivé
#pragma config PWRTE = ON      // Power-up Timer activé
#pragma config MCLRE = ON      // MCLR activé (GP3 = MCLR)
#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 (IRCF = 110)
    OSCCON = 0b01100000;

    // ÉTAPE 2 : Tout en numérique
    ANSEL = 0b00000000;

    // ÉTAPE 3 : Désactiver les comparateurs (recommandé)
    CMCON0 = 0b00000111;

    // ÉTAPE 4 : Direction des broches
    // GP2 en sortie (0), le reste en entrée (1)
    TRISIO = 0b00111011; // GP5..GP0 = 1 1 1 0 1 1

    // ÉTAPE 5 : Tout à 0
    GPIO = 0b00000000;

    // Boucle infinie
    while(1) {
        GPIObits.GP2 = 1;     // LED ON
        __delay_ms(1000);

        GPIObits.GP2 = 0;     // LED OFF
        __delay_ms(1000);
    }
}

🔧 Variantes du code (PIC12F683 / GP2)

Variante 1 : Toggle simple (bascule)

Toggle GP2
while(1) {
    GPIObits.GP2 = !GPIObits.GP2;
    __delay_ms(1000);
}

Variante 2 : Opérations bit à bit (OR/AND)

Bitwise sur GPIO
// Masque GP2 = 0b00000100
while(1) {
    GPIO |= 0b00000100;   // GP2 = 1
    __delay_ms(1000);

    GPIO &= 0b11111011;   // GP2 = 0
    __delay_ms(1000);
}

Variante 3 : XOR (toggle élégant)

XOR toggle
while(1) {
    GPIO ^= 0b00000100;   // Toggle GP2
    __delay_ms(500);
}

⚠️ Erreurs fréquentes (PIC12F683)

  • Oublier ANSEL = 0 : certaines broches restent en analogique.
  • TRISIO incorrect : si GP2 reste en entrée, la LED ne s’allumera pas.
  • MCLR : si MCLRE = ON et la broche 4 flotte, le PIC reset en boucle.
  • _XTAL_FREQ doit correspondre à la fréquence réelle, sinon __delay_ms est faux.