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

Questions concernant PWM du pic 16f877 mikro c
dyli
Débutant
Débutant
Messages : 33
Enregistré en : février 2017

#1 Message par dyli » lun. 10 avr. 2017 15:38

Bonjour tout le monde,

J'ai quelques questions concernant ce programme en C que j 'arrive pas a bien comprendre. Merci de vos réponses.

1- pourquoi le chiffre 16 pour ceci; je pense on doit commencer par un chiffre quelconque.. short current_duty_1 = 16; // initial value for current_duty_1
2- pourquoi ce signe '!' dans cette ligne, if (!RD0_bit) // if button on RD0 pressed c'est un no logique , not ( juste RD0 est relié a 5V via une resistance de 10k ) a la place on pouvait pas écrire if RD0= 0?


Code : Tout sélectionner

  // Exercice  PWM      PIC16F877A Mikro c
  void main()
{
  short current_duty_1  = 16; // initial value for current_duty_1
  short current_duty_2 = 16;  // initial value for current_duty_2

  TRISD = 0xFF; // PORTD as input
  TRISC = 0x00; // PORTC as output

  PWM1_Init(5000);  // frequence 5Khz Initialize PWM1
  PWM2_Init(5000);  //frequence 5khz Initialize PWM2

  PWM1_Start();  // start PWM1
  PWM2_Start();  // start PWM2

  PWM1_Set_Duty(current_duty_1); // Set current duty for PWM1
  PWM2_Set_Duty(current_duty_2); // Set current duty for PWM2

  while (1)        // endless loop
  {
     if (!RD0_bit)   // if button on RD0 pressed
     {
      Delay_ms(40);
      current_duty_1++;  // increment current_duty_1
      PWM1_Set_Duty(current_duty_1);  //Change the duty cycle
     }

    if (!RD1_bit)               // button on RD1 pressed
    {
      Delay_ms(40);
      current_duty_1--;  // decrement current_duty_1
      PWM1_Set_Duty(current_duty_1);
     }

    if (!RD2_bit)     // if button on RD2 pressed
    {
      Delay_ms(40);
      current_duty_2++;    // increment current_duty_2
      PWM2_Set_Duty(current_duty_2);
     }

    if (!RD3_bit)       // if button on RD3 pressed
    {
      Delay_ms(40);
      current_duty_2--;   // decrement current_duty_2
      PWM2_Set_Duty(current_duty_2);
     }

    Delay_ms(10);      // slow down change pace a little
  }
}
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Questions concernant PWM du pic 16f877 mikro c
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1063
Âge : 68
Enregistré en : juillet 2015
Localisation : 01120
Contact :

#2 Message par paulfjujo » lun. 10 avr. 2017 20:42

dyli a écrit :s.

1- pourquoi le chiffre 16 pour ceci; je pense on doit commencer par un chiffre quelconque.. short current_duty_1 = 16; // initial value for current_duty_1
2- pourquoi ce signe '!' dans cette ligne, if (!RD0_bit) // if button on RD0 pressed c'est un no logique , not ( juste RD0 est relié a 5V via une resistance de 10k ) a la place on pouvait pas écrire if RD0= 0?


1)
c'est à toi de nous le dire .. on ne sait pas à quoi sert ton programme..
on pourrait supposer que ton PWM a une gamme de 0 à 255 .
et 16 pour voir un creneau sur le signal de sortie avec un rapport cyclique de 1/8
avec zero ..tu vois rien

2)
RD0 avec Pullup de 10K au +5V .. on a effectivement un 1 logique si le BP n'est pas pressé
et donc un 0 si on appuie dessus.
a la place on pouvait pas écrire if RD0= 0?
NON !
mais
if(RD0==0) oui
un test se fait avec ==
sinon c'est une affectation .. RD0=0 .. qui ne peut d'ailleur pas marcher ,car on ne peut pas
forcer une entree.

Questions concernant PWM du pic 16f877 mikro c
dyli
Débutant
Débutant
Messages : 33
Enregistré en : février 2017

#3 Message par dyli » mar. 11 avr. 2017 10:11

Bonjour Paul,

Merci de tes réponses,

Le programme , je ne l'ai pas fait moi meme, mais trouvé sur internet, le but était de me familiariser avec PWM du pic16f877a.( un simple exercice)
Donc il y a 4 BP sur le schema qui permettent soit de diminuer le rapport cyclique soit d'augmenter.

le lien de cet exercice que j'ai trouvé sur web.

exercice pwm sur pic 16f877A


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : paulfjujo et 1 invité