Autor Tema: Problema con la escritura en la EEPROM  (Leído 6033 veces)

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

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Problema con la escritura en la EEPROM
« en: 16 de Julio de 2010, 10:35:42 »
Buenos dias amigos saludos desde venezuela, les escribo para ver si me pueden ayudar con el problema que tengo, la EEPROM no escribe, o no lee no se cual es el problema, aqui les muestro la rutina para ver si me ayudan con el problema....

Lo que mas o menos deberia hacer es guardar los datos secuencialmente de 0 a 8 en la posicion de la memoria 0 hasta la 8, para luego ser leida de la misma manera de la posicion de la memoria 0 hasta la 8, para ser mostrada en un display 7 segmentos, el problema es que hace la rutina pero siempre sale este error en proteus...

[PIC16 MEMORY]PC=0x0034. Attempt to write unimplemented memory location 0X001B with 0X09 ignored
[PIC16 MEMORY]PC=0x0034. Attempt to write unimplemented memory location 0X001B with 0X08 ignored
[PIC16 MEMORY]PC=0x0034. Attempt to write unimplemented memory location 0X001B with 0X07 ignored
[PIC16 MEMORY]PC=0x0034. Attempt to write unimplemented memory location 0X001B with 0X06 ignored
[PIC16 MEMORY]PC=0x0034. Attempt to write unimplemented memory location 0X001B with 0X05 ignored
[PIC16 MEMORY]PC=0x0034. Attempt to write unimplemented memory location 0X001B with 0X04 ignored
[PIC16 MEMORY]PC=0x0034. Attempt to write unimplemented memory location 0X001B with 0X03 ignored
[PIC16 MEMORY]PC=0x0034. Attempt to write unimplemented memory location 0X001B with 0X02 ignored
[PIC16 MEMORY]PC=0x0034. Attempt to write unimplemented memory location 0X001B with 0X01 ignored
[PIC16 MEMORY]PC=0x0034. Attempt to write unimplemented memory location 0X001B with 0X09 ignored

Citar
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ENCABEZADO \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

   LIST      P=16F628            ; Microcontrolador utilizado.-
   #INCLUDE   <P16F628.INC>         ; Definicion de registros SFR.-
   __CONFIG   0x3F61
         ;0x3F18

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ DEF. DE VARIABLES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

   CBLOCK   0x20
   DATO
   DIR
   FACTOR
   FACTOR1
   CONT
   CONT1
   CONT2
   REG
   REG1
   REG2
   ENDC


;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ RESET \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

RESET
   ORG           00H
   GOTO   INICIO               ; Salto a inicio del programa.-

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ CONFIG. DE PUERTOS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

   ORG      05H

INICIO
   MOVLW   0x07
   MOVWF   CMCON               
   BSF           STATUS,RP0
   MOVLW   B'11111'
   MOVWF   PORTA
   MOVLW   B'00000000'
   MOVWF   PORTB
   BCF       STATUS,RP0
   CLRF           PORTA
   CLRF           PORTB
   CLRF           DIR
   CLRF           CONT
   MOVLW   .9
   MOVWF   FACTOR
   CLRF           FACTOR1
   MOVLW   .9
   MOVWF   CONT2
   GOTO    WRITE_EEPROM

INCR   INCF   CONT,F
   INCF           DIR,F

WRITE_EEPROM
   MOVF   CONT,W
   XORWF   FACTOR,0
   BTFSC   STATUS,Z
   GOTO   READ_EEPROM
   BSF           STATUS,RP0
   BCF           STATUS,RP1
   MOVF   DIR,0
   MOVWF   EEADR
   MOVF   CONT1,W
   MOVWF   EEDATA
   BCF           INTCON,GIE
   BSF           EECON1,WREN
   MOVLW   55H
   MOVWF   EECON2
   MOVLW   0AAH
   MOVWF   EECON2
   BSF           EECON1,WR
   BTFSC   EECON1,WR
   GOTO   $-1
   BCF           EECON1,WREN
   BSF           INTCON,GIE
   BSF           STATUS,RP0
   BCF           STATUS,RP0
   GOTO   INCR

DECRE
   DECF        CONT2,F
   ;INCF   DIR,F
READ_EEPROM                  
   MOVF   CONT2,W
   MOVWF   EEADR
   BSF           STATUS,RP0
   BCF           STATUS,RP1
   BSF           EECON1,RD
   BTFSC   EECON1,RD
   GOTO   $-1
   BCF           STATUS,RP0
   BCF           STATUS,RP1
   MOVF   EEDATA,0
   MOVWF   DATO
   CALL           MULTIPLEXA
   MOVF   CONT2,W
   XORWF   FACTOR1,0
   BTFSS   STATUS,Z
   GOTO   DECRE
   GOTO   FIN               
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ TABLA DE DISPLAY \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

