El modo de suspensión en ATMEGA16 no funciona

0

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.

    
pregunta pranjal khanduri

1 respuesta

2

Como dijiste, el temporizador 2 solo se puede usar con Xtal externo en modo de ahorro de energía.

  • Utilice el modo de espera inactivo (puede reducir la frecuencia de la MCU antes de entrar en suspensión para obtener consumo)
  • O puede usar el watchdog para despertarlo (sin interrumpir y reiniciar el modo). Por supuesto, esto será un poco menos preciso, pero podría usar el modo de apagado automático, que es aún mejor.
respondido por el Julien

Lea otras preguntas en las etiquetas