🚨 PIC16F877A : gyrophare LED rouge et bleue
Après le premier test avec une LED, on passe à un montage un peu plus complet : un PIC16F877A programmé avec un PICkit 3, un quartz de 16 MHz et deux LED commandées par RB0 et RB1.
🎯 Objectif
Le but est de réaliser un petit effet de gyrophare rouge et bleu. Le PIC16F877A allumera alternativement les deux LED pour créer un clignotement de type gyrophare.
Ce projet permet aussi de voir le câblage minimum du PIC16F877A : alimentation, broche MCLR, quartz externe et connexion du PICkit 3.
1️⃣ Matériel nécessaire
- 1 PIC16F877A ;
- 1 PICkit 3 ;
- 1 breadboard ;
- 1 quartz de 16 MHz ;
- 2 condensateurs de 22 à 26 pF ;
- 1 résistance de 10 kΩ pour MCLR ;
- 1 LED rouge ;
- 1 LED bleue ;
- 2 résistances de 220 à 330 Ω pour les LED ;
- des fils Dupont ;
- une alimentation 5 V.
2️⃣ Comprendre le branchement du PIC16F877A
Le câblage principal sera réalisé dans cet ordre :
MCLR / pin 1 → résistance 10 kΩ → +5 V
VDD / pins 11 et 32 → +5 V
VSS / pins 12 et 31 → GND
Quartz 16 MHz → entre les pins 13 et 14
Pin 13 → condensateur 22 à 26 pF → GND
Pin 14 → condensateur 22 à 26 pF → GND
RB6 / pin 39 → PGC du PICkit 3
RB7 / pin 40 → PGD du PICkit 3La broche MCLR est maintenue à l'état haut avec une résistance de 10 kΩ vers +5 V. Les deux broches VDD et les deux broches VSS doivent être raccordées.
3️⃣ Réaliser le montage des deux LED
La LED rouge est reliée à RB0, broche 33 et la LED bleue à RB1, broche 34. Chaque LED reçoit sa propre résistance de limitation.
RB0 / pin 33 → résistance 220 à 330 Ω → LED rouge → GND
RB1 / pin 34 → résistance 220 à 330 Ω → LED bleue → GNDLa patte longue de la LED correspond généralement à l'anode (+) et la patte courte à la cathode (-).
4️⃣ Programmer le gyrophare avec XC8
Le quartz externe est à 16 MHz. Le mode d'oscillateur est donc configuré en HS et la fréquence est indiquée à XC8 avec _XTAL_FREQ.
#include <xc.h>
#define _XTAL_FREQ 16000000
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF
void main(void)
{
TRISBbits.TRISB0 = 0;
TRISBbits.TRISB1 = 0;
PORTBbits.RB0 = 0;
PORTBbits.RB1 = 0;
while(1)
{
PORTBbits.RB0 = 1;
PORTBbits.RB1 = 0;
__delay_ms(1000);
PORTBbits.RB0 = 0;
PORTBbits.RB1 = 1;
__delay_ms(1000);
}
}
- TRISB0 = 0 configure RB0 en sortie ;
- TRISB1 = 0 configure RB1 en sortie ;
- RB0 commande la LED rouge ;
- RB1 commande la LED bleue ;
- __delay_ms(1000) règle la vitesse d'alternance.
5️⃣ Téléverser et tester
Dans MPLAB X, sélectionne le PIC16F877A, le compilateur XC8 et le PICkit 3. Compile puis programme le microcontrôleur.
Une fois la programmation terminée, les deux LED doivent continuer à clignoter en alternance. Si elles ne fonctionnent que pendant la programmation, vérifie MCLR, VDD/VSS et le quartz.
6️⃣ Résultat en vidéo
7️⃣ Essayer un gyrophare plus rapide
Le programme utilise une temporisation de 1000 ms. Pour accélérer l'alternance, remplace les deux délais par 100 ms. Pour une vitesse intermédiaire, utilise 500 ms.
// Plus rapide
__delay_ms(100);
// Vitesse intermédiaire
__delay_ms(500);
📊 Résumé du montage
| Élément | Connexion / rôle |
|---|---|
| MCLR / pin 1 | Résistance 10 kΩ vers +5 V |
| VDD / pins 11 et 32 | Alimentation +5 V |
| VSS / pins 12 et 31 | Masse GND |
| Quartz / pins 13 et 14 | Horloge externe 16 MHz |
| RB0 / pin 33 | Commande la LED rouge |
| RB1 / pin 34 | Commande la LED bleue |
| RB6 / pin 39 | PGC du PICkit 3 |
| RB7 / pin 40 | PGD du PICkit 3 |
✅ Conclusion
Ce montage permet de réaliser un premier projet complet avec le PIC16F877A : alimentation, quartz externe, programmation avec le PICkit 3 et commande de deux sorties numériques.
Avec RB0 et RB1, nous obtenons un effet de gyrophare simple que l'on pourra ensuite améliorer avec plusieurs flashs, des timers ou des interruptions.
Pour revoir le premier test sur PORTB, consulte le tutoriel LED clignotante du PIC16F877A.