parquoi on peut remplacer le not
j'ai deja mis le led1=!led1
mais ca march pas
le not le compilateur le connait pas
-----
parquoi on peut remplacer le not
j'ai deja mis le led1=!led1
mais ca march pas
le not le compilateur le connait pas
si obligé...
essaye not led1 sans parenthéses...
sinon il faut regarder la doc du compilo...
le not est obligatoirement utilisable...
c'est une "fonction" de base...
qui est dans TOUS les compilos...
renseignes toi...
au pire le not est "émulable"...
mais là faut rajouter des variables, compteurs et conditions...
pour chaque BP/LED...
peut-être que le not ne peut agir directement sur le port...
crée une variable...
char a
et tente
not a...
voir si là ça fait une erreur...
si pas d'erreur, il faut ajouter une variable "état" par led,
comme dans mon premier exemple... pour faire le "not"
dessus plutot que directement sur le port...
ok je vais tester ca merci bcp pour votre aide et dsl pour le derangement
pour le compilo j'ai CCX5 sous mplap avec isis pour simulation
re ;O]
et pour un fonctionnement "normal" dans la réalité,
il faudra remettre un anti-rebonds dans chaque bloc
de condition BP...
sinon un appui sur le BP pourrait génerer plusieurs impulsions...intempestives...
qui fausseront le résultat (led éteinte au lieu d'allumée et vis-versa)...
un anti-rebonds, c'est une temporisation, de 100ms par exemple...
ça donnera :
if BP1 = 1
{
....
....
delay_ms(100) // ça pareil je sais pas comment ça se code en CCX,
// mais il doit y avoir une "fonction" delai "prédéfinie"...
}
j'ai deja programmé une fonction antirebond avec 20 ms et ca march pour la fonction delay je l'avait essayée hier mais ca pas marcher
pour le complement j'ai utilisé une var pour chaque led
comme suit
a=!a;
led1=a;
avec la fonction antirebond biensur
je vais voir avec les autres leds
et je vous informe
le code a été optimisé avec le complement mais tjr le prob de la boucle
je sais pas quoi faire
pour l'indepandance des leds
tjr si je veux allumer une,l'autre s'eteind
impossible d'avoir les deux allumées
non, pas avec mon code...
il faut utiliser une variable par BP,
et pas "a" pour tous les BP...
ou c'est ta simu qui n'est pas au point...
je suis sur que dans mon exemple, un
appui sur un BP n'a aucune incidence
sur l'état des autres leds...
sur un montage "réel"...
j'ai copie coller ton code biensur avec les modifications des not et l'antirebond
mais rien
le voila
Code:#pragma chip pic16f877 bit inter1 @PORTB.0; //Bp1 bit inter2 @PORTB.1; //Bp2 bit inter3 @PORTB.2; //Bp3 bit inter4 @PORTB.3; //Bp4 bit led1 @PORTA.0; //Led1 bit led2 @PORTA.1; //Led2 bit led3 @PORTA.2; //Led3 bit led4 @PORTA.3; //Led4 char a,b,c,d; unsigned tempo:16; void antirebond(void); void main(void) { a=0;b=0;c=0;d=0; TRISA=0b11100000; TRISB=0b11111111; while(1) { if (inter1==1) {antirebond();while(inter1);a=!a; led1=a;antirebond(); } if (inter2==1) {antirebond();while(inter2);b=!b; led2=b;antirebond(); } if (inter3==1) {antirebond();while(inter3);c=!c; led3=c;antirebond(); } if (inter4==1) {antirebond();while(inter4);d=!d; led4=d;antirebond(); } } } void antirebond(void) { for (tempo=0;tempo<2000;tempo++); //fonction pour antirebond de 20 ms }
ok, essaye ça :
si ça ne fonctionne pas, je baisse les bras...Code:#pragma chip pic16f877 bit inter1 @PORTB.0; //Bp1 bit inter2 @PORTB.1; //Bp2 bit inter3 @PORTB.2; //Bp3 bit inter4 @PORTB.3; //Bp4 bit led1 @PORTA.0; //Led1 bit led2 @PORTA.1; //Led2 bit led3 @PORTA.2; //Led3 bit led4 @PORTA.3; //Led4 char a,b,c,d; unsigned tempo:16; void antirebond(void) { for (tempo=0;tempo<2000;tempo++); //fonction pour antirebond de 20 ms } void main(void) { a=0;b=0;c=0;d=0; TRISA=0b11100000; TRISB=0b11111111; while(1) { if (inter1==1) { a=!a; led1=a; antirebond(); } if (inter2==1) { b=!b; led2=b; antirebond(); } if (inter3==1) { c=!c; led3=c; antirebond(); } if (inter4==1) { d=!d; led4=d; antirebond(); } } }
et si ça ne fonctionne pas, c'est au niveau de la simu...
ou attendons d'autres zavis zavisès..
;O]
ca marche pas malheureusement je pense a enregistre l'etat de la led sur un registre et de faire la mise a jour chaque fois ou bien concatination d'une chaine de caractere pour l'envoyer sur le port
re :
en fait moi je vois pas comment un appui pourrait changer
l'état d'une autre led... que celle du BP correspondant...
vu le programme...
bon ben on va voir ce qu'en penses les autres...
en attandant les autre je vous remercie pour l'aide que vous m'avez apporté
a bientot
re ;O]
pas de souci...
mais je trouve quand même tout ça très très zétrange ;O]
vu la dernière version du programme...
tu as bien re-compilé le code?
je vois pas comment un appui sur BP1 pourrait
changer l'état d'une autre led que la LED1...
d'après moi c'est une "subtilité" du compilo...
ou du simulateur...
enfin on verra...
Bonjour,
peut-etre une piste : qu'est-ce que ca donne en changeant
char a,b,c,d;
par
bit a,b,c,d;
?
rien de speciale le meme prob je commence a se desespere
Bonsoir,
[humour]
là je crois que je l'ai "épuisé", le pauvre bs.amine ;O]
[/humour]
vede
;O]
ps: et c'est même pas vrai... il est encore là ;O]
re ps : ça vient de ta simu alors...
ferme tout...relance... recharge le programme...
ca commence a devenir tres dur
je dois le faire avant mardi max et je me suis bloqué a cette etape la
re ;O]
qu'est ce qui se passe exactement...
t'appui sur BP1... LED1 s'allume...
puis
t'appui sur BP2... LED2 s'allume...mais LED1 s'éteint...
c'est pas cohérent avec le programme...
HHHHHH
logiquement ca doir marche
mais avec simulation je vois pas comment
si on imnrique les if
if else if else
re ;O]
j'y connais rien en simu...
c'est pas mon truc...
et je vois pas ce que ça changerais...
ce code "fonctionne"... en "réel"...
et de toute façon il suffit de le lire...
un appui sur BP2 ne peut changer l'état d'une autre Led que la Led2...
créé un nouveau fil "aide simu PIC isis"...
SSSSSSSOOOOOOOOOOOOOOOOSSSSSSS SSSSSS
personnes pour resoudre ca fameux prob
re ;O]
comme le comportement en simu ne paraît
pas avoir changé avec toutes ces modifs (bizarre),
j'ai peur que tu oublies de re-compiler avec CCX
puis recharger dans isis le programme re-compilé...
teste ça, la Led1 et 3 doivent s'allumer au démarrage...
sinon...
Code:#pragma chip pic16f877 bit inter1 @PORTB.0; //Bp1 bit inter2 @PORTB.1; //Bp2 bit inter3 @PORTB.2; //Bp3 bit inter4 @PORTB.3; //Bp4 bit led1 @PORTA.0; //Led1 bit led2 @PORTA.1; //Led2 bit led3 @PORTA.2; //Led3 bit led4 @PORTA.3; //Led4 void main(void) { TRISA=0b11100000; TRISB=0b11111111; while(1) { led1=1; led3=1; } }
Je suis du meme avis que vede, ce code devrait marcher tel quel, donc a voir du coté de la simulation ...
quelques chose qui cloche dans la simulation car les deux leds apparaient comme elles alternent d'etat il ne sont pas stable
est ce que ca peut etre la mal configuration du prot a
car il peut etre utilise comme entree sortie analogique ou bien numerique