dimanche 9 février 2014

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 !

  • 6- Code source du microcontrôleur PIC (en langage C, compilateur mikroC)
J'utilise le compilateur mikroC de la société mikroElektronika.
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);
}

  • 7- Simulation avec ISIS-Proteus
Proteus est une suite logicielle de CAO électronique éditée par la société Labcenter Electronics.
ISIS est la composante de Proteus qui permet la création de schémas et la simulation électrique.
La grande force de ISIS est de pouvoir simuler le comportement d'un microcontrôleur (PIC, Atmel, 8051, ARM, HC11...) et de son interaction avec les composants qui l'entourent.


          simulation_proteus_isis



(C) Fabrice Sincère ; Révision 1.3.2

Aucun commentaire:

Enregistrer un commentaire