¿Hay alguna manera de evitar un bucle infinito y reducir el consumo de energía de la CPU cuando se usa PIC y timer0 interrupt?

1

He creado un programa simple que se ejecuta en un microcontrolador P12F629 con MikroC.

Necesito ejecutar algunas tareas críticas en el tiempo (por ejemplo, aumentar el reloj interno, enviar datos a la matriz de LED, ...).

En lugar de un simple bucle + Delay_ms() (que tiene su propio conjunto de problemas), uso una interrupción:

void main()
{
    InitTimer0();
    while(1);
}

void InitTimer0()
{
   //setup timer0 interrupt
   //...
}

void Interrupt() //will be fired every x ms
{
   //perform some time-critical tasks
   //e.g. increase internal clock
   //...      
}

El problema es que un bucle while consume ciclos de CPU para nada (y por lo tanto reduce la vida útil de la batería).

¿Hay una manera de evitar esto?

Si elimino la llamada while(1); al final de main() , el programa se ejecuta exactamente igual. ¿Hace alguna diferencia? ¿Añadir una llamada Delay_ms(1000) dentro del bucle while ayuda a reducir el estrés de la CPU?

En x86, recuerdo que hay una instrucción halt que detiene la CPU hasta que se dispara una interrupción externa. Esto sería perfecto aquí. ¿Hay tal cosa en MikroC?

    
pregunta tigrou

1 respuesta

4

Si está manejando una matriz de LED, no creo que el consumo de micro energía sea tan significativo.

Si pone el micro en reposo, el reloj se detendrá y no obtendrá interrupciones del temporizador 0 para recuperarlo. Podría usar el temporizador de vigilancia para recuperarlo, pero es muy variable y la demora puede ser de hasta 25 ms.

Si realmente desea reducir el consumo de energía y mantener el tiempo, puede ejecutar el micro con un cristal de 32 kHz, lo que mantendrá un tiempo razonable y solo dibujará microamperios (dependiendo de lo que esté encendido).

Necesita RTFM ( hoja de datos ) sobre los distintos tipos y modos de reloj. También hay un manual de referencia de Microchip con más información. Y luego puede descubrir cómo hacer que su compilador le dé las instrucciones necesarias al chip.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas