Pic16f877 no graba en su EEPROM

Que tal a todos los foristas
El problema que tengo es el siguiente:
estoy haciendo un sistema de seguridad para mi casa, estoy usando un pic16f877, el sistema se activa y desactiva con un teclado numerico, todo me funciona bien pero al momento de cambiar el password este no se graba en la eeprom, ya lo he intentado de muchas maneras y el resultado es el mismo, lo simule en el Proteus y ahi si me funciona mas sin embargo no tengo idea por que en el hardware no se comporta como debiera, el codigo lo hice en Pic Basic Pro, ya habia usado las instrucciones READ y WHITE con un 16f84 y ahi no tuve ningun problema mas no entiendo por que ahora no me funciona, esta es la parte del codigo que cambia los passwords si alguien me pudiera ayudar se lo agradeceria bastante..
Gracias

nota* se ve que use 5 direcciones de memoria y luego concatene el password , lo estaba haciendo directamente y si funciona, pero solo en el proteus..

'---------------------------------------RUTINA QUE CAMBIA EL PASSWORD---------------------------------------------------
select case pasw

case 1 'si cae aqui es que se pretende cambiar el password, avisa y manda a pedir el nuevo password
high 7 ' avisa que se ha realizado la operacion de cambio de password prendiendo el led
pause 3000 'lo retardamos unos 3 segundos para que el usuario se de cuenta de que se acepto la operacion
'read 1,access 'leer en la eeprom el pasword anterior y almacenarlo en access
if nume=pass then 'comparar nume con access
intruso=0
alarma1=0
nume=0 'la variable que almacena el password se resetea para almacenar el nuevo password
goto back 'si la comparacion es verdadera, se va a la rutina del teclado a esperar el nuevo password
else
problema=1
pause 1000
pasw=0
endif

case 2

pass=nume
n1=pass dig 4
n2=pass dig 3
n3=pass dig 2
n4=pass dig 1
n5=pass dig 0

pass=n1
pass=pass*10+n2
pass=pass*10+n3
pass=pass*10+n4
pass=pass*10+n5

write 1,n1
write 2,n2
write 3,n3
write 4,n4
write 5,n5
nnn=12
write 8,nnn

nume=0
gato=0
pasw=0

intruso=1
pause 5000
alarma1=1
goto reiniciar
case else
problema=1
end select
return
'----------------------------------------------------RUTINA QUE CAMBIA EL PASSWORD-------------------------------------
 
que tal necesito que subas la simulación en proteus y el cogido completo para ver el almacenamiento en la memoria y así poder ayudarte
 
que tal mecatrodatos,
aqui esta la simulacion y el codigo, como te comento en el proteus funciona correctamente y en el hardware no, otra cosa, me confundi , el otro proyecto que tengo y que si me funciono lo de leer y escribir en la eeprom del pic tambien funciona con un 16f877a y funciona de maravilla, entonces para descartar los microcontroladores le cambie el pic a ese proyecto y comprobe que si me esta grabando en la eeprom, no se si sea algo del hardware pero que puede ser? lo unico que esta diferente creo yo es la conexion del reset pero en fin, espero y me puedas ayudar.

Saludos y gracias
 

Adjuntos

  • software alarma pic 16f877 rev1.rar
    2.2 KB · Visitas: 95
  • etapa principal alarma sin teclado.rar
    8.3 KB · Visitas: 49
le hechare un vista hasta que nos de el otro año jeee

subiste el ares y necesito el proteus para la simulación para ver el almacenamiento en la posición de la memoria del pic 16f877, seria lo mas fácil y así te podre ayudar.por otro lado veo que la clave que estas utilizando es de 5 caracteres lo visualizas en LCD o solamente utilizas testigos (LEDS)

has conectado el pic MCLR del pic a VDD con una resistencia de 1 Kohmio? o espérame y te subo un proyecto completo con clave de acceso visualización en LCD
 
Última edición:
es verdad me confundi de archivo
aqui esta el proteus
tambien te mando el codigo completo por que lo que te mande primero era el archivo hex

si, use solamente testigos por que el plan es que de un efecto visual , para desanimar ladrones por eso tiene tantos leds

pero de igual forma me interesa el que me propones para aprender como se hace
el reset lo conecte con un divisor de voltaje ( no recuerdo por que, algo tenia planeado con el reset y no lo termine ) veo que en la salida del divisor el voltaje es muy bajo puede que sea ese el problema?
gracias por tu ayuda y feliz año
 

Adjuntos

  • etapa principal alarma sin teclado.rar
    31.1 KB · Visitas: 43
  • software alarma pic 16f877 rev1.rar
    5.2 KB · Visitas: 46
gracias por el update!
ya lo conecte asi como me sugeriste gracias
aun asi sigo teniendo problemas con la eeprom, me sigue sin grabar los datos
que crees que pueda ser??

saludos
 
que tal mirando tu código veo alguna inconsistencia:

nnn=123
write 8, nnn
pause 1000
read 8, pass

WRITE:

Sintaxis: WRITE dirección, variable
La instrucción WRITE almacena datos en la memoria EEPROM de un microcontrolador en una dirección específica.

Write $00,1 ' graba el dato o valor “1” en la dirección $00 en tu caso graba el valor 123 en la dirección 8.

READ
Sintaxis: READ dirección, variable
La instrucción READ permite leer datos desde la memoria EEPROM de datos de un microcontrolador almacenándolos en una variable previamente definida.

