TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: atun22 en 03 de Abril de 2006, 09:14:00

Título: problemas con el ccp1
Publicado por: atun22 en 03 de Abril de 2006, 09:14:00
Hola tengo un problemilla con el pic al programarlo  con una interrupción ccp1 modo capture ya que no me entra nunca en la interrupción y no se entonces como funciona:

setup_ccp1(CCP_CAPTURE_RE);    
enable_interrupts(INT_CCP1);    
enable_interrupts(GLOBAL);

Gracias
Título: RE: problemas con el ccp1
Publicado por: migsantiago en 03 de Abril de 2006, 10:16:00
Talvez si nos pones el código al que va cuando llega la interrupción...

#int_CCP1
Título: RE: problemas con el ccp1
Publicado por: atun22 en 03 de Abril de 2006, 10:34:00
la idea es para hacer un encoder, el codigo de la interrupcion es bastante sencillo (la prueba sin acabar, claro):

#INT_CCP1
ccp1_isr(){
   if (i<=8){
      i++;
      derecha(); // gira a la derecha
   } else { i=0;}
}


el problema está en que no me entra en la interrupción y no se si me falta añadir algo más o especificar algún dato más.

Grácias.
Título: RE: problemas con el ccp1
Publicado por: migsantiago en 03 de Abril de 2006, 10:48:00
Talvez no has configurado bien la terminal CCP1. Hay PICs en los que la terminal se encuentra en dos patitas y tú eliges una mediante un fusible a la hora de la programación.

Otra posibilidad es que no hayas declarado CCP1 (la patita correspondiente) como entrada.

O talvez mientras está atendiendo la interrupción llega otra interrupción inmediatamente y no tiene tiempo de ejecutarla correctamente.

Puedes revisar el ejemplo EX_CCPMP.C.
Título: RE: problemas con el ccp1
Publicado por: atun22 en 03 de Abril de 2006, 11:00:00
mi duda, pues, queda en que en el ejemplo que me propones que mire utiliza un timer y yo en ningún momento utilizo un timer, quizá ahí esté mi problema.
Título: RE: problemas con el ccp1
Publicado por: migsantiago en 03 de Abril de 2006, 11:13:00
Ah, pues sería bueno que lo configuraras, ese timer se usa para capturar el tiempo del ccp1 (subida) y hacer una diferencia con el tiempo del ccp2 (bajada) y medir el tiempo en ALTO del pulso.

¿En tu programa mides tiempos o solo usas el ccp1 como interrupción? Porque si no mides tiempo talvez sea mejor usar la RB0 como interrupción externa.