Faire clignoter une LED
Les schéma de câblage

On réutilise le même schéma que pour l'allumage d'une LED pour le moment
Le programme
#include <16f876A.h>
#use delay(clock=20000000)
#fuses HS, NOWDT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD
#define LED pin_b1
void main()
{
while(1) //boucle infini
{
output_toggle(LED); //inversion de l'état
delay_ms(100);
}
}
Explications
- Pour les lignes 1 à 7 rien ne change par rapport à l'exemple précédent.
- Ligne 8: une boucle infini, elle exécutera son contenu à l'infini, le seul moyen de l'arrêter est de couper l'alimentation du PIC.
- Ligne 10: la fonction output_toggle() inverse l'état logique de la sortie LED
- Ligne 11: une tempo de 100ms entre chaque inversion d'état logique (ce qui permet de vérifier le clignotement à l'Å“il nu)
Le programme ferra donc clignoté la LED tout les 100ms à l'infini.
Autre solution en utilisant les interruptions
Astuce
Une petite astuce lorsque l'on manque d'E/S sur son PIC, il est possible d'utiliser 2 LED sur la même sortie. Voici un exemple:

(R1(1) est une alimentation de 5v)
- Pour allumer la LED D1 il suffit de mettre la sortie B1 à l'état logique haut
- Pour allumer la LED D2 c'est l'inverse, B1 à l'état bas
- Pour allumer les 2 LED en même temps, il suffit d'utiliser le programme juste au dessus et de réduire le temps d'inversement à un niveau ou l'œil humain n'est plus capable de percevoir le clignotement.
- Et pour éteindre les 2: on utilise la fonction output_float() qui met la sortie en haute impédance
Voila pour l'astuce =)
Le dossier
Je met à vôtre disposition un dossier compresser avec:
- Le fichier source en .C
- Tout les fichiers généré lors de la compilation (notamment le .hex utile à la simulation ou pour envoyer dans le PIC)
- Le fichier de schéma fait sur proteus
- La même capture d'écran qu'au dessus (pour le schéma de câblage)
toggle2LED.rar
Sugi
|