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

Gestion de PWM
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 » jeu. 16 nov. 2017 16:31 lien vers la Data-Sheet : Cliquez ici

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

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

#2 Message par Temps-x » ven. 17 nov. 2017 02:51 lien vers la Data-Sheet : Cliquez ici

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:

Gestion de PWM
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 » ven. 17 nov. 2017 07:17 lien vers la Data-Sheet : Cliquez ici

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

Gestion de PWM
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#4 Message par Jérémy » ven. 17 nov. 2017 09:01 lien vers la Data-Sheet : Cliquez ici

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

Gestion de PWM
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 » ven. 17 nov. 2017 09:16 lien vers la Data-Sheet : Cliquez ici

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

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

#6 Message par Temps-x » ven. 17 nov. 2017 13:54 lien vers la Data-Sheet : Cliquez ici

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:

Gestion de PWM
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. 17 nov. 2017 15:30 lien vers la Data-Sheet : Cliquez ici

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

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

#8 Message par Temps-x » ven. 17 nov. 2017 15:51 lien vers la Data-Sheet : Cliquez ici

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:

Gestion de PWM
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#9 Message par JMarc » ven. 17 nov. 2017 17:50 lien vers la Data-Sheet : Cliquez ici

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

Gestion de PWM
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#10 Message par paulfjujo » ven. 17 nov. 2017 18:30 lien vers la Data-Sheet : Cliquez ici

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 37 invités