Read $00, VAR1 ' lee el dato de la dirección especificada y lo guarda en la variable VAR1 en tu caso lee el valor 123 ubicado en la dirección 8 y lo guarda en pass.

pero :

write 1,n1 se escriben
write 2,n2
write 3,n3
write 4,n4
write 5,n5

y la rutina de lectura no esta en el programa por ejemplo:

read 1,m1
read 2,m2
read 3,m3 'donde las m son variable para almacenar el dato
read 4,m4
read 5,m5

por otro lado puedes utilizar la eeprom de la siguiente forma para almacenar la primera clave :

eeprom 0, [1,2,3,4,5] cargar la memoria eeprom DESDE LA DIRECCION 0 en adelante
 
haa bueno, perdon, es que estuve modificando el codigo, y no lo agregue por que estuve batallando mucho por que no lo grababa, estoy deacuerdo con lo que dices falta esa parte del codigo pero imagina que esta escrita y aun asi no lo graba voy a revisar el codigo nuevamente, agregare esa parte que falta y te lo envio para que le des un vistazo, aun asi no se por que no quiere grabar los datos.. nunc ame habia pasado

saludos
 
que tal mecatrodatos, feliz anio nuevo!
como mencionas, tambien utilice la instruccion eeprom 1,[12345] por ejemplo para almacenar la primera clave, tengo unas dudas con esta instruccion a ver si me puedes ayudar, ahi por ejemplo, almaceno 12345 en la direccion 1 de la eeprom es correcto, pero esta instruccion solo se ejecuta una vez es correcto? es decir que si luego modifico el dato de la direccion 1 y reinicio el pic este guardara el nuevo dato o regresara el dato 12345?
utilice esa instruccion al principio y me funciono bien , modifique los datos y en el proteus funciona pero en el hardware no, comprobe que el dato se guardara en la eeprom poniendo testigos en el programa y si me respondia bien pero en el hardware no,
ahorita lo que hice fue usar la instruccion eeprom al principio del programa como dices para almacenar la primera clave, mas sigo teniendo el mismo problema , no me deja dormir este problema
saludos
Jorge
 
que tal mira si con este proyecto ilustrado en LCD te puede ayudar para establecer la ubicación del datos en la memoria EEprOm del PIC esta el codigo la simulacion y el .hex
 

Adjuntos

  • clave.rar
    52.5 KB · Visitas: 67
Que tal como estas!
fijate, ya intente de todo y el problema se sigue presentando, en el proteus si me respeta el dato grabado en la eeprom, oprimo reset y el dato sigue estando almacenado, hago lo mismo en el proyecto y se comporta igual, no me graba la informacion de plano ya no se por donde atacar el problema, si lo estoy programando mal entonces por que en el proteus si funciona?
puede ser el programador? podria ser posible?
saludos

ya inclusive monte un 16f877 en un proto con un programa muy sencillo para probar si se graban o no los datos y aun asi no me funciona: este es el programa que estoy usando para mis pruebas:

trisa= %000000
var1 var byte
eeprom 7,[1]
porta=1
pause 1000
porta=2
pause 1000
porta=3
pause 1000
porta=0
pause 2000

var1= 1
write 1, var1
pause 5000
var1=0

read 1, var1
pause 5000
porta=var1
pause 1000
read 7,var1
porta=var1
end

cuando var1=1 y luego lo grabo en la eeprom para despues leerlo y mostrarlo en porta el resultado es 15 en ves de 1 luego, hago var1=0 para leer la direccion 7 de la eeprom, en este caso se uso la instruccion eeprom y ahi si me funciona, en el port a me devuelve 1 pero no es el caso con write y no entiendo por que, este programita en proteus tambien funciona correctamente.
saludos
 
Última edición:
Que tal amigo como estas?
ya solucione el problema, como te comente anteriormente en otro proyecto que tengo si puedo almacenar en la eeprom , los pic estan ok el programador tambien, el programa tambien el problema era la red de filtraje del circuito, mas bien no tenia red de filtraje al agregar capacitores en la alimentacion el problema se resolvio
muchas gracias por tus comentarios !!
ya aprendi algo nuevo !
 
Que tal, bueno ahora tengo otro problema, los datos en la eeprom se graban correctamente, pero cuando desconecto la alimentacion de la bateria, y la conecto de nuevo funciona, el dato se queda almacenado , sin embargo si lo desconecto por mucho tiempo al volverlo a conectar el dato desaparece
alguien sabe que podria estar pasando/?

saludos
 
hola.... oye muchas gracias por tu proyecto, me gustaria saber si puedes subir, el codigo, pero no en assembler sino en lenguaje c normal...te agradeceria una pronta respuesta...
 
saludos a todos.. en definitiva yo uso desde hace años la siguiente sintaxis y me funciona bn:

- Para asignar valores directamente en las posiciones de memoria de EEPROM del pic = EEPROM,0 [1,2,3,4]... recomiendo siempre usar: EEPROM 0,[Var1, Var2....] ya que ésto inicia la asignacion desde la posicion CERO "0" de la EEPROM, asi no tendrán errores.. ¡a mi me funciona muy bn!

- Para guardar datos en la EEPROM = ( WRITE 0, N1) Ésto, escribe el valor de N1 en la Posicion 0 de la EEPROM

-Para para leer datos en una posicion de la EEPROM = (READ 0,N1) Ésto lee el dato en la posicion CERO "0" de la EEPROM y lo guarda en la variable N1

XD ..Espero les ayude y exitos en los proyectos mi gente.. XD
 
Atrás
Arriba