el CCP es el modulo de Capture/Compare/PWM
Esa interrupcion sucede cuando el TMR2/1/3 segun el PIC que sea, se compara con el contenido del registro del modulo CCP (CCPRxL/CCPRxH), cuando son iguales produce una interrupcion, en realidad activa una flag ( un bit ) que si esta activada la interrupcion, executa el codigo de interrupcion, esto vendria a ocurrir cuando se cumple el periodo del PWM, si observas esto es inutil para lo que queres hacer.
Porque el tema es que esos pulsadores son de un mando remoto para un drone,
Eso quiere decir que va a ir por RF, y luego va a entrar de forma serial al micro, segun como sea la interfaz de tu modulo receptor ( por ejemplo SPI,UART,etc ) podes usar la interrupcion de esos modulos.
Creo que estas confundiendo el concepto de "interrupcion"
La interrupcion es algo que saca al programa de su flujo normal, es decir lo que esta haciendo para ejecutar lo otro ( que es urgente ) y luego volver a lo que estaba haciendo. Basicamente eso es responder rapido a esa peticion.
Tu programa del drone para poder hacer lo que queres deberias tener algo asi:
- Tu control deberia enviar SI o SI cierta informacion cada cierto tiempo. Esto te va a permitir 2 cosas, saber que se esta mandando datos, como para saber que se perdio la señal del control, si en cierto tiempo no se detecto nada, entonces que se maneje solo.
En eso, tu programa deberia hacer su funcionamiento y leer si hay o no señal del control, teniendo 2 interrupciones, una para la llegada de datos del control y otra de un timer, entonces cada ves que llega un dato entra a una interrupcion, guarda el dato y pones a 0 el timer, de esa forma ocurren 2 cosas, una que tu dato se atendio lo mas rapido posible, y segundo que estas reiniciando el timer ( al enviarse a cada rato una señal),
Si en un momento el control pierde señal con el drone, el timer no se va a reiniciar y se produciria una interrupcion, esa interrupcion pondria a 1 un bit que luego al programa principal le va a indicar que debe usar el accelerometro para posicionarse correctamente.
Int_Recepcion(){
guardo_dato();
TMR = 0;
todo_ok=1;
}
Int_Timer(){
todo_ok=0;
}
Prog_principal(){
while(1)
{
if(todo_ok==1)
{
hago_caso_al_control();
}
else
{
hago_caso_al_accelemetro();
}
}
}
pero cada vez que el drone se desestabiliza debería interrumpir mi mando y permitir el acelerometro, por el momento no tengo idea de como hacer el programa ni tengo algun esquematico. Pero me vendría de 10 si me pudieses explicar como usar la interrupcion, que cosas deveria tener en cuenta? que banderas usar? como saber cuales?
Antes te di el caso de cuando se pierde la señal del control. Con respecto al sobre lo de "desestabilizarse" eso va a depender de tu programa, yo pienso que deberia leer siempre el accelerometro, y actuar segun el valor de este, si esta dentro de los rangos correctos hacerle caso al control y cosas asi.
Como usar la interrupcion?
Te puedo dar ejemplos burdos pero en MikroC no se, no lo utilizo y deberias buscar algun ejemplo simple de interrupcion.
Que interrupciones usar?
Eso ya depende de vos, cada modulo posee una interrupcion, esas te pueden o no servir, de ahi es tu imaginacion como las combines para que te sirva alguna, o para que haga cierta accion. Para saber todas las interrupciones simplemente te vas al datasheet y ahi esta todo.
Que banderas usar?
No se a que banderas te referis, si es el de las interrupciones , va a depender de que interrupcion uses, si es la de algun modulo esta explicado en el datasheet, incluso al final de cada seccion de cada modulo aparece la lista de registros que usa ese modulo, y ahi tenes los bits que usa.