Modos de suspensión en CCS PIC 18F87J11

1

Estoy usando timer1 como mi temporizador de reloj de interrupción de 100 ms. Yo no uso hardware WDT, hago esto yo mismo. ¿Puedo dormir (o dejar inactivo) el procesador y simplemente despertarme cuando se apaga la interrupción del reloj de 100 ms? Si es así, ¿cómo hago esto?

He leído la sección de la hoja de datos sobre los modos de administración de energía, pero no estoy seguro de si esto funcionará (y en realidad ahorrará el uso actual). Estoy usando el reloj de 100 ms para una sincronización precisa y un informe a un servidor, y también me preocupa que el ciclo de reposo / activación agregue algunos ciclos de reloj a la sincronización de interrupción. Además, estoy usando SPI para las comunicaciones con un transmisor de radio SiLABS y recibo una interrupción cuando recibe un paquete.

    
pregunta Mike O'Brien

1 respuesta

1

La hoja de datos es bastante clara en esto. El temporizador 1 puede ejecutarse externamente mientras el procesador está en modo de suspensión, y una reinversión puede hacer que el procesador se active. Esta activación puede ser simplemente continuar la ejecución después de dormir, o puede causar una interrupción.

Por supuesto, el temporizador no se puede ejecutar desde el reloj de instrucciones, ya que no se ejecuta durante el reposo. El temporizador 1 tiene la característica especial de que cuenta con el controlador para un cristal de reloj de baja potencia incorporado. Normalmente son 32768 Hz y requieren muy poca energía para funcionar.

Para obtener activaciones de 100 ms, deberá configurar el temporizador en un valor específico en cada activación. Tenga en cuenta que si no se produce un error a largo plazo (que no sea el error del cristal), debe interponerse entre dos valores porque 32768 Hz no se divide uniformemente por 10 Hz. Establezca el temporizador en el nuevo valor inmediatamente después de la activación, y esto no debería ser un problema. Tiene más de 30 µs antes del siguiente tick, por lo que hay muchas instrucciones para restablecer el temporizador al valor correcto para provocar el siguiente evento 100 ms después.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas