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

Gestion de PWM

http://ww1.microchip.com/downloads/en/DeviceDoc/41441B.pdf

Forum général sur le langage C !

Modérateur : Jérémy

Jérémy
Administrateur du site
Administrateur du site
Messages : 2764
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

Gestion de PWM

Messagepar Jérémy » jeu. 16 nov. 2017 16:31

Bonjour à tous,

Je travaille avec un PIC 12F1840 ( lien en haut de post).

J'ai créer un petit programme me permettant de modifier la luminosité d'une led branchée sur la sortie PWM de mon PIC.

La valeur est enregistrée en Eeprom afin de mémoriser le dernier réglage.

Je change la rapport cyclique en me promenant dans un tableau contenant 7 valeurs. Pour les test j'ai mis les valeurs correspondant aux pourcentage voulus et j'ai retirer la LED pour visualiser le signal à l'oscillo.

Donc si je désire 3% de Rapport cyclique( LED trés faiblement éclairée), je fais (3x255)/100 ~= 8 et ainsi de suite pour les autres pourcentages.

Mais le problème c'est que les valeurs lues à oscilloscope ne sont pas les mêmes. Ont dirait qu'elle sont tronque de3-4% environ !!

Quand je suis sur 3% j'ai 0 en sortie !
Quand je suis sur 10% j'ai 7% d'état haut en sortie
Sur 20%, j'ai 18%
Sur 30 j'ai 28%
SUR 50 j'ai 47%
Sur 75% j'ai 71%
et sur 100% j'ai 96%

Bizarre on dirait une logique inversée un truc du genre. Quelques choses à du m'échapper mais je n'arrive pas à la mettre la main dessus

Code : Tout sélectionner

#define BP_PLUS PORTA.B4
#define BP_MOINS PORTA.B5

char Curseur;
// En pourcentage 3,10,20,30,50 ,75,100
char Tableau[7] = {8,25,51,76,127,191,255} ;

void main() {
 ANSELA = 0;
 TRISA.B2 = 0;
 LATA.B2 = 0;       // On éteint la led au démarrage
 
 OSCCON 
= 0b00000010;    // réglage de l'Oscillateur à 31Khz

 Curseur = EEPROM_Read(0x01);
 
 PWM1_Init
(1000);        // PWM à 1Khz
 PWM1_Set_Duty(Tableau[Curseur]);
 PWM1_Start();

while(
1){
  
  if 
(BP_PLUS == 1){
     delay_ms(50);
     if (BP_PLUS == 1){
         Curseur++;
         if (Curseur>6) Curseur = 6;
         PWM1_Set_Duty(Tableau[Curseur]);
         EEPROM_Write(0x01, Curseur);

         while (BP_PLUS == 1);
      }
   }
  
  if 
(BP_MOINS == 1){
     delay_ms(50);
     if (BP_MOINS == 1){
         Curseur--;
         if (Curseur>7) Curseur = 0;
         PWM1_Set_Duty(Tableau[Curseur]);
         EEPROM_Write(0x01, Curseur);
         while (BP_MOINS == 1);
      }
   }

 }
}


Merci à vous
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Avatar de l’utilisateur
Temps-x
Expert
Expert
Messages : 2960
Enregistré en : juillet 2016
Localisation : Terre

Gestion de PWM

Messagepar Temps-x » ven. 17 nov. 2017 02:51

Bonjour Jérémy, et tous le forum,

Quelle est la vitesse de ton quartz, ou oscillateur interne ?

A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Jérémy
Administrateur du site
Administrateur du site
Messages : 2764
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

Gestion de PWM

Messagepar Jérémy » ven. 17 nov. 2017 07:17

Bonjour,

Comme je suis sur pile , j'ai diminuer la vitesse de l'oscillateur interne interne à son maximum. c'est à dire 31Khz !
La fréquence du PWM est de 1Khz. ( valeur mis sans trop savoir).

J'ai fait clignoter ma led pour verifier que l'OSC es bien réglé, tout est bon . Mais peut être que la fréquence est trop basse ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Jérémy
Administrateur du site
Administrateur du site
Messages : 2764
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

Gestion de PWM

Messagepar Jérémy » ven. 17 nov. 2017 09:01

Bon...

En modifiant la valeur de mon OSC interne , il y a des choses qui bougent !!! disons que je n'ai plus se décalage de 3% ....

Avec MikroC, En cliquant sur "project" puis "edit project" j'ai vu que mon OSC est à 0.0302900 et non à 0.031 Mhz comme je l'avais mis.
L'erreur devait venir d'ici .

Maintenant j'ai un autre problème ! à la valeur 255 je devrais avoir un RC de 100% hors, il n'est que de 99.5% . il y a toujours un faible PIC dui chute à 0. est ce normal ? est il possible d'atteindre la valeur 100% en PWM ?

