Autor Tema: Guardar Estado, y restaurar cuando Restableces la alimentación  (Leído 1611 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado abenene

  • PIC10
  • *
  • Mensajes: 2
Guardar Estado, y restaurar cuando Restableces la alimentación
« en: 19 de Septiembre de 2014, 11:50:54 »
Hola estoy relizado un programador para activar un relé a diferentes horas,
El projecto lo estoy haciendo en PicBasicPro, y el problema es que  no consigo que regrese, al estado  en que se encontraba,
en el caso de que falle la alimentación del dispositivo.
Os paso mi codigo para ver si me podeis hechar una mano.

Define   I2C_SCLOUT   1   ;No es necesario resistencia pull-up en SCL

 CMCON = 7        ; Habilito Puerto A Todo Digital  TESTEANDO....???
'********************* DEFINO LOS PINES DEL LCD *****************
  DEFINE LCD_DREG PORTB  ;bit de datos del LCD empezando
  DEFINE LCD_DBIT 0      ;por B.0, B.1, B.2 y B.3
  DEFINE LCD_RSREG PORTB ;bit de registro del LCD conectar
  DEFINE LCD_BITS 4      ;Definimos el pic para usar el LCD con 4 lineas.
  DEFINE LCD_RSBIT 4     ;en el puerto B.4
  DEFINE LCD_EREG PORTB  ;bit de Enable conectar en el
  DEFINE LCD_EBIT 5      ;puerto B.5
  DEFINE LCD_LINES 2     ;Numero de lineas del LCD
 '*************** DEFINO NOMBRES DE LOS PINES DE SALIDA     ******
 RELE VAR PORTA.2     ' SALIDA RELE_1 DE ACTIVACION
'**DEFINO PINES DEL CHIP I2C DS1307 y EEPROM ********************
 contro  CON %10100000  ;contro contiene valor constante %10100000
                       ;Que es la direccion del Dispositivo memoria
                       ;EEprom  I2c
CPIN  Var Portb.7      ;pin señal de reloj I2C
DPIN  Var Portb.6      ;pin de datos I2C
'memo  VAR BYTE        ;variable para almacenar dato leído de la EEprom
segu    var byte   ;definir tamaño de variable segundos 1 a 255
minu    var byte   ;variable para los minutos
hora    var byte   ;variable para las horas
diaS    var byte   ;variable día de la semana
diaF    var byte   ;variable día fecha del mes
mes     var byte   ;variable mes
anio    var byte   ;variable año de 2 dígitos
dato    VAR BYTE   ;variable para almacenar dato leído
actualizado   var bit
alarma  var bit     ' guardo como esta el rele on o off
transi  var bit
'*******************************************************************
EEPROM 0,[0]            ;memoria 0 con el valor inicial 0 , sirve para
                        ;indicar que nunca ha corrido este programa
EEPROM 1,[0]            ;memoria 1 con el valor inicial 0
EEPROM 2,[0]            ;memoria 2 con el valor inicial 0
READ 0,actualizado          ;carga el valor de la memoria EEPROM dirección 0
'READ 1,alarma           ;carga el valor de la memoria EEPROM dirección 1
'READ 2,transi            ;carga el valor de la memoria EEPROM dirección 2
IF actualizado=0 THEN grabarRTC  ;si es la 1ra vez que corre ir a grabar RTC
                                  ;caso contrario solo leer el RTC
'******************************* inicio *****************************                                   
inicio:
   
    pause 10
    I2CREAD DPIN,CPIN,%11010000,0,[segu]   ;leer los datos de mem. 0,           
    I2CREAD DPIN,CPIN,%11010000,1,[minu]   ;1,2,..y guardarlos en sus
    I2CREAD DPIN,CPIN,%11010000,2,[hora]   ;respectivas variables
    I2CREAD DPIN,CPIN,%11010000,3,[diaS]
    I2CREAD DPIN,CPIN,%11010000,4,[diaF]             
    I2CREAD DPIN,CPIN,%11010000,5,[mes]
    I2CREAD DPIN,CPIN,%11010000,6,[anio]
         
    lcdout $fe,1,hex2 hora,":",hex2 minu,":",hex2 segu   ;mostrar la
                          ;hora minuto y segundos en 2 dígitos (HEX2)
 if alarma =1 and transi=0 then conecta
 if alarma =0 and transi=1 then desconecta                         
'************************  PROGRAMACION DE LAS ALARMAS *********************

conec:   
    if PORTA.2=1 then WRITE $01,1 ' Guardamos el estado en alarma
desco:                     
    if PORTA.2=0 then WRITE $02,0 ' Guardamos el estado en transito

horarios:   
    if hora=$06 and minu=$00 and segu=$00 then high RELE
   
    if hora=$06 and minu=$00 and segu=$10 then low RELE

    if hora=$06 and minu=$00 and segu=$12 then high RELE
                                       
    if hora=$06 and minu=$00 and segu=$15 then low RELE

    goto inicio      ;volver a leer los datos
'***************************************************************   
desconecta:
    low rele
    pause 10
    if rele=0 then WRITE transi,0 ' Guardamos el estado en transito   
    goto conec
conecta:
    high rele
    pause 10
    if rele=1 then WRITE alarma,1 ' Guardamos el estado en alarma
   
     goto desco
   
' *********** PUESTA EN FECHA Y HORA ****************************
grabarRTC:
     
I2CWRITE DPIN,CPIN,%11010000,0,[$57]   ; Poner Segundo inicial
    Pause 10                           ;retardo para finalizar grabación
I2CWRITE DPIN,CPIN,%11010000,1,[$59]   ; Poner Minuto inicial
    Pause 10 
I2CWRITE DPIN,CPIN,%11010000,2,[$05]   ;Poner la Hora inicial
    Pause 10 
I2CWRITE DPIN,CPIN,%11010000,3,[$4]    ;Poner nombre del dia ,D=1,L=2
    Pause 10                           ;M=3 , M=4, J=5, V=6, S=7
I2CWRITE DPIN,CPIN,%11010000,4,[$09]    ;Poner numero del dia
    Pause 10 
I2CWRITE DPIN,CPIN,%11010000,5,[$7]    ;Poner nombre del mes
    Pause 50 
I2CWRITE DPIN,CPIN,%11010000,6,[$14]   ;Poner numero del año 2014
    Pause 10
I2CWRITE DPIN,CPIN,%11010000,7,[$10]    ;control %00010000 para
    Pause 10                            ;encender el led cada 1 seg.

WRITE $00,1       ;escribe en la memoria 0 el valor de 1 para que no   
                ;se vuelva a grabar otra vez estos datos en el RTC
     GOTO inicio    ;ir a presentar los datos en el LCD
end


Muchas gracias