bonjour et merci pour ce beau site
Je dois réaliser un programme qui me permet de capturer les front montant d’un signal carré 0 ou 5V et de fréquence variable et a chaque front détecter on incrémente une variable.
Pour programmer j’utilise un logiciel pour PIC à savoir PIC C compiler de chez CCS.
Il existe un certain nombre de fonction déjà faite et une seule a retenue mon attention.
Elle permet la capture de chaque front et déclenche un timer. Apres on peut l’utiliser pour faire une mesure ou autre chose. Bref mon problème n’est pas là mais je pourrait peut être me servir de cette fonction pour faire mon compteur d’impulsions.
Voici la doc fournie par CCS pour l’utilisation de cette fonction. (SETUPCCP1.doc)
En faite mon souci est plus un souci de C que d’électronique mais tout est lié.
Il faudrait que quand cette fonction est active j’incrémente une variable par exemple et que je ne tienne pas compte du timer !
Voici aussi un exemple d’utilisation donner par CCS
long rise,fall,pulse_width;
#int_ccp2
void isr()
{
rise = CCP_1;
fall = CCP_2;
pulse_width = fall - rise; // CCP_1 is the time the pulse went high
} // CCP_2 is the time the pulse went low
// pulse_width/(clock/4) is the time
// In order for this to work the ISR
// overhead must be less than the
// low time. For this program the
// overhead is 45 instructions. The
// low time must then be at least
// 9 us.
void main()
{
printf("\n\rHigh time (sampled every second):\n\r");
setup_ccp1(CCP_CAPTURE_RE); // Configure CCP1 to capture rise
setup_ccp2(CCP_CAPTURE_FE); // Configure CCP2 to capture fall
setup_timer_1(T1_INTERNAL); // Start timer 1
enable_interrupts(INT_CCP2); // Setup interrupt on falling edge
enable_interrupts(GLOBAL);
while(TRUE) {
delay_ms(1000);
printf("\r%lu us ", pulse_width/5 );
}
}
il y a une autre fonction qui, me semble-t-il, pourrait crée une interuption comme dans l'exemple si dessus.
voila merci pour l'entraide!!
Partager