Bonjour, je cherche à écrire un prg en mikroC qui me permet d'allumer une led ( sur RB0)seulement si j'appuie sur le boutton poussoir (sur RA0) 5 fois
si qqn pourrait m'aider
-----
Bonjour, je cherche à écrire un prg en mikroC qui me permet d'allumer une led ( sur RB0)seulement si j'appuie sur le boutton poussoir (sur RA0) 5 fois
si qqn pourrait m'aider
C'est une blague ?
Donne nous ton code !
en fait, je sais pa comment incrémenter à chaque fois que j'appuie sur le bouton poussoir; j'ai essayé pa mal de truc genre
#define Bp porta.f0
#define Led portb.f0
void main() {
portB=0;
trisB=0x00;
portA=0;
trisA=0xFF;
if (Bp==1) {
Led=0;}
Bp=i;
i++;
if (i==2){
Led=0;}
if (i==3) {
Led=0;}
if (i==4) {
Led=0;}
if (i==5) {
Led=1;}
if (i=6 )
{i=1;} }
mais ça marche pa, et à noter que je suis pa du tt pro dans ce domaine
Salut,
Je te conseille de relire attentivement des tutos sur la programmation C, et sur les pics également
Pour faire un test en C si toto=1 il faut faire if (toto==1)
De quel type est i? Quelle est sa valeur de départ?
Donc tu incrémentes une variable, mais (meme si je connais pas mikroc) c'est qu'il faut boucler sinon tu ne vas l'incrémenter qu une fois, et encore si tu as le temps
http://www.ltam.lu/cours-c/prg-c54.htm
Apres si tu regardes ton code, tu verras (entre autre) que tu réinitilise ta variable à 1, mais tu n'allumes pas ton bouton .
A lire
http://www.mikroe.com/chapters/view/...rocontrollers/
A lire aussi
http://www.mikroe.com/chapters/view/...r-3-i-o-ports/
Bon début
bonjour,
Quel type de PIC ?
Essaie deja de faire tourner l'exemple de la librairie Button de MikroC
et apres , tu innoves...Example reads RB0, to which the button is connected;
on transition from 1 to 0 (release of button), PORTD is inverted:
Y a une lib avec une fonction qui va bien pour lire les BP dans MikroC... Et qui gère les rebonds !!! Vous vous rendez compte ma p'tite dame... ?
Avec un if (bp==1), tu vas juste faire marrer les autres... Lol
Faut déclarer le i avant de l'utiliser.
Ensuite, tu fais un for pour boucler et tester ton BP...
Faut aborder une meilleur approche structurelle MikroC ou pas.
mercii pr vos réponses , juste je tiens à vs dire que le BP doit fonctionner en étant un compteur, c mon projet de stage, et je maitrise pas du tout la programmation
le i je l'ai bien déclaré , le code que j'ai envoyé n'étais pas complet, voila merci et si vous avez une idée n'hesitez pas à m'informer, car on est ici pour apprendre jonathan
Oui, je sais bien que l'on est la pour apprendre, mais parfois, si on peux rire au passage... J'ai ris, je me suis montré taquin, mais j'ai tout de même apporté ma pierre à l'édifice...
Si ton BP est en réalité une entrée, tu dois alors en effet pas mettre en oeuvre la libraire de BP de MikroC.
if (Bp==1) Led=0;
Bp=i; -> On va supposer que c'est 1 vu que tu le met à 1 à la fin
i++;
if (i==2) Led=0;
if (i==3) Led=0;
if (i==4) Led=0;
if (i==5) Led=1;
if (i==6 ) i=1;
Tu travaille avec i et pas BP, donc ton programme la tourner en boucle en faisant simplement incrémenter i
Tu perd un temps de comptage avec le i==6. Il parasite ton comptage initial et si tu démarre de 1, tu met que 4 coups pour arriver à 5
while (BP!=1){}; //On attend que bp passe à 1.
if (BP==1){
i++;
if (i==5) {
led=1;
i=0;
} else {
led=0;
}
}
Un truc du genre devrait fonctionner, à froid...
Bonjour,
typiquement le genre de code qui ne fonctionnera pas (la led s'allumera au bout de 2,3... ou avec beaucoup de chance 5 appuis).
Un bouton poussoir créé des rebonds qu'il convient de filtrer sans quoi le fonctionnement sera totalement erratique selon la qualité de l'appui variable selon chaque individu et de la qualité du bouton.
Le principe est simple:
-détection de l'appui par un changement de front (haut vers bas par exemple) cela peut se faire par polling ou par interruption (mode interruptif bien supérieur)
-on décompte une tempo paramétrable dès le 1er changement d'état afin de ne pas prendre en compte d'autres appuis parasites, puis à la fin de cette tempo on valide appui=1.
-cette variable sera incrémentée après chaque nouvel appui.
-lorsque appui=5 on allume la led.
La fonction anti-rebonds est indispensable.
-
Mercii infiniment pour votre aide, là j'ai suivi un peu ce que vous m'avez dit, et ça marchais pas, du coup j'ai essayé un truc de ce genre
#define Led portb.f0
void main() {
char test=5;
portB=0;
trisB=0x00;
portA=0;
trisA=0xFF;
Led=0;
OPTION_REG.F0=1;
TMR0=0;
do
{
if (TMR0==test)
Led=1; }
}
ça marche tjrs pas, et il y a un msg d'erreur que j'arrive pas à m'en débarasser , sinon je croi que je ne suis pas loin, i hope so!
Normal que ça ne fonctionne pas, si tu veux te servir du timer il ne faut pas t'y prendre ainsi...
-il faut configurer ton timer pour qu'il déborde au bout de x ms, par exemple 100ms, pour cela tu peux t'aider du logiciel suivant:
http://www.mikroe.com/timer-calculator/
Puis tu configures ton registre d'interruption pour t'en servir.
Si tu patauges tu reviens ici, le mieux pour apprendre étant d'essayer avant d'avoir la solution toute cuite dans le bec.
@+
Si tu précisais la référence de ton PIC se sera incontestablement un plus
je travaille avec le 16F84a
en fait c bon il marche, j'ai juste connecté la patte RA4 ( celle en rapport avec le timer0)avec le BP sur isis et ça marche, c était évident depuis l début :3 , merci infiniment
bonjour,
Cela fonctionne sur ISIS.. avec un BP ideal sans rebonds ..
et en reel cela donne quoi ?
salut, j'ai juste essayé sur ISIS