Estoy tratando de poner mi controlador en modo de suspensión y despertarlo con un cierto número de desbordamiento del temporizador. El código es el siguiente:
//*******TIMER 2 INITILIZATION will be used
TCCR2=0X07; //clock source select, prescaler
TIMSK=0X40; //timer 2 interrupt selected
TCNT2=0X00; // timer resistor
sei();
// controller sleep mode
set_sleep_mode(SLEEP_MODE_PWR_SAVE); // sleep mode selected
sleep_enable(); // set SE bit
sleep_cpu(); // sleep mode activated
do
{
if(count>=1000) // min delay
{
sleep_disable(); // SE bit reset
_delay_ms(1000);
print("waking up.....");
_delay_ms(2000);
cmd(0xc0);
print("AT+CFUN=1");
_delay_ms(1000);
transmit("AT+CFUN=1\r\n");
_delay_ms(1000);
_delay_ms(2000);count=0;
break;
}
else
{
print("sleep");
sleep_enable();
sleep_cpu();
}
} while (1);
el ISR correspondiente es el siguiente
ISR(TIMER2_OVF_vect)
{
count++;
}
El problema es que no está saliendo del modo de suspensión.
Estoy usando un reloj interno de 8MHz y un temporizador2.
edición: encontré esta descripción en la hoja de datos, así que esto significa que tengo que usar el reloj asíncrono para el temporizador 2 (es decir, provisto por un cristal externo). Existe alguna forma de hacerlo con la ayuda del reloj interno.