Autor Tema: PIC 16F84A y EEPROM, problemas con la lectura  (Leído 5301 veces)

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

Desconectado pepe-grillo

  • PIC10
  • *
  • Mensajes: 13
PIC 16F84A y EEPROM, problemas con la lectura
« en: 10 de Julio de 2006, 00:22:50 »
Hola a todos!

Tengo un problema que ha sido mi dolor de cabeza todo el fin de semana.

Estoy trabajando en asm, con MPLAB 7.30, programando un sencillo pic 16F84A. La idea de mi programa es contar unos pulsos y guardar el último en la memoria EEPROM, y mostrarlo además en unos 7 segmentos, el dato debe quedar almacenado de forma tal que al existir un reset o apagar el pic, este arranque de nuevo desde el ultimo valor...

Mi problema es que todo va muy bien hasta que llega el momento de resetear... el pic muestra un numero muy diferente al que deberia mostrar... la cuestion es que sin resetear, puedo hacer algunas pruebas con un pin dedicado para interrumpir a proposito y hacer pruebas a los datos almacenasdos en la EEPROM... pero si quito la energio o pulso el reset... no hay último dato... siempre me sale un valor fijo (24)... que no comprendo de donde sale y además la simulación en MPLAB no colabora mucho.

Para escribir y leer las memorias eeprom he utilizado estrictamente las rutinas que los chicos de microchip sugieren en el datasheet del pic.

Les agradeco cualquier ayuda. Si lo necesitan puedo postear el codigo de la rutina de inicio posterior al reset o lo que crean conveniente.

Muchas gracias.

Pepe-grillo

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: PIC 16F84A y EEPROM, problemas con la lectura
« Respuesta #1 en: 10 de Julio de 2006, 00:45:11 »
Hola pepe. Si posteas el codigo seguro podremos ayudarte mas facilmente. Que pic estas usando? Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado pepe-grillo

  • PIC10
  • *
  • Mensajes: 13
Re: PIC 16F84A y EEPROM, problemas con la lectura
« Respuesta #2 en: 10 de Julio de 2006, 01:42:09 »
Hola BrunoF!

Como lo indique, estoy trabajando con un pic 16F84A...

He hecho algunos ensayos, aparentemente solo me esta quemando el primer dato... el siguiente simplemente no lo escribe... esto lo pude mirar utilizando el WinPic800 para mirar los datos almacenados

Para que no sea tan dificil de entender, la variable vuelta esta compuesta por una parte alta y una baja (vuelta_L y vuelta_H), ademas el registro llamado DIR_EEPROM, es el ancargado de almacenar por un momento la direccion donde deseo que se almacene el dato

Este es el codigo de la rutina para escribir la eeprom:

ESCRIBIR_EEPROM
   BANKSEL    EEDATA
   MOVF      VUELTA_L, W      
   MOVWF     EEDATA         
   MOVF      DIR_EEPROM,W
   MOVWF     EEADR            
   BCF        INTCON, GIE   
   BANKSEL    EECON1
   BSF        EECON1, WREN
   MOVLW     H'55'         
   MOVWF     EECON2         
   MOVLW     H'AA'         
   MOVWF     EECON2         
   BSF        EECON1, WR   
   BSF        INTCON, GIE      
   BCF        EECON1, WREN   
   BCF        EECON1, EEIF
   RETURN

Esta es la subrutina que utiliza dos veces el codigo anterior para crear 2 registros eeprom

BORRAR_EEPROM
   MOVLW   B'11101000'
   MOVWF   VUELTA_L   
   MOVLW   B'00000000'
   MOVWF   DIR_EEPROM
   CALL     ESCRIBIR_EEPROM

   MOVLW   B'00000011'      
   MOVWF   VUELTA_L      
   MOVLW   B'00000001'
   MOVWF   DIR_EEPROM
   CALL     ESCRIBIR_EEPROM
   
   RETFIE

Este es el final de la subrutina que se ejecuta despues de cada reset
       ....(otro codigo)...
   BANKSEL    INTCON
   MOVLW     B'10111000'
   MOVWF     INTCON         
   BSF        CONTROL_DISPLAY, DIG_UNIDAD
   CALL       LEER_EEPROM
   RETURN

Y por ultimo, esta es la subrutina leer_eeprom
LEER_EEPROM
   BANKSEL     EEADR
   MOVLW      B'00000000'
   MOVWF      EEADR
   BANKSEL     EECON1
   BSF         EECON1, RD
   BANKSEL     EEDATA         
   MOVF       EEDATA, W
   MOVWF     VUELTA_L
               
   MOVLW     B'00000001'
   MOVWF     EEADR      
   BANKSEL    EECON1      
   BSF        EECON1, RD
   BANKSEL    EEDATA         
   MOVF      EEDATA, W   
   MOVWF    VUELTA_H   
                  
   RETURN


Como pueden ver, es todo lo que dice en el pdf de microchip.

De nuevo muchas gracias!!

Pepe-grillo

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: PIC 16F84A y EEPROM, problemas con la lectura
« Respuesta #3 en: 10 de Julio de 2006, 02:54:11 »
Hola pepe-grillo, si no creo mal, tienes un problema con la rutina de grabación en la EEPROM, prueba con esta que te dejo:

