Afin de diminuer la consommation sur un projet avec des leds, je souhaite baisser au maximum la fréquence de mon PIC .
Mais malheureusement mes résultats ne sont pas ceux escomptés !
Il faut que je trouve par test le bon compromis entre fréquence et consommation.
Le programme est on ne peut plus simple . je règle mon oscillateur interne sur 31Khz. ( page 61 de la DS).
d’après mes calculs 31Khz me donne une instruction toutes les 129µS.
ensuite je règle mon timer 1 avec le clock source à Fosc . préscaler à 1:1
Donc avec 8 coups d'horloge de 129µs, je devrais obtenir un état haut de 8x129=1.032 ms
Pour obtenir 8 coups d’horloges je règle les registres du timer1 sur 65536-8 = 65528 = 0xFFF8 ;
Voici mon programme raccourci !
Code : Tout sélectionner
//###############################################################################################
void Interrupt(){
if (TMR1IF_bit){
PWM = !PWM; // J'inverse ma sortie
TMR1H = 0xFF;
TMR1L = 0xF8;
TMR1IF_bit = 0;
}
}
//###############################################################################################
void main() {
ANSELA = 0b00000100; // RA2 en analogique
TRISA = 0b11001101; // Definition In/Out
On_Off = 1; // J'allume l'auto-maintien
OSCCON = 0b00000010; // réglage de l'Oscillateur à 31Khz (P.61)
OPTION_REG.B7 = 0; // Active les pull up individuelles
WPUA = 0b00001000; // Active les pull up sur RA3 pour BP
//----- Initialisation timer 1 pour PWM :
T1CON = 0b01000001; // Source=Fosc; presclaer à 1:1; TMR1_ON à 1 ; (P.171)
TMR1IF_bit = 0;
TMR1H = 0xFF;
TMR1L = 0xF8;
TMR1IE_bit = 1;
INTCON = 0xC0; // GIE & PEIE activés
//###############################################################################################
while(1){
}
} Je ne comprends pas pourquoi je n'ai pas environ 1ms d'état haut et bas ?
J'ai essayé de nombreuses configurations sans résultat notables.
Avec d'autres valeurs d'oscillateur ( de 500KhZ à 8Mhz ), pas de probléme, les temps correspondent parfaitement mais en dessous de 500Khz ça bug .
Avez vous une idée ? quelques chose doit m'échapper mais je vois pas quoi .
Voici une capture de ma sortie PWM qui allume mes leds ! On voit que l'état haut dur 2.356ms au lieu des 8x129=1.0.32 ms
Merci à vous


Sinon une petite led qui s'allume quand tu arrives au nombre d'interruption souhaité, c'est une idée.