Circuit de test : clignotant à LED
- 1- Présentation
- 2- Schéma électrique
- 3- Principe de fonctionnement
- 4- Liste du matériel
- 5- Code source du microcontrôleur PIC (en assembleur)
- 6- Code source du microcontrôleur PIC (en langage C, compilateur mikroC)
- 7- Simulation avec ISIS-Proteus
- 1- Présentation
Ce circuit fait clignoter une LED à une fréquence d'environ 1 Hz.
Vous me direz qu'il est superflu d'utiliser un microcontrôleur pour réaliser cette tâche.
Je vous répondrai que je suis d'accord : un multivibrateur à NE555 est bien suffisant.
Mais la simplicité du montage devrait intéresser les débutants.
On pourra aussi se servir de ce montage comme circuit de test, pour mettre en évidence la défaillance du microcontrôleur.
- Photo du circuit avec un PIC 16F876A : difficile de faire plus simple !
- 2- Schéma électrique
Schéma électrique avec un PIC 16F84A ou 16F628A ou 16F88 (18 broches) :
Schéma électrique avec un PIC 16F876A (28 broches) :
On veillera à utiliser les deux masses (broches 8 et 19).
- 3- Principe de fonctionnement
La base de temps du microcontrôleur PIC est fixée par R2 et C3 :
f OSC1 ≈ 1/(R2.C3) ≈ 2130 Hz
f OSC2 = f OSC1 / 4 ≈ 530 Hz ou 530 cycles par seconde (en pratique : 440 Hz mesurée sur la broche OSC2)
Le microcontrôleur utilise une source d'interruption : celle du module TMR0.
Le module TMR0 (8 bits) est configuré en mode timer (avec prescaler 1:1).
L' interruption a donc lieu tous les 256 cycles, ce qui correspond à environ une demi seconde.
La routine d'interruption inverse le niveau logique de la sortie RA1 : la LED clignote donc avec une période de l'ordre de 1 seconde.
- 4- Liste du matériel
- 1 microcontrôleur PIC 16F84A ou 16F628A ou 16F88 ou 16F876A
- Remarque : vous pouvez demander des échantillons gratuits chez Microchip :)
- 1 LED
- 1 résistance 10 kΩ 1/4 W
- 1 résistance de 220 Ω
- 1 condensateur de 47 nF
- 1 source d'alimentation continue 5 V
- 1 condensateur électrochimique de 10 µF (filtrage de l'alimentation)
- 1 condensateur de 100 nF (filtrage de l'alimentation)
- 1 programmateur pour flasher le programme du microcontrôleur PIC
- 5- Code source du microcontrôleur PIC (en assembleur)
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.
Les programmes sont élémentaires : seulement 11 instructions !
Une version de démonstration est téléchargeable gratuitement (taille du code objet .hex limitée à 2 ko).
/* Circuit de test : clignotant à LED (C) Fabrice Sincère Microcontrôleur PIC 16F876A Langage C : compilateur mikroC v8.2 Bits de configuration : 0x3F73 _RC_OSC : oscillateur RC (0.00213 MHz) _WDT_OFF : watchdog timer OFF _PWRTE_ON : power up timer ON _BODEN_ON : brown out detect ON _LVP_OFF : low voltage program OFF */ # define BIT_LED F1 void interrupt() { // routine d'interruption // 1 seule source d'interruption : TMR0 en mode timer // toutes les 256*1 = 256 cycles (prescaler 1:1) if ((INTCON.T0IE) && (INTCON.T0IF)) { PORTA.BIT_LED = ~PORTA.BIT_LED; // on inverse le niveau logique de la sortie RA1 // => inversion de l'état de la LED INTCON.T0IF = 0; //on efface le drapeau du timer TMR0 } } void main() { // initialisation OPTION_REG = 0b11011111; // bit 5 (T0CS) = 0 : TMR0 en mode timer // prescaler 1:1 ADCON1 = 0b00000110; // la broche RA1 est configurée commme entrée/sortie numérique TRISA = 0b11111101; // bit 1 du port A (RA1) = 0 : configuration en sortie (commande de la LED) PORTA.BIT_LED = 0 ; // Led allumée INTCON = 0b10100000; // bit 7 (GIE) = 1 : autorisation globale des interruptions // bit 5 (T0IE) = 1 : autorisation de l'interruption TMR0 // bit 2 (T0IF)= 0 : on efface le drapeau de l'interruption TMR0 do { // on attend le débordement de TMR0 (0xFF -> 0x00) // ce qui génère une interruption } while(1); }