TABLA
   ADDWF    PCL,1
   RETLW   B'10000000'
   RETLW   B'11110010'
   RETLW   B'01001000'
   RETLW   B'01100000'
   RETLW   B'00110010'
   RETLW   B'00100100'
   RETLW   B'00000100'
   RETLW   B'11110000'
   RETLW   B'00000000'
   RETLW   B'00110000'
   RETLW   B'10000000'

MULTIPLEXA
   MOVF   DATO,W
   CALL           TABLA
   MOVWF   PORTB
   CALL           RET8MS
   RETURN

RET8MS
   MOVLW   .26
   MOVWF   REG2
LAZO3
   MOVLW   .94
   MOVWF   REG1
LAZO2
   MOVLW   .109
   MOVWF   REG
   DECFSZ   REG,1
   GOTO   $-1
   DECFSZ   REG1,1
   GOTO   LAZO2
   DECFSZ   REG2,1
   GOTO   LAZO3   
   RETURN
FIN
   END

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Problema con la escritura en la EEPROM
« Respuesta #1 en: 16 de Julio de 2010, 12:26:35 »
hola Goodfrey.segun he visto en tu codigo,parece que en la linea de incremento no has puesto ningun condicional para que cuando se pase de la direccion 0x07.
no siga contando.
ya que si direccionas la eeprom mas alla de las direccionas que posee el chip,se produce un herror por desbordamiento.

saludos.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Problema con la escritura en la EEPROM
« Respuesta #2 en: 16 de Julio de 2010, 13:02:46 »
hola Goodfrey.segun he visto en tu codigo,parece que en la linea de incremento no has puesto ningun condicional para que cuando se pase de la direccion 0x07.
no siga contando.
ya que si direccionas la eeprom mas alla de las direccionas que posee el chip,se produce un herror por desbordamiento.

saludos.

amigo no entendi mucho lo que me dijiste xq sinceramente estoy aprendiendo a escribir en la eeprom, aqui te mando el codigo arrelge para ver que opinas de este...

Citar
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ENCABEZADO \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

   LIST      P=16F628            ; Microcontrolador utilizado.-
   #INCLUDE   <P16F628.INC>            ; Definicion de registros SFR.-
   __CONFIG   0x3F61
         ;0x3F18

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ DEF. DE VARIABLES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

   CBLOCK   0x20
   DATO
   DIR
   FACTOR
   FACTOR1
   CONT
   CONT1
   CONT2
   REG
   REG1
   REG2
   ENDC


;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ RESET \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

RESET
   ORG   00H
   GOTO   INICIO               ; Salto a inicio del programa.-

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ CONFIG. DE PUERTOS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

   ORG      05H

INICIO
   MOVLW   0x07
   MOVWF   CMCON               
   BSF   STATUS,RP0
   MOVLW   B'11111'
   MOVWF   PORTA
   MOVLW   B'00000000'
   MOVWF   PORTB
   BCF   STATUS,RP0
   CLRF   PORTA
   CLRF   PORTB
   CLRF   DIR
   CLRF   CONT
   CLRF   CONT1
   MOVLW   .9
   MOVWF   FACTOR
   CLRF   CONT2
   GOTO    WRITE_EEPROM

INCR   INCF   CONT,F
   INCF   DIR,F

WRITE_EEPROM
   MOVF   CONT,W
   XORWF   FACTOR,0
   BTFSC   STATUS,Z
   GOTO   READ_EEPROM
   BSF     STATUS,RP0      ;cambiar a Banco 1
   BSF   EECON1,WREN   ;habilitar grabación de EEPROM
   MOVF   CONT,W      ;aquí va el dato a escribir en EEPROM
   MOVWF   EEDATA      ;poner dato en en EEDATA
   MOVF   DIR,W      ;dirección de EEPROM
   MOVWF   EEADR      ;ponerla en EEADR
   MOVLW   55H      
   MOVWF   EECON2      ;comando
   MOVLW   0AAH
   MOVWF   EECON2      ;comando
   BSF   EECON1,WR   ;agregar el dato en la EEPROM
   BTFSC   EECON1,WR   ;esperar a que termine (10 ms)
   GOTO   $-1
   BCF      STATUS,RP0      ;cambiar a Banco 0
   GOTO   INCR

