I use ccp1 and ccp2 in capture mode for getting the frequency of 2 signal and then to check the delay between this 2 signal. I use the timer 1.
It work fine.
I need more timer interrupt for parts of my software but as soon as I use "enable_interrupt" with another timer my software became completely buggy.
for having interrupts at 250us everything stop working fine.
thanks in advance for your help
Ttelmah
Joined: 11 Mar 2010 Posts: 19587
Posted: Tue Feb 03, 2015 1:27 pm
You don't show your interrupt handlers?.
If you enable any interrupt without a handler present, it'll crash the code.
Other thing is that you are showing presetting the timer3 to 65286. If you are doing a similar setting in the handler, then this interrupt would be happening every 100 instructions. Given that the interrupt handler alone will use about 60 instructions, it doesn't take much code in the interrupt routine to make the machine grind to a halt.
in_nursery
Joined: 25 Oct 2012 Posts: 51
Posted: Tue Feb 03, 2015 1:35 pm
Hi Ttelmah
here is my int3 Handler (work fine in other place)
// vérifier si un mot est terminé en déterminant si on a lu le dernier bit
if(timerMotIR > 0) {
timerMotIR--;
// traiter l'interruption seulement si un mot IR est actuellement envoyé
if (compteurBitIR > 1) { // ">1" car le dernier bit lu n'est pas un vrai bit
// attendre 500us pour vérifier si bit est 1 ou 0
if(timerBitIR > 0) {
timerBitIR--;
}
else { // délais de 500us terminé
// Déterminer si 1 ou 0
// Doit être fait une seule fois par bit
if (nouveauBitIR) {
motActuelIR <<= 1;
motActuelIR += input(PIN_IR);
nouveauBitIR = FALSE; // éviter de traiter deux fois le même bit
compteurBitIR--;
}
}
}
}
else {
if (debounceIR == 0) {
// Si on termine un mot
if ((compteurBitIR < 13) && (vraiMotIR == 0)){
// Vérifier si le mot qui vient d'être lu est identique au précédent
if(motActuelIR == motAncienIR) { // oui
compteurBonMotIR++;
}
else { // non
//vraiMotIR = motActuelIR;
compteurBonMotIR = 0;
}
// S'assurer d'avoir lu le même mot 3 fois avant de conclure que c'est
// le bon mot.
if(compteurBonMotIR > 2) {
vraiMotIR = motAncienIR;
debounceIR = TEMPS_DEBOUNCE_IR;
// compteurVeille = TEMPS_VEILLE; // Nouveau IR CMS
// Initialiser le compteur de bits.
// On utilise 13 car une interruption est générée après le 12e bit.
compteurBitIR = 13;
motActuelIR = 0; //initialiser le mot
}
}
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum