Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Pic16F877
Bonsoir à tous et à toutes,
Je suis nouveau sur ce forum.
Avec plusieurs recherches je voulais ecrire un programme en C avec mikro c pour allumer une led avec un bouton poussoir et l'etteindre avec un autre.
Voici mon que j'ai fais ( j'utilise la version 6.4 de Mikro C et la Version 8 de proteus isi)
sbit BP at PORTB.B0;
void initialisation()
{
TRISC=0b11111111;
TRISB=0b00000000;
PORTB=0b11111111;
PORTC=0b10111111;
}
void main()
{
initialisation();
while(1)
{
if(PORTB.F0==1)
PORTC.F6=1;
else
{
PORTC.F6=0;
Delay_ms(250);
}
if(PORTB.F4==1)
{
PORTC.F6=0;
}
else
{
PORTC.F6=1;
}
}
}
Je n'arrive pas à allumer la led. SV à le faire!!!
MERCI!!!
Je suis nouveau sur ce forum.
Avec plusieurs recherches je voulais ecrire un programme en C avec mikro c pour allumer une led avec un bouton poussoir et l'etteindre avec un autre.
Voici mon que j'ai fais ( j'utilise la version 6.4 de Mikro C et la Version 8 de proteus isi)
sbit BP at PORTB.B0;
void initialisation()
{
TRISC=0b11111111;
TRISB=0b00000000;
PORTB=0b11111111;
PORTC=0b10111111;
}
void main()
{
initialisation();
while(1)
{
if(PORTB.F0==1)
PORTC.F6=1;
else
{
PORTC.F6=0;
Delay_ms(250);
}
if(PORTB.F4==1)
{
PORTC.F6=0;
}
else
{
PORTC.F6=1;
}
}
}
Je n'arrive pas à allumer la led. SV à le faire!!!
MERCI!!!
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Pic16F877
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour okonon01,
Tout d'abord bienvenue sur le forum où je l’espère tu trouveras toutes les réponses à tes questions !
Dnas un premier temps je vais faire mon rabat-joie mais il faudrait que tu lise CORRECTEMENT les règles : rendez-vous ici
Je déplace ton sujet dans la catégorie langage C étant donné que c'est celui que tu utilise !
Ton code doit se trouvé entre deux balises afin de le mettre en forme , et de le rendre lisible par les membres : rendez-vous ici
Je t'invite donc a éditer ton post ( petit crayon en haut à droite) et de mettre les balises autour de ton code.
Sibnon pour ton soucis j'ai fait un tuto qui devrait te sortir d'affaire : Allumer une LED avec un Bouton Poussoir
Je regarde ton code dès qu'il sera entre balises ! pour te guider
Bienvenue encore
Tout d'abord bienvenue sur le forum où je l’espère tu trouveras toutes les réponses à tes questions !
Dnas un premier temps je vais faire mon rabat-joie mais il faudrait que tu lise CORRECTEMENT les règles : rendez-vous ici
Je déplace ton sujet dans la catégorie langage C étant donné que c'est celui que tu utilise !
Ton code doit se trouvé entre deux balises afin de le mettre en forme , et de le rendre lisible par les membres : rendez-vous ici
Je t'invite donc a éditer ton post ( petit crayon en haut à droite) et de mettre les balises autour de ton code.
Sibnon pour ton soucis j'ai fait un tuto qui devrait te sortir d'affaire : Allumer une LED avec un Bouton Poussoir
Je regarde ton code dès qu'il sera entre balises ! pour te guider
Bienvenue encore
Pic16F877
Pic16F877
Code : Tout sélectionner
sbit BP at PORTB.B0;
void initialisation()
{
TRISC=0b11111111;
TRISB=0b00000000;
PORTB=0b11111111;
PORTC=0b10111111;
}
void main()
{
initialisation();
while(1)
{
if(PORTB.F0==1)
PORTC.F6=1;
else
{
PORTC.F6=0;
Delay_ms(250);
}
if(PORTB.F4==1)
{
PORTC.F6=0;
}
else
{
PORTC.F6=1;
}
}
}
Pic16F877
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
si BP est une entree , il faut configurer TRISB.B0=1 ;
ou alors si tu utilises la syntaxe
et dans l ' init rajouter apres le
Code : Tout sélectionner
TRISB=0b00000000;si BP est une entree , il faut configurer TRISB.B0=1 ;
ou alors si tu utilises la syntaxe
Code : Tout sélectionner
sbit BP at PORTB.B0;
sbit BP_direction at TRISB.B0;
et dans l ' init rajouter apres le
Code : Tout sélectionner
TRISB=0b00000000; // en supposant que les autres bits seront utilisés en sorties
BP_direction=1; // ce qui ecrase la config precedente pour B0 , et donc le met en entree au lieu de sortie
Pic16F877
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
J'aurais préféré que tu édite ton premier post plutôt que de remettre le code mais bon....
Et aussi un petit lien vers la DS de ton PIC et c'était le post parfait
Attention à tes BP, il est raisonnable de mettre des condensateur anti-rebond en //, ou alors de le traiter par soft un peu plus tard : regarde ici
Dans ton initialisation, tu configure le PORTB avec TRISB=0b00000000; cela a pour faire effet de le mettre en SORTIE, alors que ton PORTB accueil les BP, il devrait être en ENTRÉE .
Pareil pour le PORTC, tu l'initialise avec TRISC=0b11111111;, qui le met en entrée alors que c'est la sortie pour éclairer ta LED
Un moyen mnémotechnique : mettre un port à 1 ressemble à la lettre "i" et ce "i" correspond à INPUT= Entrée. Et le zéro ressemble à la lettre "o" . "o" Comme OUTPUT.
Après cela ta LED devrait peut être réagir . je te laisse donc réfléchir sur la suite . Si tu bloque ou si tu remarque un comportement inattendu , dis le , je regarderais
Et aussi un petit lien vers la DS de ton PIC et c'était le post parfait
Attention à tes BP, il est raisonnable de mettre des condensateur anti-rebond en //, ou alors de le traiter par soft un peu plus tard : regarde ici
Dans ton initialisation, tu configure le PORTB avec TRISB=0b00000000; cela a pour faire effet de le mettre en SORTIE, alors que ton PORTB accueil les BP, il devrait être en ENTRÉE .
Pareil pour le PORTC, tu l'initialise avec TRISC=0b11111111;, qui le met en entrée alors que c'est la sortie pour éclairer ta LED
Un moyen mnémotechnique : mettre un port à 1 ressemble à la lettre "i" et ce "i" correspond à INPUT= Entrée. Et le zéro ressemble à la lettre "o" . "o" Comme OUTPUT.Après cela ta LED devrait peut être réagir . je te laisse donc réfléchir sur la suite . Si tu bloque ou si tu remarque un comportement inattendu , dis le , je regarderais
Pic16F877
Merci pour votre aide!!!
j'ai survit vos conseils mais maintenant la Led s'allume avec les BP. Quand je maintiens le premier la led s'arrêt pareil pur l'autre.
j'ai survit vos conseils mais maintenant la Led s'allume avec les BP. Quand je maintiens le premier la led s'arrêt pareil pur l'autre.
Code : Tout sélectionner
sbit BP at PORTB.B0;
void initialisation()
{
TRISC=0b00000000;
TRISB=0b11101110;
PORTB=0b00010001;
PORTC=0b11111111;
}
void main()
{
initialisation();
while(1)
{
if(PORTB.F0==1)
PORTC.F6=1;
else
{
PORTC.F6=0;
Delay_ms(1000);
}
if(PORTB.F4==1)
{
PORTC.F6=0;
}
else
{
PORTC.F6=1;
}
}
}
Pic16F877
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
As tu regardé les tuto que je t'ai indiqué ? tu devrais y trouver ta solution
Néanmoins, voici un début de piste.
Tu as mis des résistances de PUll-UP ( vers vcc) sur tes entrées. Donc tes entrées seront toujours à 1, sauf quand on appui sur le BP elle paseront à 0 .
Donc ta condition d'appui n'est pas bonne PORTB.F0==1
De plus il ne faut pas que tu mettes des ELSE dans ton traitement d'appui.
Ca fonctionnera beaucoup mieux , prends ton temps relis ton premier et essaye de le faire déroulé pas à pas dans ta tête ( c'est ce que je fais perso
)
Néanmoins, voici un début de piste.
Tu as mis des résistances de PUll-UP ( vers vcc) sur tes entrées. Donc tes entrées seront toujours à 1, sauf quand on appui sur le BP elle paseront à 0 .
Donc ta condition d'appui n'est pas bonne PORTB.F0==1
De plus il ne faut pas que tu mettes des ELSE dans ton traitement d'appui.
Ca fonctionnera beaucoup mieux , prends ton temps relis ton premier et essaye de le faire déroulé pas à pas dans ta tête ( c'est ce que je fais perso
Pic16F877
Merci a tous!
J'ai vu mon erreur et je l'ai corrige. Cela marche parfaitement.
Voici les changement:
!!!

J'ai vu mon erreur et je l'ai corrige. Cela marche parfaitement.
Voici les changement:
Code : Tout sélectionner
PORTB=0b11111111;
PORTC=0b10111111;
if(PORTB.F0==0)
{
PORTC.F6=1;
PORTC.F6=0;
}
if(PORTB.F4==0)
{
PORTC.F6=0;
}
!!! Pic16F877
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Super okonon01 !!
Mais je pense que sans condensateur anti-rebond ou un minimum de traitement soft, tu va avoir quelques loupé ? est ce que ça fonctionne à tous les coups ? ou des fois tu es obligé d'appuyer deux fois pour prendre en compte l'appui ?
Mais je pense que sans condensateur anti-rebond ou un minimum de traitement soft, tu va avoir quelques loupé ? est ce que ça fonctionne à tous les coups ? ou des fois tu es obligé d'appuyer deux fois pour prendre en compte l'appui ?
Qui est en ligne
Utilisateurs parcourant ce forum : Google [Bot] et 3 invités