DECRE
   INCF   CONT1,F
   ;INCF   DIR,F
READ_EEPROM                  
   
   BSF     STATUS,RP0      ;cambiar a Banco 1
   MOVF   CONT1,W      ;dirección de EEPROM
   MOVWF   EEADR      ;ponerla en EEADR
   BSF   EECON1,RD   ;operación de lectura
   MOVF   EEDATA,w   ;leer dato desde EEPROM
   BCF   STATUS,RP0      ;cambiar a Banco 0
   MOVWF   DATO      ;guardar el dato
   CALL   MULTIPLEXA
   MOVF   CONT2,W
   XORWF   FACTOR,0
   BTFSS   STATUS,Z
   GOTO   DECRE
   GOTO   FIN
               
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ TABLA DE DISPLAY \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

TABLA
   ADDWF    PCL,1
   RETLW   B'10000000'
   RETLW   B'11110010'
   RETLW   B'01001000'
   RETLW   B'01100000'
   RETLW   B'00110010'
   RETLW   B'00100100'
   RETLW   B'00000100'
   RETLW   B'11110000'
   RETLW   B'00000000'
   RETLW   B'00110000'
   RETLW   B'10000000'

MULTIPLEXA
   MOVF   DATO,W
   CALL   TABLA
   MOVWF   PORTB
   CALL   RET8MS
   RETURN

RET8MS
   MOVLW   .26
   MOVWF   REG2
LAZO3   MOVLW   .94
   MOVWF   REG1
LAZO2   MOVLW   .109
   MOVWF   REG
   DECFSZ   REG,1
   GOTO   $-1
   DECFSZ   REG1,1
   GOTO   LAZO2
   DECFSZ   REG2,1
   GOTO   LAZO3   
   RETURN
FIN
   END

ahora el error que da este es que me guarda supuestamente los datos sin problema y lo lee pero siempre almacena el mismo dato... puro 0 en todas las direcciones espero me ayudes con el codigo gracias.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Problema con la escritura en la EEPROM
« Respuesta #3 en: 16 de Julio de 2010, 13:59:22 »
A ver.
Estoy en casa y no tengo instalado siquiera el MPLAB.
Espera lo baje, lo instale y te lo debugee.

Stand by  :mrgreen:
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Problema con la escritura en la EEPROM
« Respuesta #4 en: 16 de Julio de 2010, 14:26:01 »
Hmm.... cosa rara....  :shock:

Cuando simulo esta rutina y veo los registros pues ... hace lo que no debería

   MOVF   CONT,W      ;aquí va el dato a escribir en EEPROM
   MOVWF   EEDATA    ;poner dato en en EEDATA
   MOVF   DIR,W         ;dirección de EEPROM
   MOVWF   EEADR      ;ponerla en EEADR

O sea que si el dato de CONT es 0 y lo muevo a W ... entonces no mueve 0, sino 1 o visceversa... Lo mismo con el DIR.

Dame unos minutitos, que las brujas no existen pero que las hay, las hay ! XD
« Última modificación: 16 de Julio de 2010, 14:28:14 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Problema con la escritura en la EEPROM
« Respuesta #5 en: 16 de Julio de 2010, 15:05:11 »
Bueno, solucionado. No había brujas pero me llama la atención en donde estaba el fallo:

Al parecer no deja actuar sobre el acumulador si estás en otro banco que no sea el banco 0. Cosa rara porque en otros micros he podido cargar el acumulador desde cualquier banco. No lo sé...

Lo he probado, funciona y graba del 00 al 08 con datos 00 a 08.
También funciona la lectura, tuve que cambiar la linea de carga de acumulador que estaba en banco 1 al banco 0.
El resto es cosa tuya  :mrgreen: :D



 LIST      P=16F628            ; Microcontrolador utilizado.-
   #INCLUDE   <P16F628.INC>            ; Definicion de registros SFR.-
   __CONFIG   0x3F61
         ;0x3F18

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ DEF. DE VARIABLES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

   CBLOCK   0x20
   DATO
   direccion
   FACTOR
   FACTOR1
   dato
   CONT1
   CONT2
   REG
   REG1
   REG2
   ENDC


;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ RESET \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

RESET
   ORG   00H
   GOTO   INICIO               ; Salto a inicio del programa.-

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ CONFIG. DE PUERTOS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

   ORG      05H

