salve a tutti , premetto che è la prima volta che mi cimento con il modulo ccp
avrei la necessità di calcolare il tempo che intercorre tra due impulsi tra i vari esempi che ho trovato sono riuscito a tirare fuori questo
Code:
__interrupt (high_priority) void ISR_alta (void) {
if (PIR1bits.CCP1IF == 1 ) {
// Resetto il flag d'interrupt per permettere nuove interruzioni
PIR1bits.CCP1IF = 0;
buffer = ((CCPR1H <<8) + CCPR1L) ;
}
}
int main(void)
{
//************************************************************
// Imposto CCP1
//************************************************************
// Imposto la modalita' Capture sul fronte di salita
CCP1CONbits.CCP1M0 = 0;
CCP1CONbits.CCP1M1 = 1;
CCP1CONbits.CCP1M2 = 0;
CCP1CONbits.CCP1M3 = 1;
// Abilito le interruzioni ad alta priorita'
PIE1bits.CCP1IE = 1;
IPR1bits.CCP1IP = 1;
//************************************************************
// Imposto il Timer3
//************************************************************
// Utilizzo il Timer3
T3CONbits.T3CCP1 = 1;
// Imposto il Prescaler ad 1
T3CONbits.T3CKPS1 = 0;
T3CONbits.T3CKPS0 = 0;
// Imposto il clock a Fosc/4
T3CONbits.TMR3CS = 0;
// Attivo il Timer
T3CONbits.TMR3ON = 1;
//************************************************************
// Abilito le interruzioni
//************************************************************
//Resetto i Flag delle interruzioni d'interesse
PIR1bits.CCP1IF = 0;
// Abilito l'interrupt globale
INTCONbits.GIE = 1;
// Abilito l'interrupt periferiche
INTCONbits.PEIE = 1 ;
( questo è solo un estratto del codice completo)
il pic in uso è un 18f4550
ovviamento il codice non funziona qualsiasi frequenza io fornisca al pin RC1
l' LCD mostra sempre il valore =0
dove sbaglio ??? grazie in anticipo