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 ---
Forum général sur le langage C !

Modérateur : Jérémy

Pic16F877
okonon01
Membre
Membre
Messages : 4
Enregistré en : mars 2016

#1 Message par okonon01 » ven. 11 mars 2016 17:09

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;
}
}
}
Schema1.png


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
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#2 Message par Jérémy » ven. 11 mars 2016 17:20

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
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Pic16F877
mazertoc
Passionné
Passionné
Messages : 201
Enregistré en : juillet 2015
Localisation : Auvernha

#3 Message par mazertoc » ven. 11 mars 2016 17:22

Jérémy a écrit :Je déplace ton sujet dans la catégorie langage C étant donné que c'est celui que tu utilise !

C'est fait !

Pic16F877
okonon01
Membre
Membre
Messages : 4
Enregistré en : mars 2016

#4 Message par okonon01 » ven. 11 mars 2016 17:35

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
Avatar de l’utilisateur
Maître
Maître
Messages : 3260
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#5 Message par paulfjujo » ven. 11 mars 2016 17:46

bonjour,

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
 
Aide toi, le ciel ou FantasPic t'aidera

Pic16F877
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » ven. 11 mars 2016 17:52

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 humour!!

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

idea ! 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
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Pic16F877
okonon01
Membre
Membre
Messages : 4
Enregistré en : mars 2016

#7 Message par okonon01 » ven. 11 mars 2016 18:21

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.

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
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#8 Message par Jérémy » ven. 11 mars 2016 18:38

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 :D )
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Pic16F877
okonon01
Membre
Membre
Messages : 4
Enregistré en : mars 2016

#9 Message par okonon01 » ven. 11 mars 2016 22:28

Merci a tous!
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;
    }
 

Merci !!!! :D :D :D :D :D :D

Pic16F877
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#10 Message par Jérémy » ven. 11 mars 2016 22:55

Super okonon01 !! :bravo:

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 ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 3 invités