INICIO
   MOVLW   0x07
   MOVWF   CMCON              
   BSF   STATUS,RP0
   MOVLW   B'11111'
   MOVWF   PORTA
   MOVLW   B'00000000'
   MOVWF   PORTB
   BCF   STATUS,RP0
   CLRF   PORTA
   CLRF   PORTB
   CLRF   direccion
   CLRF   dato
   CLRF   CONT1
   MOVLW   .9
   MOVWF   FACTOR
   CLRF   CONT2
   GOTO    WRITE_EEPROM

INCR   INCF   dato,1
   INCF   direccion,1

WRITE_EEPROM
   MOVF   dato,W
   XORWF   FACTOR,0
   BTFSC   STATUS,Z
   GOTO   READ_EEPROM
   MOVF   dato,W     ;aquí va el dato a escribir en EEPROM
   BSF     STATUS,RP0      ;cambiar a Banco 1
   MOVWF   EEDATA      ;poner dato en en EEDATA
   BCF      STATUS,RP0      ;cambiar a Banco 0
   MOVF   direccion,W     ;dirección de EEPROM
   BSF     STATUS,RP0      ;cambiar a Banco 1
   MOVWF   EEADR      ;ponerla en EEADR
   BSF   EECON1,WREN   ;habilitar grabación de EEPROM
   MOVLW   0x55    
   MOVWF   EECON2      ;comando
   MOVLW   0xAA
   MOVWF   EECON2      ;comando
   BSF   EECON1,WR   ;agregar el dato en la EEPROM
   BTFSC   EECON1,WR   ;esperar a que termine (10 ms)
   GOTO   $-1
   BCF      STATUS,RP0      ;cambiar a Banco 0
   GOTO   INCR

   


DECRE
   INCF   CONT1,F
   ;INCF   DIR,F
READ_EEPROM                  
   MOVF   CONT1,W      ;dirección de EEPROM
   BSF     STATUS,RP0      ;cambiar a Banco 1
  
   MOVWF   EEADR      ;ponerla en EEADR
   BSF   EECON1,RD   ;operación de lectura
   MOVF   EEDATA,w   ;leer dato desde EEPROM
   BCF   STATUS,RP0      ;cambiar a Banco 0
   MOVWF   DATO      ;guardar el dato
   CALL   MULTIPLEXA
   MOVF   CONT2,W
   XORWF   FACTOR,0
   BTFSS   STATUS,Z
   GOTO   DECRE
   GOTO   FIN
              
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ TABLA DE DISPLAY \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

TABLA
   ADDWF    PCL,1
   RETLW   B'10000000'
   RETLW   B'11110010'
   RETLW   B'01001000'
   RETLW   B'01100000'
   RETLW   B'00110010'
   RETLW   B'00100100'
   RETLW   B'00000100'
   RETLW   B'11110000'
   RETLW   B'00000000'
   RETLW   B'00110000'
   RETLW   B'10000000'

MULTIPLEXA
   MOVF   DATO,W
   CALL   TABLA
   MOVWF   PORTB
   CALL   RET8MS
   RETURN

RET8MS
   MOVLW   .26
   MOVWF   REG2
LAZO3   MOVLW   .94
   MOVWF   REG1
LAZO2   MOVLW   .109
   MOVWF   REG
   DECFSZ   REG,1
   GOTO   $-1
   DECFSZ   REG1,1
   GOTO   LAZO2
   DECFSZ   REG2,1
   GOTO   LAZO3  
   RETURN
FIN
   END
« Última modificación: 16 de Julio de 2010, 15:10:08 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problema con la escritura en la EEPROM
« Respuesta #6 en: 16 de Julio de 2010, 15:22:38 »
 Exacto este es el problema, mueves CONT a W pero estas en el BANCO1, y CONT se incremanta pero a W siempre le llega 0 porque esta en el BANCO 0 no en el 1.

 
BSF     STATUS,RP0      ;cambiar a Banco 1
BSF   EECON1,WREN   ;habilitar grabación de EEPROM
   MOVF   CONT,W      ;aquí va el dato a escribir en EEPROM
   MOVWF   EEDATA      ;poner dato en en EEDATA

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Problema con la escritura en la EEPROM
« Respuesta #7 en: 17 de Julio de 2010, 00:30:28 »
Bueno, solucionado. No había brujas pero me llama la atención en donde estaba el fallo:

Al parecer no deja actuar sobre el acumulador si estás en otro banco que no sea el banco 0. Cosa rara porque en otros micros he podido cargar el acumulador desde cualquier banco. No lo sé...

Lo he probado, funciona y graba del 00 al 08 con datos 00 a 08.
También funciona la lectura, tuve que cambiar la linea de carga de acumulador que estaba en banco 1 al banco 0.
El resto es cosa tuya  :mrgreen: :D

