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 ---
- 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 ---
Modérateur : Jérémy
Gestion de PWM
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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
Merci à vous
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
Gestion de PWM
Gestion de PWM
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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 ?
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 ?
Gestion de PWM
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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%
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%
Gestion de PWM
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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 !
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 !
Gestion de PWM
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.
Pour CCPR1L voir avec mon logiciel, qui va tous te dire.
ça va ralentir énormément ton programme de mettre une horloge à 31khz 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.
A+
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.
Pour CCPR1L voir avec mon logiciel, qui va tous te dire.
ça va ralentir énormément ton programme de mettre une horloge à 31khz 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.
A+
Modifié en dernier par Temps-x le ven. 17 nov. 2017 18:25, modifié 1 fois.
Gestion de PWM
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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
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
Gestion de PWM
Gestion de PWM
Gestion de PWM
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir à tous,
JMarc , il ya ici quelque chose qui me chiffone
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]
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]
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 130 invités