Description du code PWM en C.
Hors ligneMemo1402 Le 22/07/2014 à 22:28 Profil de Memo1402 Configuration de Memo1402

Bonjour,

J'ai trouvé un code en C qui permet de générer un signal pwm grâce à un PIC. Mais je n'arrive pas à l'interpréter car je suis encore débutant dans la matière. Pouvez-vous me décrire ce code pour pouvoir en changer le rapport cyclique et a période svp? Merci d'avance.

voidmain() { 
   unsignedchar dc;
  TRISC=0;// set PORTC as output 
PORTC=0;// clear PORTC  /*          * configure CCP module as 4000 Hz PWM output          */ 
PR2=0b01111100;
 T2CON=0b00000101;
 CCP1CON=0b00001100;
 CCP2CON=0b00111100; 
 for(;;)// forever { /*                  * PWM resolution is 10 bits                  * don't use last 2 less significant bits CCPxCON,                  * so only CCPRxL have to be touched to change duty cycle                  */ 
for(dc=0;dc<128;dc++) 
CCPR1L=dc; 
CCPR2L=128-dc; 
Delay_ms(10); } 
for(dc=127;dc>0;dc--) 
CCPR1L=dc; 
CCPR2L=128-dc; 
Delay_ms(10); 
}
 }
Source : http://www.micro-examples.com/public/microex-navig/doc/097-pwm-calculator.html

Hors ligneAnthony Le 24/07/2014 à 11:43 Profil de Anthony Configuration de Anthony

Fou du volant

Hello  Heureux 

Ta fonction  Delay_ms(10); doit surement faire attendre 10ms. C'est là que tout va se jouer sur la période. Sourire la fréquence est égale à l'inverse de la période : f = 1/T.

Le rapport cyclique est égal à Ton / (Ton + Toff) c'est à dire le temps où ton signal est haut (Ton) divisé par la période complète (Ton + Toff).  Toff représentant le temps où ton signal est à l'état bas.

N'hésite pas si tu as besoin Heureux

--

Hors ligneAerokorbak Le 27/08/2014 à 20:45 Profil de Aerokorbak Configuration de Aerokorbak

le dernier

Salut. a) Possedes-tu un 'PIC'. Je présume que c'est un micro-contrôleur à la vue du code. Si tu n'as pas de PIC, ne compte pas coder ce bout de source C pour du pentium. les noms CCPR1L, CCPR2L, PORTC, etc... se sont des registres du PIC. Ils n'existent pas sur le pentium. Donc, terminé. b) Ce bout de source ne produira jamais un executable. Tel quel, il y'a des erreurs. Donc echec à la compilation. Si tu corriges les erreurs, après tu te tapes echec au linkage. Car la fonction ms_delay() n'est pas définie dans ce module, donc il te manque soit un fichier source (en assembleur, C, le language que tu veux), ou à la rigueur un fichier objet (*.obj, *.o, etc...) qui contient le code de la fonction. Et que tu vas linker (lier) avec ton propre fichier objet (sortie de compilation de ce module en C).                     Donc a) As-tu un PIC? Connais-tu le monde des micro-contrôleurs? Tu peux toujours te procurer la "data sheet" de ce PIC, c'est la documentation fournie par le constructeur sur ce micro. Parce que travailler avec un micro sans la data-sheet c'est chercher le Groeland, sans sac a dos, sans boussole, sans carte et en pensant que cela se trouve au sud!       b) As-tu recupéré un autre fichier avec ce module C?       Anthony: la fonction ms_delay(), n'as rien a voir, c'est juste une temporisation. C'est le chargement des registres: CCPR1L & CCPR2L (visiblement registres 8bits) qui gérent le duty cycle du PWM. D'ou le nom de sa variable: 'dc' a+

--

De la couleur, il y'en aura toujours par dessus le triste du monde...

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels