Bonjour,
Je souhaite commander une led (enfin plusieurs branchées sur un même port) à l'aide d'un bouton poussoir :
- bouton appuyé : led allumée
- bouton relaché : led eteinte
J'ai mis mon montage en pièce jointe. J'ai tenté de faire un anti-rebond logiciel comme vous pouvez le voir ci-dessous, mais je ne suis pas sûr de son exactitude. Je programme sur un PIC16F54 en C avec MPLAB et le compilateur CCS :
Mon problème c'est que ça ne fonctionne pas du tout, la led ne s'allume pas et ne s'éteint pas non plus ^^. Je précise qu'en l'allumant simplement sans bouton poussoir, elle fonctionne. Une idée d'où cela peut provenir ?Code:/** #include <16f54.h> #fuses HS, NOPROTECT, NOWDT #use delay (clock=20000000) #include <stdio.h> // Variables int8 tempo=16; //Variable pour l'anti-rebond char action; int1 inter=0; void anti_rebond(void); // Fonction d'allumage des LEDS void affichage(void){ if(action>0) output_high(PIN_B0); if(action>1) output_low(PIN_B0); } void main(void){ // Configuration des entrées/sorties set_tris_a(0b00000000); set_tris_b(0b11000100); //Initialisation des sorties output_a(0x00); output_b(0b11000011); // Initialisation de l'allumage des leds (bouton relaché) // Eteindre Leds jaunes output_low(PIN_B0); action=0; // Main for(;;){ inter=input(PIN_B2); // On lit le port du BP if(inter){ ++action; anti_rebond(); inter=input(PIN_B2); while(inter); anti_rebond(); } affichage(); } } void anti_rebond(void){ for(tempo=0;tempo<1000;tempo++); //anti-rebond de 10ms }
Merci !
-----