PIC12F508 guardando el último conteo del compresor

0

Tengo este proyecto que es controlador de aire acondicionado y utilicé PIC12F508 como microcontrolador, el funcionamiento de este proyecto es que el compresor se encenderá durante 1 hora y después se detendrá durante 5 minutos y el problema es que la imagen se restablecerá y contará de nuevo durante 1 hora.

Mi objetivo en este proyecto es que cuando se reinicie la imagen, deseo guardar la última vez o contar, y cuando se vuelva a encender, contará el tiempo restante dentro de esa hora. He investigado la posible solución y EEPROM puede ayudar, pero utilicé PIC12F508 que no tiene EEPROM. ¿Hay alguna otra forma aparte de EEPROM pero aún así usaré PIC12F508? gracias

Este es el código que utilicé del compilador MPLAB X y XC8:

/* * File: controller.c * Author: Jeaneth * * Created on July 30, 2016, 10:44 AM */
include
include

// PIC12F508 Configuration Bit Settings
include

// CONFIG
pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)
pragma config CP = OFF // Code Protection bit (Code protection off)
pragma config MCLRE = ON // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is MCLR)

void main()

{ for(;;)

{

    TRIS = 0b000000;
    GP0 = 0; //LED OFF
    GP1 = 0; //COMPRESSOR OFF
    GP0 = 1; // LED ON
    GP1 = 1; // COMPRESSOR ON
    runcomp();
    GP1 = 0; //COMPRESSOR OFF
    stop();

}

}

int minute()

{

for(int i =1; i>0; i--)
_delay(1000000);
return 0;

}

int runcomp()

{

for(int x =1; x>0; x--)
    minute();
return 0;

} int stop()

{ for(int y =1 ; y>0; y--) minute(); return 0;

}
    
pregunta Jeaneth Cunado

1 respuesta

3

En XC8 puede configurar una variable global o estática para que sea persistente . Estas variables no se borran automáticamente al inicio como otras, por lo que conservan su valor en los reinicios (aunque no en el apagado).

  

5.4.8.1 CALIFICADOR DE TIPO DE PERSISTENCIA

     

De forma predeterminada, todas las variables de C que no están inicializadas explícitamente se borran en el inicio. Esto es consistente con la definición del lenguaje C. Sin embargo, hay ocasiones en las que se desea que algunos datos se conserven a través de un reinicio. El calificador de tipo persistent (o __persistent ) se usa para calificar variables que no deben ser borradas por el código de inicio de tiempo de ejecución.

     

Además, cualquier variable persistente se almacenará en un área diferente de la memoria a otras variables. Se utilizan diferentes psectos para sostener estos objetos. Consulte 5.15.2 Psects generados por compilador para obtener más información.

     

Este calificador de tipo no se puede usar en variables de clase auto; sin embargo, las variables locales definidas estáticamente pueden ser calificadas como persistentes. Por ejemplo, deberías escribir:

     

void test(void) { static persistent int intvar; /* must be static */ // ... }

     

Si se usa la opción xc8, --STRICT , no puede usar el calificador persistent , pero puede continuar usando __persistent .

Por supuesto, un "problema" con esto es que no obtiene un valor predeterminado de encendido para su contador: el valor de encendido real puede ser completamente aleatorio. Por lo tanto, puede intentar examinar el registro STATUS para intentar averiguar de qué manera se ha iniciado el chip, o dar una opción de restablecimiento manual al usuario de alguna manera.

    
respondido por el Majenko

Lea otras preguntas en las etiquetas