Bonjour!
Alors voila, je cherche à configurer les timers 0 et 1 d'un PIC.
Pour simplifier la chose, disons que j'ai un signal d'entrée qui génère des impulsions. Le but c'est de calculer le temps des impulsions reçues par le PIC et de les régénérer en sortie.
Pour les générer j'utilise Timer0 et ça fonctionne très bien!
Exemple :
Avec ce code je génère un signal carré de fréquence 1/(2 * 255 * 128us)Code:/*inclusions*/ #include <stdio.h> #include <htc.h> static void interrupt inter(); // Fonction d'interruption void main( void) { GIE=1; PEIE=1; // Autorise les interruptions OPTION=0b11000110; // Configure tmr0 pour 128µs par bit en mode timer //configuration de B TRISB = 0b10000000; RB4=0; // RB4 à l'état 0 TMR0=0; // Confiqure la valeur de départ du registre TMR0 T0IE=1; // Active l'interruption de débordement du registre TMR /* boucle principale */ while(1) { //rien a faire... } } /* Fonction d'interruption */ static void interrupt inter(){ /*TIMER 0 */ if(T0IF)//1 si débordement { RB4=!RB4; //on inverse RB4 } T0IF=0; // Mise à 0 du Bit } }
Maintenant je cherche à compter la durer de mon signal en entrée!
Je compte utiliser le timer 1, je pense avoir compris la configuration de T1CON mais comment déclencher l'interruption au changement d'état de mon entrée si par exemple j'utiliser RB0 comme signal d'entrée?
Voila ma configuration :
merci de votre aide!Code:T1CON=0b00111001; //bits 7-6 inutilisés //bits 5-4 : prescaler //bit 3 : 1=oscillateur enabled //bit 2 : 0=ocillateur synchrone //bit 1 : 0=oscillateur interne //bit 0 : 1=mise ne service du comptage [...] static void interrupt inter(){ if (TMR1IF){ //on recupere la durée de TMR1L et on la recopie sur la sortie TMR0=255-TMR1L;//On néglige TMR1H car la durée ne peut pas dépasser 255 * prescaler } }
-----