Salut,
Est-ce que quelqu'un a déjà utilisé le mode compare avec un PIC et avec le même timer1?
Dans mon appli, j'utilise un seul timer (Timer1 16 bits) et je stocke dans les CCPRx la consigne respective de chaque temps que je veux obtenir sur 2 I/O.
Voici le code:
static void interrupt inter(void) // Gestion du timer1 en mode compare
{
if (TMR1IF)
{
RC6=1 ;
RC7=1 ;
TMR1H=0xEC ;
TMR1L=0x77 ;
TMR1IF=0 ;
}
if (CCP1IF)
{
RC6=0 ;
CCP1IF=0 ;
}
if (CCP2IF)
{
RC7=0 ;
CCP2IF=0 ;
}
}
void Init_compare (void)
{
{
TMR1H = 0xEC ; //on fixe la fréquence 65535-20000µs/4µs = 0xEC77
TMR1L = 0x77 ;
CCP1CON = 0b00001010 ;
CCP2CON = 0b00001010 ;
T1CON = 0b00100001 ; //Prescaler=1:4 Timer1=on
}
}
void Config_rapport_cycliqueV(unsig ned char)
{
unsigned int Val1_tmp ;
Val1_tmp = (139*Vpos)/100 ;
Val1_tmp += 60785 ;
CCPR1L = Val1_tmp ;
CCPR1H = Val1_tmp >> 8 ;
}
void Config_rapport_cycliqueH(unsig ned char)
{
unsigned int Val2_tmp ;
Val2_tmp = (139*Hpos)/100 ;
Val2_tmp += 60785 ;
CCPR2L = Val2_tmp ;
CCPR2H = Val2_tmp >> 8 ;
}
Tout va bien tant que les consigne dans CCPRx sont différentes par contre il y a conflit lorsque les interruptions (CCP1IE & CCP2IE) se télescopent.
J'ai vérifié dans les datasheets que ce mode est déconseillé, mais joueur que je suis je pense que l'on peut gérer ce conflit sans casse.
Donc peut-être que quelqu'un a une idée à me soumettre, pendant ce temps je cherche...
-----