- 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
- Photo du circuit avec un PIC 16F876A : difficile de faire plus simple !
- 2- Schéma électrique
On veillera à utiliser les deux masses (broches 8 et 19).
- 3- Principe de fonctionnement
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)
- 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)
/* 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); }