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

question sur langage c pour pic
dyli
Débutant
Débutant
Messages : 33
Enregistré en : février 2017

#1 Message par dyli » sam. 15 avr. 2017 19:34

Bonsoir tout le monde,

J'ai 2 questions concernant ces lignes de code dans ce programme du pwm du pic 16f887

if (Button(&PORTA, 0,1,0)) /* Si le bouton connecté à RA0 est
pressé*/
current_duty++ ; // incrémenter la valeur de current_duty
if (Button(&PORTA, 1,1,0)) /* Si le bouton connecté à RA1 est

1- : if (Button(&PORTA, 0,1,0)) dans ces 2 lignes le 1er 0 est pour designer RA0, et le 1 dans la 2eme ligne pour RA1 quelle
est la fonction de 1, 0 qui suit juste apres ?
2- if (Bouton (&.... la fonction bouton me semble permet d'eviter les rebonds des bouton poussoir? et que fait ce signe & ( adresse de )

RA0 ET RA1 sont reliées via des resistances a 5V, donc quand on appuie sur le bouton on les met a 0.

Merci

Code : Tout sélectionner

CCP1CON =0b00111110; /* Uniquement pour la simulation. 
Enlever cette instruction avant 
de programmer le microcontrôleur*/
 
PWM1_Init
(5000);  // Initialisation du module PWM (5KHz)
}
void main() // Programme principal
{
initMain();
current_duty = 155;   /* Valeur initiale de variable 
current_duty*/
old_duty = 0;                 // RAZ de variable old_duty
PWM1_Start();                 // Start  du module PWM1 
while (1)
{
                                // Boucle sans fin
if (Button(&PORTA, 0,1,0))       /* Si le bouton connecté à RA0 est 
pressé*/
current_duty++ ;               // incrémenter la valeur de current_duty
if (Button(&PORTA, 1,1,0))       /* Si le bouton connecté à RA1 est 
pressé*/
current_duty-- ;               // décrémenter la valeur de current_duty
if (old_duty != current_duty)
{
                                /* Si les variables current_duty et
                                 old_duty ne sont pas égales*/
                             
PWM1_Set_Duty
(current_duty);   // Charger PWM à la nouvelle valeur
old_duty = current_duty;       /* Sauvegarder la nouvelle valeur
PORTB = old_duty;               et l'afficher sur le PORTB*/
}
Delay_ms(150);                  // Retardement de 150ms
}
}

question sur langage c pour pic
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » dim. 16 avr. 2017 18:42

bonjour,

il suffit de lire l' Help de la librairie Button

unsigned short Button(unsigned short *port, unsigned short pin, unsigned short time, unsigned short active_state);

unsigned short *port => pointeur sur l'adresse du port soit &PORTA
unsigned short pin 0 pour RA0 , 1 pour RA1 ..etc numero du bit concerné dans le port
unsigned short time duree de "filtrage" en mS .. pas tres clair ici
unsigned short active_state si on considere que le BP est actif au niveau logique 0 => 0
sinon on met 1. si c'est en appliquant un 1 logique que le BP est actif

nota : BP = Bouton Poussoir

je ne me suis jamais servi de cette fonction..
ce qui est curieux c'est que le debounce time est toujours à 1 dans les multiples exemples vus sur la toile
(donc 1 mS ou byte representant un état logique permettant de rajouter ce debounce time , qui serait alors defini ou ça ?
tu peux toujours tester avec un debounce time de 100 ou 255 ..pour voir .

exit un amateur ASM pour debroussailler ceci ?
Aide toi, le ciel ou FantasPic t'aidera

question sur langage c pour pic
dyli
Débutant
Débutant
Messages : 33
Enregistré en : février 2017

#3 Message par dyli » dim. 16 avr. 2017 19:39

Bonsoir Paul,

Merci pour ces explications, j'avoue ca aurait été difficile de comprendre sans ces explication, le help étant en anglais.


Retourner vers « Langage C »

Qui est en ligne

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