Autor Tema: ayuda con EEPROM del 16F628  (Leído 2088 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado movwf

  • PIC10
  • *
  • Mensajes: 5
ayuda con EEPROM del 16F628
« en: 09 de Octubre de 2013, 11:20:57 »
Hola , estoy intentando guardar valores en la eeprom de un pic 16F628.
Son tres datos , todos se graban y leen con exactamente la misma rutina.
Pero al cargar los valores luego de una desconección de la fuente , sólo recupero 2.
El tercero siempre tiene un valor que desconozco pero mas alto que el guardado.
He buscado por todo el foro , pero sólo encontré una indicación de no usar CALL para ir a la rutina de grabación.
Por lo cual uso GOTO para ir a la rutina y nada , le he cambiado el nombre al registro que contiene el valor y nada.
Las rutinas que uso son las siguientes pero no está en ellas el error , de todas formas lo subo.
Si alguien a tenido problemas parecidos con éste pic le agradezco me indique como lo solucionó.

graba        movf        REGISTRO,0               ; grabo en EEPROM valor de dimmer , cargo el dato en W porque está en el banco 0 y  luego paso al banco1.
                bsf        status,0x5                              
                movwf    eedata
                movlw    0x00      
                movwf    eeadr      
                bcf         intcon,0x7      
                bsf         eecon1,0x2                     
           movlw    0x55          
                movwf    eecon2
                movlw    0xAA       
                movwf    eecon2      
                bsf         eecon1,0x1
                btfsc       eecon1,0x1
                goto        $-1
                bcf          status,0x5
                call         disparo
                goto        ciclo1         

Como ven espero el flag para darle tiempo a la escritura.     

leer           bsf       status,0x5
                movlw   0x00               
                movwf   eeadr
                bsf        eecon1,0x0
                movf     eedata,0
                bcf        status,0x5
                movwf   REGISTRO2

La verdad que le he dado muchas vueltas y no encuentro el motivo para que no grabe o lea los tres
registros por igual.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: ayuda con EEPROM del 16F628
« Respuesta #1 en: 09 de Octubre de 2013, 12:19:38 »
  A simple vista las rutinas parecerían estar bien, pero habría que ver el resto del programa. Si estás utilizando interrupciones debes tener en cuenta el deshabilitarlas para la escritura en la eeprom. También puede ocurrir algún problema con el tema de los bancos...
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado movwf

  • PIC10
  • *
  • Mensajes: 5
Re: ayuda con EEPROM del 16F628
« Respuesta #2 en: 09 de Octubre de 2013, 12:35:31 »
Gracias por responder angelgris.
No uso interrupciones ni watchdog , sólo el tmr0 como temporizador y funciona bien.
Para aclararte un poco mas el problema,te explico que tengo varias rutinas seleccionables dentro del programa
por medio de un pulsador.
Pues lo que intento es memorizar en eeprom un número correspondiente a cada rutina.
Cada vez que selecciono una rutina ésta guarda ese número para en caso de desconección del dispositivo.
Al iniciar el programa lo primero que hace es ir a leer la eeprom y cargar el valor en un registro para luego ir a la rutina correspondiente.
Pues no se la razón por la cual a 2 rutinas va sin problemas pero a la tercera o las que le agregue simplemente se queda en nada.
Y si lo que guardo es un valor de uso de una de las rutinas que si arrancan, éste valor no se guarda tampoco.
La verdad que me tiene delirando,porque he revisado la configuración, todos los valores se graban y leen exactamente igual,la verdad que por el momento no tengo idea
ya que es la primera vez que uso éste pic porque es el único que encontré en el comercio.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: ayuda con EEPROM del 16F628
« Respuesta #3 en: 10 de Octubre de 2013, 08:49:50 »
 ¿Podrías mostrar el programa completo? De ser posible con la opción GeSHi de editor de mensajes del foro, para que sea más fácil la lectura.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado ValeAt

  • PIC10
  • *
  • Mensajes: 3
Re: ayuda con EEPROM del 16F628
« Respuesta #4 en: 27 de Diciembre de 2013, 15:20:33 »
Estas son las subrutinas que yo utilizo y funcionan, aunque no recuerdo de donde las saqué (No son mias)
hechales un vistazo, posiblemente te puedan ayudar.

; *******************************************************
   CBLOCK
   GuardaINTCON         ; Guarda temporalmente el registro INTCON.
   ENDC


; Para leer una posición de  la eprom.
   movf   Dirección_X      ; Donde queremos leer.
   call   LeeDato
   .
   .
; Para guardar en la eprom:
   movf   Dirección_X      ;
   movwf   EEADR         ; Posición donde vamos a guardar.
   movf   Registro1,W      ; Lo que queremos guardar.
   call   Guarda
   .
   .
; ----------------------------------------------------
; Esta subrutina devuelve el dato leido en W
LeeDato
   bsf      STATUS,RP0   
   movwf   EEADR   
   bsf      EECON1,RD   
   btfsc   EECON1,RD   
   goto   $-1      
   movf   EEDATA,W   
   bcf      STATUS,RP0   
   return            
; ******************************************************
Guarda
   bsf      STATUS,RP0   
   movwf   EEDATA   
   movf   INTCON,W   
   movwf   GuardaINTCON
   bcf      INTCON,GIE   
   bsf      EECON1,WREN   
   movlw   0x55
   movwf   EECON2
   movlw   0xAA
   movwf   EECON2
   bsf      EECON1,WR   
   btfsc   EECON1,WR   
   goto   $-1
   bcf      EECON1,WREN            ; Desautoriza la escritura.
   bcf      EECON1,EEIF            ; Limpia este flag.
   movf   GuardaINTCON,W    
   movwf   INTCON
   bcf      STATUS,RP0      
   return

« Última modificación: 15 de Enero de 2014, 07:55:14 por ValeAt »


 

anything