J'ai essayé avec toute les valeurs de l'OSC int .
J'ai essayé en augmentant jsuqu'a 10Khz le PWM !

Rien je n'arrive pas à faire 100%
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Jérémy
Administrateur du site
Administrateur du site
Messages : 2764
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

Gestion de PWM

Messagepar Jérémy » ven. 17 nov. 2017 09:16

Je crois avoir obtenu ma réponse ici :
https://forum.mikroe.com/viewtopic.php?f=88&t=28919

En fait ce n'est pas possible de faire du 100% en PWM d’après ce que j'ai compris ; il y a toujours un PIC de 1µs due à l'horloge. Dans mon cas ce n'est pas grave, mais c'est bon à savoir.

Du coup, j'ai remis mon OSC int à 31Khz, mais j'ai aussi du descendre la fréquence du PWM à 100Hz sinon j'avais un message d'avertissement que le temps était trop lent.

TOut est rentré dans l'ordre au final !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Avatar de l’utilisateur
Temps-x
Expert
Expert
Messages : 2960
Enregistré en : juillet 2016
Localisation : Terre

Gestion de PWM

Messagepar Temps-x » ven. 17 nov. 2017 13:54

Bonjour Jérémy, et tous le forum,

C'est pas un bon choix 1000 hertz ou 100 hertz, d'après mon logiciel PICPwm ici: viewtopic.php?f=27&t=319

Il faut mettre PR2 = 85

ça te donne une variation de 0,25% à 99,75% mais je vois pas pourquoi tu prends une fréquence aussi basse. :sifflotte:

Pour CCPR1L voir avec mon logiciel, qui va tous te dire.

ça va ralentir énormément ton programme de mettre une horloge à 31khz :lol: personnellement j'aurais prit 8Mhz avec PR2 = 199,ce
qui fait une variation de 0,25% à 99,75% avec un pas de 1 à 199, voilà mon point de vue. exit

A+
Modifié en dernier par Temps-x le ven. 17 nov. 2017 18:25, modifié 1 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Jérémy
Administrateur du site
Administrateur du site
Messages : 2764
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

Gestion de PWM

Messagepar Jérémy » ven. 17 nov. 2017 15:30

Re,

Oui j'ai regarder ton logiciel ... je te réitère mes félicitation d'ailleurs !

Je souhaite une fréquence basse pour ne pas solliciter l'OSCINT gourmand en énergie. je suis sur pile ! Mon programme ne doit allumer que deux leds, la vitesse n'as aucune importance a ce niveau , c'est pourquoi je voulais la réduire au maximum pour gagner en consommation.

Comme j'utilise la librairie PWM de mikroC, je n'ai pas à me soucier du réglage des registres ! vu que je suis une buse la dessus ca m’arrange :sifflotte:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Avatar de l’utilisateur
Temps-x
Expert
Expert
Messages : 2960
Enregistré en : juillet 2016
Localisation : Terre

Gestion de PWM

Messagepar Temps-x » ven. 17 nov. 2017 15:51

Re,

Comme j'utilise la librairie PWM de mikroC, je n'ai pas à me soucier du réglage des registres !


Pas à dire le C ça me dépasse, s'y comprends vraiment rien :mur: :mur:

+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

JMarc
Confirmé
Confirmé
Messages : 607
Enregistré en : août 2016
Localisation : Dans le Sud...

Gestion de PWM

Messagepar JMarc » ven. 17 nov. 2017 17:50

Bonjour tous le monde


Temps-x a écrit :Re,


Pas à dire le C ça me dépasse, s'y comprends vraiment rien :mur: :mur:

+


Mais si Temps-x, dit toi que tu utilises une macro que j'ai écrite pour toi :langue:


exit

Avatar de l’utilisateur
paulfjujo
Maître
Maître
Messages : 3293
Enregistré en : juillet 2015
Localisation : 01800
Contact :

Gestion de PWM

Messagepar paulfjujo » ven. 17 nov. 2017 18:30

bonsoir à tous,


JMarc , il ya ici quelque chose qui me chiffone

Code : Tout sélectionner


 if 
(BP_MOINS == 1){
         Curseur--;
         if (Curseur>7) Curseur = 0;


comment Curseur peut-il etre >7 alors qu'il est bridé à 6 dans le sens BP+ ?
et meme en decrementant Curseur ???

c'est un char qui serait non signé par défaut ?
je suppose que lorsque que Curseur passe en negatif , tu as -1 ( valeur binaire 255)
qui serait alors > à 7 ! et ça tombe en marche !

ce qui serait plus logique :
signed char Curserur;

if (Curseur<0) Curseur = 0; [/code]
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage C »

Qui est en ligne

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