Código: ASM
  1. GUARDAR
  2.         movf    VUELTA_L, W  
  3.         movwf   EEDATA
  4.         movlw   DIR_EEPROM,W
  5.         movwf   EEADR
  6.         bcf     INTCON, GIE
  7.         bsf     STATUS,RP0
  8.         bcf     EECON1,WRERR
  9.         bsf     EECON1,WREN
  10.         movlw   H'55'
  11.         movwf   EECON2
  12.         movlw   H'AA'
  13.         movwf   EECON2
  14.         bsf     EECON1,WR
  15. ES1     nop
  16.         btfss   EECON1,EEIF
  17.         goto    ES1
  18.         nop
  19.         btfsc   EECON1,WRERR
  20.         goto    GUARDAR
  21.         nop
  22.         bcf     EECON1,EEIF
  23.         bcf     EECON1,WREN
  24.         bcf     STATUS,RP0
  25.         bsf     INTCON, GIE
  26.         return

Espero te sea de utilidad, un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: PIC 16F84A y EEPROM, problemas con la lectura
« Respuesta #4 en: 10 de Julio de 2006, 03:25:09 »
Hola pepe. Bueno, las EEPROM son bastante lentejas(lentas). Y en tu codigo mandas a hacer una grabacion inmediatamente despues de iniciada la anterior, un motivo de problema. Ahi Charly te agrego, entre otras cosas, las lineas para comprobar la finalizacion de la escritura de un dato antes de salir de la rutina de grabacion.

Charly esos "nop" van de regalo?  :lol: :lol:

pepe:a la rutina BORRAR_EEPROM la haces volver con un RETFIE. El RETFIE es parecido al RETURN, pero a la vez activa las interrupciones globales(INTCON,GIE). Estas seguro que es lo que necesitas hacer?
No es necesario BANKSEL para algunos registros, tal como para el INTCON, que si miras el mapa de memoria se encuentra en ambos bancos del PIC.

pd. Por casualidad, no seras el pepegrillo de el primer foro de microcontroladores y electronica de melodysoft, no? hace como 6 años que andaba en ese foro xd! se me caen las lagrimas :mrgreen:
Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado pepe-grillo

  • PIC10
  • *
  • Mensajes: 13
Re: PIC 16F84A y EEPROM, problemas con la lectura
« Respuesta #5 en: 10 de Julio de 2006, 10:30:13 »
Hola Charly!

Muchas gracias por el codigo!

Lo probare enseguida.

Hola Bruno!

Te cuento que yo no soy ese pepegrillo... yo soy el pepe-grillo al que hace unos pocos meses le resolviste una duda (con una explicación excelente) sobre una tabla que cruzaba entre 2 bancos de un PIC 16F877... no se si me recuerdas.

Lo de la instrucción RETFIE yo lo entiendo, la cuestion es que a borrar memoria lo llama una interrupción en el pin RB6... lo del tiempo lo estuve mirando apenas despues de escribir el post... pero realmente no pense que fuera tan grave.

Bueno, no siendo mas, probare el código y en un momento les aviso.

Chao y muchas gracias

Pepe-grillo

PD: Lo del banksel es una casi mania....

Desconectado pepe-grillo

  • PIC10
  • *
  • Mensajes: 13
Re: PIC 16F84A y EEPROM, problemas con la lectura
« Respuesta #6 en: 10 de Julio de 2006, 10:45:01 »
¡¡¡Señores!!!

Ustedes son unos genios... eso fue plug and play... funciono de una, estoy que lloro... muchas gracias Chaly y Bruno, de verdad que no pense tener resuelto este problema tan pronto.

Muchas gracias, muchos exitos, que esten muy bien

Pepe-grillo

PD: Chaly, disculpame por haber escrito en el post anterior Charly... lei mal :)

De nuevo muchas gracias
« Última modificación: 10 de Julio de 2006, 10:47:13 por pepe-grillo »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: PIC 16F84A y EEPROM, problemas con la lectura
« Respuesta #7 en: 10 de Julio de 2006, 13:22:24 »
Me alegro que hayas resuelto tu problema.
Ahora si te recuerdo.Perdona, mi memoria hace cortos a veces. :D
Lo de los tiempos si es un tema importante. Pensa que el tiempo promedio para grabar un dato en EEPROM es de 5ms, y eso es una eternidad para un PIC, asi que hay que asegurarse de que se haya terminado de grabar el dato antes de querer grabar otro.
Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado pepe-grillo

  • PIC10
  • *
  • Mensajes: 13
Re: PIC 16F84A y EEPROM, problemas con la lectura
« Respuesta #8 en: 10 de Julio de 2006, 15:43:45 »
Gracias Bruno!

Lo tendre muy en cuenta.

Chao

Pepe-grillo

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: PIC 16F84A y EEPROM, problemas con la lectura
« Respuesta #9 en: 10 de Julio de 2006, 16:32:02 »
Hola BrunoF, no te quedaste corto con los 5ms?  :mrgreen:

Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: PIC 16F84A y EEPROM, problemas con la lectura
« Respuesta #10 en: 10 de Julio de 2006, 21:03:12 »
jajaja como te gusta retrucarme a vos!
Y...dije "en promedio". Puede que lleve hasta 20ms, como puede que lleve menos. Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: PIC 16F84A y EEPROM, problemas con la lectura
« Respuesta #11 en: 11 de Julio de 2006, 00:05:14 »
jajajaja, te sentiste tocado, y a vos te gusta sacarme mano por los nop, ahora se las aguanta señorito  :D  :D  :D

Un saludo y no te cabrees tanto brunito (segun microchip las eeprom tardan en promedio 10 ms)

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.