MUCHISIMAS GRACIAS MI PANA, ME SALVASTE LA VIDA, AHORA PODRE SEGUIR CON EL CODIGO.... NO ENTIENDO MUCHO TODAVIA LO DEL BANCO0 Y BANCO 1 PERO LO AVERIGUARE... GRACIAS POR LA RESPUESTA

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Problema con la escritura en la EEPROM
« Respuesta #8 en: 19 de Julio de 2010, 04:10:49 »
NO ENTIENDO MUCHO TODAVIA LO DEL BANCO0 Y BANCO 1 PERO LO AVERIGUARE... GRACIAS POR LA RESPUESTA

Mira la hoja de datos del micro. En la sección memory organization encontrarás una tabla (data memory map). Está dividida en 4 columnas , cada columna es una banco. Tenemos banco 0, banco 1, banco 2, banco 3. En cada banco hay ditintos registros. Por ejemplo: Si queremos utilizar el registro EEDATA pues tendremos que movernos al banco 1. Y como lo hacemos? :

Para ir a banco 0 :
bcf STATUS,RP0
bcf STATUS, RP1

Para ir al banco 1:
bsf STATUS,RP0
bcf STATUS,RP1

Para ir al banco 2
bcf STATUS,RP0
bsf STATUS,RP1

Para ir al banco 3
bsf STATUS,RP0
bsf STATUS,RP1

Por supuesto, si le dices al micro desde banco 0 : "Oye, lee el dato de EEDATA"  , entonces el micro leerá el registro RCREG.

Lo entiendes?

El problema que tenía tu código era precisamente un error al cargar W desde el banco 1, por eso tuve que agregar instrucciones para que volviese al banco 0 para cargar W.
Hay otras opciones para moverse entre bancos, pero mejor aprendes las bases para que te quede claro que debes tener a mano una memory map del micro que uses para saber en que banco está ubicado cada registro.
« Última modificación: 19 de Julio de 2010, 04:17:21 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Problema con la escritura en la EEPROM
« Respuesta #9 en: 22 de Julio de 2010, 11:40:42 »
vaya.no me habia dado cuenta de ese dato.es cierto que para leer o escribir en un registro de la ram,hay que seleccionar el banco donde esta situado susodicho registro.

estos errores se suelen cometer cuando nos acostumbramos a usar un solo banco  de memoria.claro que es mas sencillo y ademas ganaremos velocidad al no tener que estar continuamente conmutando los bancos.aunque es imprescindible usar otros bancos cuando nos quedamos sin memoria.

en el caso de que quisieramos usar registros sin tener que estar conmutando los bancos.y que se pudieran leer y escribir sin este error,podriamos usar
los ultimos 16bytes de los bancos 1,2,3. eso si estoy ablando del pic 16F876 y otros de estas caracteristicas.ya que estas direcciones de registros estan mapedadas en los registros mencionados.

esto nos seria util en algun tipo de programa que necesitaramos usar un registro sin tener que hechar mano a la conmutacion de estos.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con la escritura en la EEPROM
« Respuesta #10 en: 22 de Julio de 2010, 12:37:05 »
Así es groundman.
Los últimos 16Bytes de la RAM son muy útiles para salvar temporalmente el contenido de W, STATUS, PCL, etc a la hora de entrar en una interrupción.
Me parece que tu me lo has enseñado (sobre estos 16 Bytes) y desde entonces los uso así. Reservo 4, como mínimo, para trabajar a la hora de las interrupciones.

Es hora de que Microchip, en la familia de los 16F, 12F, etc, elimine los bancos. Cuando agregue un nuevo PIC en la familia, debería hacer todo en un solo banco. Sin duda aumentaría la potencia de los PICs.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Problema con la escritura en la EEPROM
« Respuesta #11 en: 22 de Julio de 2010, 17:19:27 »
Es hora de que Microchip, en la familia de los 16F, 12F, etc, elimine los bancos.

Como la gama 18f.... que delicia... no tener que pensar en los malditos bancos  :D
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado PulKon

  • PIC12
  • **
  • Mensajes: 70
Re: Problema con la escritura en la EEPROM
« Respuesta #12 en: 03 de Septiembre de 2010, 05:06:50 »
Esto es lo que me esta pasando con mi contador de 6 digitos con memoria, voy a realizar los cambios y espero que me funcione.
La felicidad no consiste en tener lo que quieres, sino en querer lo que tienes.


 

anything