Bonjour,
je suis entrain de faire un programme afin de mesurer une periode en utilisant le module CCP de mon pic 16f876 et j'ai quelques difficultés à le mettre en oeuvre.
Voici ce que j'ai codé pour l'instant.
En fait j'ai un tableau qui contient un code pour afficher vers un 7 segments, l'affichage se fait dans la derniere parti avec le Port B et le port A.Code:int frequence=0, unite=0, dizaine=0, centaine=0, millier=0; // initialisation des variables; int tab[10] ; //contient le code pour chaque led #int_ccp1 void isr_ccp1() { frequence = 1/CCP_1 ; // equivalence periode et frequence //extraction des unités, centaine, dizaine et millier. % permet d'avoir le reste d'une division Unite = frequence%10 ; Dizaine = ((frequence%100)/10) ; centaine = ((frequence%100)/100); millier = ((frequence%100)/1000); set_timer1(0); //clear timer clear_interrupt(int_ccp1); } void main() { //remplissage tableau tab[0]=0b0111111 ; tab[1]=0b0000011; tab[2]=0b1011011; tab[3]=0b1001111; tab[4]=0b1100110; tab[5]=0b1101101; tab[6]=0b1111101; tab[7]=000000111; tab[8]=0b1111111; tab[9]=0b1101111; setup_timer_1(T1_internal); setup_ccp1(CCP_CAPTURE_RE); enable_interrupts(global); enable_interrupts(int_ccp1); while (1) { // affichage sur BCD/7segments output_B(tab[unite]); output_low(pin_A1); delay_ms(1); output_high(pin_A1); output_B(tab[dizaine]); output_low(pin_A2); delay_ms(1); output_high(pin_A2); output_B(tab[centaine]); output_low(pin_A3); delay_ms(1); output_high(pin_A3); output_B(tab[millier]); output_low(pin_A4); delay_ms(1); output_high(pin_A4); } }
Le probléme vient je pense des interruptions ou de la conversion (frequence).
L'interruption se produit sur front montant du signal (j'ai fais une horloge qui tourne à environ 450Hz) et un timer mesure la durée entre les deux fronts montants. La variable CCP_1 est generée automatiquement par le module CCP et est censée contenir la durée de la periode...
Je ne vois pas ou se trouve l'erreur, quand je programme le pic, les afficheurs indiquent 0000.
Merci
-----