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 ---
Commentez, partagez et proposez des Tutos en langage C !
Allumer une LED avec un Bouton Poussoir
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » lun. 10 août 2015 15:13

Bonjour à tous,

Après ce premier Tuto en guise d'échauffement, je vous propose de compliquer un tout petit peu la chose .

Il existe, encore une fois, des centaines d'exemples sur la toile. Ce Tutoriel est en rapport avec le premier sur les commentaires, et reste dans une suite logique d'apprentissage en douceur, mais avec les bases nécessaire. Si vous n'avez pas les bases et avez besoin d'explications n’hésitez pas à poster un message dans le forum correspondant.


Plaque easyPIC7.jpg

Configuration :

-IDE : MikroC Pro for PIC Version 6.6.2
-Compilateur : Mikro prog suite fo PIC V 2.32
-Plaque Easy PIC V7





L'objectif :

Allumer une LED quand on appuie sur un Bouton poussoir (ou l'inverse, éteindre une led quand on appuie sur un BP) .

Code : Tout sélectionner

void main() {           // ceci contiendra notre programme, c'est la fonction principale(main) et elle est obligatoire.

//#################################     CONFIGURATION    #########################################
ANSELB = 0;             // Configure les broches du PORTB en digital (contrairement à analogique) état haut=1 , état bas=0 .
ANSELC = 0;             // En numérique la valeur 1, c'est à dire un état haut correspond a Vcc et 0 = état bas = la masse .

PORTB = 0;              // Afin d'éviter les surprises, on définit les valeurs du PORTB et PORTC à 0 avant de le mettre en sortie.
PORTC = 0;              // En effet en  passant le PORT B en sortie , la valeur de ses broches vont être initialisé et leurs états seront aléatoires.

                                    // Autre méthode pour configurer les I/O ( Input/Output ou entrée/sortie)
TRISB = 0b00000000;     // En écrivant "0b" on déclare que l'on va écrire en binaire. Chaque chiffres correspondra à une broche du PORT en question.
TRISC = 0b00001111;     // Ainsi on configure les broches indépendamment les unes des autres.Configure tout le PORTB comme sortie en affectant la valeur 0 .
                                    // Configure les broches 1,2,3,4 du PORTC comme entrée en affectant la valeur 1 .

 //#################################     Boucle infinie    #########################################

while(1)                 // Ici c'est notre boucle sans fin.
 {
                         // Introduction d'une condition "if" ( "si" en français)
  if (PORTC.B0 == 1)     // SI la broche 0 du PORTC vaut 1 , càd  à l’état haut, ou Vcc alors on exécute ce qui suit, Sinon on passe au ELSE.
                         // Ici donc on regarde si notre BP est appuyé ou non . s'il est appuyé la valeur sera de 1(Vcc) sinon de 0 (masse).
      
      PORTB
.B0 = 1  ;    //  On met la Broche 0 du PORTB à 1. Ce qui aura pour effet d'allumer la led , comme 1 = Vcc
      
  else                   
// Ici on retrouve notre "SINON" , càd l'action a exécuter si la condition n'est pas remplie.
     {
     PORTB.B0 = 0 ;      // Si la condition du départ n'est pas remplie donc que le PORTC.B0 n'est pas égale a 1 , donc que le BP n'est pas appuyé
     }                   // Alors on met la Broche 0 du PORTB à 0 , donc à la masse , donc la LED est éteinte .

 //----------------------------------------------------------------------------------------------------------------------------
  if (PORTC.B1 == 1)     // Ici la même chose à l'envers, sur un autre BP et une autre LED. Si le BP sur Broche 1 du PORTC est égale à 1.
     
                         
// Alors on éteint la LED sur la Broche 1 du PORT B
       {PORTB.B1 = 0 ;}  // Ici vous pouvez remarquez qu'il y a des {} qui entoure la commande. En fait si il n'y a qu'une seule ligne dans le "IF" , on peut ne pas les mettre .
                         // Mais toutefois je vous conseille de garder le réflexe de les mettre out le temps.
    else
    
     
{PORTB.B1 = 1 ;}    // Sinon on l'allume. Donc quand le BP ne sera pas appuyé, la led LED sera allumée.


 }                      // Nous arrivons à la parenthèse de la boucle infini, donc on repart au début et ainsi de suite .
}                       // Fin de notre fonction principale                 



Conseils :
- Dans ce Tutoriel, il n'ai pas question de rebond sur le BP, tout simplement car l'action à faire est en rapport avec le temps d'appui sur le BP et pas le fait de détecter un appui. Si vous ne savez vas pas ce qu'est un rebond, regardez donc le tuto à ce sujet !

- Le = ou == est très souvent une source d'erreur. Le double == est utilisé à titre de comparaison, savoir si les deux valeurs sont pareils ou njon. Tandis que un seul =affecte une valeur.

http://www.dailymotion.com/video/x31ar72
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Tuto N°2, allumer une LED avec un Boutton Poussoir
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#2 Message par Gérard » dim. 13 sept. 2015 14:47

Tu as écris "if (PORTC.B1 == 1)"
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Tuto N°2, allumer une LED avec un Boutton Poussoir
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » dim. 13 sept. 2015 15:04

Oui Gérard,

C'est bien la bonne formulation !.
Si la broche 1 du PORT C est mise à 1 , alors on exécute le code
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Tuto N°2, allumer une LED avec un Boutton Poussoir
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#4 Message par Gérard » dim. 13 sept. 2015 15:06

PORTC.B1 ou PORTC.C1 ?
Je suis nul en C. :mrgreen:
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Tuto N°2, allumer une LED avec un Boutton Poussoir
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#5 Message par Jérémy » dim. 13 sept. 2015 15:25

Grrrr mon tuto n'est donc pas au point.

En MikroC la syntaxe est "PORTC.B1" . Le PORTC désignant le PORT en question . et le "B" le numéro de la Broche ! B pour Broche moyen mnémotechnique .
Je crois qu'avec MPLAB la syntaxe est légèrement différente . Si je dis pas de bêtises il faudrait ecrire "F1" en lieu et place de "B1"
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Allumer une LED avec un Boutton Poussoir
PEDRO
Amateur
Amateur
Messages : 127
Enregistré en : septembre 2015
Localisation : P.A.C.A

#6 Message par PEDRO » ven. 18 sept. 2015 07:52

Bonjour à tous,

je ne parle pas bien le C, mais j'aurai plutôt dit :

if (PORTC.1 == 1)

Bonne journée

Allumer une LED avec un Boutton Poussoir
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#7 Message par Jérémy » ven. 18 sept. 2015 08:56

Bonjour PEDRO et Bienvenue sur fantasPic.fr

D’après ma maigre expérience (encore), la ou le code varie le plus d'un compilateur à l'autre, c'est bien sur l'appelle des ces broches.
J'ai testé ta ligne de code avec MikroC elle ne fonctionne pas.

Peut être parlais tu pour MPLAB ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Allumer une LED avec un Boutton Poussoir
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#8 Message par Guest » ven. 18 sept. 2015 17:06

bonjour

Code : Tout sélectionner

/* Pins connect? sur le LCD */
#define RW         PORTCbits.RC6        /* PORT pour RW */
#define RS         PORTCbits.RC5      /* PORT pour RS */
#define E          PORTCbits.RC4     /* PORT pour E  */


sous MPLABX XC8

A+

Allumer une LED avec un Boutton Poussoir
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#9 Message par HULK28 » sam. 19 sept. 2015 12:07

La syntaxe est sensiblement la même d'un compilo à l'autre, sous MikroC on peut utiliser plusieurs façons de faire, cela est du à la compatibilité ascendante avec les écritures employées sur les versions ultérieures.

Pour savoir exactement quoi utiliser il suffit d'aller voir dans le fichier des définitions du compilateur (pour MikroC c'est le répertoire defs, ensuite il faut ouvrir le .c correspondant par exemple PIC18K66K80.c et de chercher la ou les déclarations associées).

Faire bien attention dans la nuance déclarative de PORTA par exemple avec LATA, les 2 ne sont pas équivalents, le premier sert à lire un port le second à écrire sur le port.

On y trouve:

Code : Tout sélectionner

sbit  LATA0_bit at LATA.B0;  // on peut donc écrire indiféremment LATA0_bit ou LATA.B0


ou

Code : Tout sélectionner

// Alternative bit function
    const register unsigned short int RA0_PORTA = 0;
    sbit  RA0_PORTA_bit at PORTA.B0;  // On peut écrire soit RA0_PORTA_bit ou PORTA.B0
   


il est également possible de déclarer une écriture personnelle:

Code : Tout sélectionner


sbit PORTA0_Write   at LATA.B0
sbit PORTA0_Read    at PORTA.B0
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités