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


