Autor Tema: Ayuda, ¿como salir del sleep mode?  (Leído 303 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 8bits

  • PIC10
  • *
  • Mensajes: 13
Ayuda, ¿como salir del sleep mode?
« en: 11 de Septiembre de 2019, 23:14:08 »
Hola amigos, un gran saludo a todos  8) . Tengo un pequeño inconveniente con un programa en el cual pretendo salir del sleep mode mediante una interrupción externa en un PIC18F4550.

Puedo entrar al modo sleep mode sin problemas, he utilizado un botón en INT0 (interrupción externa en PB0), de esta manera al presionarlo el PIC queda profundamente dormido XD. La idea es despertarlo pulsando el mismo botón y si lo hace pero el problema es que me reinicia el sistema, ¿habrá alguna manera de que al despertar continué la ejecución del programa donde se quedo la ultima vez? He leido el datasheet seccion 3.3 Sleep Mode y 3.5.1 Exit by interrupt, pero aun así no logro hacerlo funcionar.

Anexo la secciones del código involucradas:

Código: [Seleccionar]
void xtInterruptBegin(){
     //Habilita la interrupcion externa INT0 en PB0
    TRISBbits.RB0 = 1;
    INTCONbits.INT0IE = 1;
    INTCON2bits.INTEDG0 = 0;
   
}

Código: [Seleccionar]
void interrupt myISR(){
    if(INTCONbits.TMR0IF){
        INTCONbits.TMR0IF = 0;
        contador++;
        if(contador == SAMPLING_F){
            contador = 0;
            adc_flag = 1;
            LATBbits.LATB1 = ~LATBbits.LATB1;
        }
    }
   
    if(PIR1bits.ADIF){
        PIR1bits.ADIF = 0;
        adc_finish_flag = 1;
       
    }
   
    if(INTCONbits.INT0IF){
       
        sleep_flag = ~sleep_flag;
        INTCONbits.INT0IF = 0;
        LATBbits.LATB1 = 0;
        LATBbits.LATB2 = 0;
       
    }
}

Código: [Seleccionar]
void main(void)
 {
    systemBegin();
    LATBbits.LATB1 = 1;
    sleep_flag = 0;
    while (!sleep_flag){
        if(adc_flag){
            adc_flag = 0;
            printf("\nBattery: ");
            readADC(AN4);
            adc_flag = 0;
        }
       
    }
    SLEEP();
}

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re:Ayuda, ¿como salir del sleep mode?
« Respuesta #1 en: 22 de Octubre de 2019, 10:52:11 »
Hola, no se si todavía te sirva la ayuda, pero creo que el error esta en el ultimo pedazo de código que colocaste, lo puedes cambiar por este y creo que funcionara

Código: [Seleccionar]
void main(void)
 {
    systemBegin();
    LATBbits.LATB1 = 1;
    while(1){
        sleep_flag = 0;
        while (!sleep_flag){
            if(adc_flag){
                adc_flag = 0;
                printf("\nBattery: ");
                readADC(AN4);
                adc_flag = 0;
            }
       
        }
        SLEEP();
    }
}

El problema es que cuando sale del sleep finaliza el programa, por eso deberías colocar otro while donde al finalizar el sleep el regrese al punto inicial del codigo, espero que te sirva.