Grabar dato de salida en memoria del PIC por corte de energía

Buenas noches, soy nuevo en este foro, y mi pregunta es la siguiente: Estoy programando el pic 16f84a para realizar un telerruptor, pero quiero que cuando tengamos un corte de alimentacion si la salida del pic esta activa cuando se tenga alimentacion esta salida continue activa.
Si alguna persona me puede aconsejar le estare muy agradecido.
Att. lemoca22
El programa que e realizado es el siguiente:
INCLUDE <P16F84A.INC>

CBLOCK 0x0C
Contador
Cont1
ENDC

bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
clrf TRISB ; Las líneas del Puerto B configuradas como salidas.
movlw b'00011111' ; Las 5 líneas del Puerto A configuradas como entradas.
movwf TRISA
bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
clrf PORTB

inicio
pul1 btfsc PORTA,0 ;como esta pulsador
goto inicio
call Retardo_200ms ; era un rebote y sale fuera
btfsc PORTA,0 ; como esta pulsador
goto pul1
pls1 btfss PORTA,0 ;como esta pulsador
goto pls1 ; Espera que deje pulsar
btfsc Cont1,0 ; Esta el contador a 0
goto off_1 ; Esta luz encendida
bsf PORTB,1 ; Esta apagada y la enciende
bsf Cont1,0 ; Pone el contador a 1
goto inicio

off_1
call Retardo_200ms
bcf PORTB,1 ; Esta encendida y la apaga
clrf Cont1 ; pone el contador a 0
goto inicio

INCLUDE <RETARDOS.INC>
END
 
Para este tipo de necesidades puedes recurrir a la utilización de la EEPROM interna del pic. Por medio de un circuito externo se monitorea la señal alterna del transformador de la fuente con que se alimenta el circuito; cuando esta falla, el circuito envía una señal de interrupción (RB0) al uC para que inicie una rutina y almacene el estado de la salidas en la EEPROM. Una vez que se restablezca el suministro de energía, el PIC iniciaría de nuevo y leería de la EEPROM el ultimo estado de las salidas antes del corte de energía y actualizaría su estado. Te dejo el diagrama del circuito que genera la interrupción al PIC. saludos
 

Adjuntos

  • interrupcion.PNG
    interrupcion.PNG
    18.1 KB · Visitas: 22
Hola a todos, un consulta soy algo novato en esto de los pics pero tengo las ganas de aprender.

Hice una programacion en mikroc en el pic 18f2550, el problema biene aqui, haciendo ejemplo que mi programacion se trata de solo prender y apagar un led, si yo dejo en ON el led y corto la energia al pic, y vuelvo a suministrale energia el led iniciara en OFF por el corte de energia, mi gran duda aqui como programar para que el pic se quede en el ultimo estado (led ON) despues de volverle a suministar energia ?

he esta dateando y creo que se puede programando en la memoria eeprom, pero la cantida de eeprom de mi pic es muy corto para la programacion que estoy realizando, alguien favor me ayude como podria programarlo grcias slu2
 
he esta dateando y creo que se puede programando en la memoria eeprom, pero la cantida de eeprom de mi pic es muy corto para la programacion que estoy realizando

:unsure: se me hace raro que utilices toda la eeprom del pic si solo prende y apaga un led, podrias poner el codigo?

tambien puedes poner una eeprom externa por i2c.
 
lo que estoy haciendo se basa en control por dtmf por celular es por eso lo del respaldo de datos.
lo del led es solo un ejemplo, el exe de mi programacion pesa por el momento 2.4kb pero esto solo es el comienzo hasta terminar mi programacion supongo pesara el triple.
 
Lo que tú tienes que hacer es guardar en una dirección de la Eeprom del PIC un dato cada vez que actives o desactives ese LED, por ejemplo A'1' = Led On, A'0'= Led Off. Lees ese dato cada vez que se inicia tu programa, si es cualquiera de esos datos, pues que haga lo que corresponde, si no, pues que mantenga el LED apagado. Solo necesitarias un byte de Eeprom.

Ahora, la forma en la que vas a tener que hacer la escritura en la Eeprom va a depender de ti. Puedes utilizar interrupciones (una vez escaneada la eeprom y accionado el led mandas el PIC a modo Sleep y solo "despierta" cuando haces una interrupcion externa) o por el escaneo continuo de tu entrada. En ambos casos debes de utilizar una bandera para saber el estado actual del LED y saber si lo vas a encender o a apagar (el uso de uno o dos botones va a depender de ti y de tu lógica).

No necesitas mucha flash para configurar un puerto, escribir/leer la eeprom, habilitar las interrupciones y la rutina propia que entra en juego cada que se activa la interrupcion o el reinicio del PIC por que se quedo sin energia y de eeprom solo necesitas 1 Byte.

Lo principal seria eso, que aprendas como:
Leer/escribir en la Eeprom
Habilitar una interrupcion externa
La inicialización del pic para que haga lo que tu quieres. (Eso depende de tu lógica).
 
el exe de mi programacion pesa por el momento 2.4kb pero esto solo es el comienzo hasta terminar mi programacion supongo pesara el triple.

yo no pedia programa del PC, sino del PIC, o no creo que el pic utilice un exe.

sin mas datos es imposible dar una opinion con respecto al programa XD.

otra manera es que le implementes un UPS y listo.
 
es justamente lo que dice Mralphone guardar el ultimo estado de las salidas TRIS en una parte del eeprom me pondre a investigar, me despejaste las dudas gracias
 
En el registro TRIS no esta el estado de las salidas, estos se encuentran en el registro PORT, y como que me parece que estas confundiendo la memoria flash con la eeprom.
 
Atrás
Arriba