Autor Tema: problemas al escribir en la eeprom del 16f676  (Leído 3516 veces)

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

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
problemas al escribir en la eeprom del 16f676
« en: 25 de Mayo de 2007, 01:32:05 »
hola de nuevo compañeros:

despues de intentar hacer cositas y ya encender leds y esas cosas, estoy intentando escribir en la eeprom de un pic16f676, lo hago de la forma que indica en el datasheet, pero algo no va.

no se si alguien tambien ha tenido problemas con esto.

adjunto el programa que estoy haciendo por si alguien le puede hechar un vistazo y puede decirme donde me equivoco.

 :-/

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: problemas al escribir en la eeprom del 16f676
« Respuesta #1 en: 25 de Mayo de 2007, 11:59:19 »
Código: ASM
  1. al ves te sirva
  2.  
  3. escritura pic 16f877
  4. ;BITS DE MEMORIA EEPROM
  5. SPEN    EQU     7
  6. EEPGD   EQU     7
  7. EEIE    EQU     4
  8. WREN    EQU     2
  9. RD      EQU     0
  10. GIE     EQU     7
  11. WR      EQU     1
  12. EEIF    EQU     4
  13.  
  14.  
  15. saludos
  16.  
  17.  
  18. ESCRIBIR
  19.         BCF     STATUS,6        ;BANCO 0
  20.         BCF     STATUS,5
  21.         MOVF    ADDR_L,W
  22.         BSF     STATUS,6        ;BANCO 2 SE METE EEADR LA DIRECCION
  23.         MOVWF   EEADR           ;A LA QUE SE BA A ACCEDER.
  24.         BCF     STATUS,6        ;BANCO CERO
  25.         MOVF    MINUTO,W        ;SE METE EN EEDATA EL DATO A
  26.         BSF     STATUS,6       
  27.         MOVWF   EEDATA          ;ESCRIBIR
  28.         BSF     STATUS,5        ;BANCO 3       
  29.         BCF     EECON1,EEPGD    ;ACCESO A LA MEMORIA DE PROGRAMA
  30.         BSF     EECON1,WREN     ;HABILITO ESCRITURA DE EEPROM.
  31.         MOVLW   55H            
  32.         MOVWF   EECON2
  33.         MOVLW   0AAH
  34.         MOVWF   EECON2
  35.         BSF     EECON1,WR       ;SE LE DA ORDEN A LA ESCRITURA.
  36.         MOVLW   B'11000000'     ;HABILITO INTERRUPCIONES.
  37.         MOVWF   INTCON
  38.         BCF     STATUS,6        ;BANCO 0       
  39.         BCF     STATUS,5
  40. RET     BTFSS   PIR2,EEIF       ;¿ESCRITURA LISTA?  SI, SALTE.
  41.         GOTO    RET             ;NO GOTO RET
  42.         BCF     PIR2,EEIF       ;BORRAR BIT DE PREGUNTA.
  43.         BSF     STATUS,5
  44.         BSF     STATUS,6
  45.         BCF     EECON1,WREN    
  46.         BCF     STATUS,6        ;BANCO 0
  47.         BCF     STATUS,5
  48.         RETURN
  49.  
  50.  
  51. saludos
[/color]

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: problemas al escribir en la eeprom del 16f676
« Respuesta #2 en: 27 de Mayo de 2007, 14:06:52 »
hola y gracias:

yo creo que lo hago bien, pues lo unico que detecto que no hago como tu es especificar en cada paso los bancos, pero no se mas, lo he modificado asi pero no me convence, pues en los datasheets no viene asi.

Código: [Seleccionar]
[pre]ESCRIBE_MODE
                                                ;contenido de mode a eeprom
bsf STATUS,RP0 ;Bank 1
bcf STATUS,RP0 ;Bank 0
MOVLW 00h ;CARGA DIRECCION DE EEPROM
bsf STATUS,RP0 ;Bank 1
MOVWF EEADR
bcf STATUS,RP0 ;Bank 0
MOVF MODE,0 ;CARGA EL CONTENIDO DE MODE EN W
bsf STATUS,RP0 ;Bank 1
MOVWF EEDAT ;LO PONE EN EEDAT
bsf EECON1,WREN ;Enable write
bcf INTCON,GIE ;Disable INTs
bcf STATUS,RP0 ;Bank 0
movlw 0x55 ;Unlock write ;REQUIERED
bsf STATUS,RP0 ;Bank 1
movwf EECON2 ; ;REQUIERED
bcf STATUS,RP0 ;Bank 0
movlw   0xAA ;b'10101010' ;carga aah ;REQUIERED
bsf STATUS,RP0 ;Bank 1
movwf EECON2 ; ;REQUIERED
bsf EECON1,WR ;Start the write;REQUIERED
NOP
NOP
NOP
bsf INTCON,GIE ;Enable INTS
bcf EECON1,WREN
bcf STATUS,RP0 ;Bank 0

RETURN[/pre]

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: problemas al escribir en la eeprom del 16f676
« Respuesta #3 en: 28 de Mayo de 2007, 12:41:06 »
pues nada, que he probao y no va...

es mas, al simular en el mplab, detecto que el 55h y el aah no los veo aparecer en los registros eecon2.....

no se que pasa, estoy mas perdido que.... me callo.

adjunto el nuevo prog.

de momento solo tengo el programa definido entradas salidas y quiero comprobar la pos de mem 01 de la eeprom si es ffh, que la cambie a 01h y que escriba el contenido de la ooh de laeeprom al puerto c.

a vefr si los que sois expertos me hechais un cable

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: problemas al escribir en la eeprom del 16f676
« Respuesta #4 en: 28 de Mayo de 2007, 17:13:38 »
amigo dame un poco de tiempo y te treere informacion mañana no me habia tenido la molestia de ayudarte por cuentiones de tiempo.

donde Va call    0x3FF

RET   BTFSS   PIR2,EEIF   ;¿ESCRITURA LISTA?  SI, SALTE...... porque no haces esta pregunta?       GOTO   RET



si miras aqui no trabajo con interrupciones

porque no lo realizas como te doy el ejemplo yo almacenaba en la memoria eeprom del pic16f877
solo tienes que buscar en que banco se localizan los registros en el pic 16f876 y cambiar al respectivo banco

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: problemas al escribir en la eeprom del 16f676
« Respuesta #5 en: 29 de Mayo de 2007, 01:32:39 »
hola

el call 0x3ff si lo tengo al principio...

voy a probar esta tarde con lo de preguntar el bit.

si que desabilito las interrupciones



vamos a ver que pasa

en el pic16f676 los bancos de registro de la eeprom estan en el banco 1, pues en este micro solo hay 2 bancos


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: problemas al escribir en la eeprom del 16f676
« Respuesta #6 en: 29 de Mayo de 2007, 08:47:26 »
es mas, al simular en el mplab, detecto que el 55h y el aah no los veo aparecer en los registros eecon2.....

El registro EECON2 es "write only" , el MPSIM simula el comportamiento exacto del microcontrolador por ende no te mostrará el contenido de un registro que no se puede leer.

En cuanto a la secuencia de grabación debes copiar EXACTAMENTE lo que dice el datasheet y no lo que a tí te parece.

Tu haces

Código: ASM
  1. bcf     STATUS,RP0                      ;Bank 0
  2.                 movlw   0x55                            ;Unlock write   ;REQUIERED
  3.                 bsf     STATUS,RP0                      ;Bank 1
  4.                 movwf   EECON2                          ;                               ;REQUIERED
  5.                 bcf     STATUS,RP0                      ;Bank 0
  6.                 movlw   0xAA                            ;b'10101010'                    ;carga aah              ;REQUIERED
  7.                 bsf     STATUS,RP0                      ;Bank 1
  8.                 movwf   EECON2                          ;                               ;REQUIERED
  9.                 bsf     EECON1,WR                       ;Start the write;REQUIERED

y debes hacer

Código: ASM
  1. bsf     STATUS,RP0      ;Bank 1
  2.         bsf     EECON1,WREN     ;Enable write
  3.         bcf     INTCON,GIE      ;Disable INTs
  4.         movlw   55h     ;Unlock write
  5.         movwf   EECON2  ;
  6.         movlw   AAh     ;
  7.         movwf   EECON2  ;
  8.         bsf     EECON1,WR       ;Start the write
  9.         bsf     INTCON,GIE      ;Enable INTS

La secuencia debe ser IDENTICA.


Por último, veo en tu código algo que no me gusta y es que al parecer tu piensas que debes estar en el banco 0 para escribir en el WREG sino veo sin sentido algunas cosas que haces.

Por último, si grabarás varios datos en la eeprom o en el mimso lugar pero muy seguido, te debo decir que una grabación dura unos 4 a 8 mseg y durante ese tiempo si mandas a grabar de nuevo el micro no hará nada.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: problemas al escribir en la eeprom del 16f676
« Respuesta #7 en: 29 de Mayo de 2007, 11:28:51 »
OK, MAUNIX:

ES CIERTO, LO DE CAMBIAR DE BANCO ES TONTERIA, PERO COMO NO ME FUNCIONABA, ERA CUESTION DE IR PROBANDO.

AL PRICIPIO YO LO PUSE IDENTICO QUE EL DATASHEET, PERO NO IBA. DE HECHO AHORA HAGO COMO SIGUE:

ESCRIBE_MODE
                           ;contenido de mode a eeprom
      bsf    STATUS,RP0          ;Bank 1
   
      MOVLW   00h               ;CARGA DIRECCION DE EEPROM
      MOVWF   EEADR
      MOVF   MODE,0            ;CARGA EL CONTENIDO DE MODE EN W
      MOVWF   EEDAT            ;LO PONE EN EEDAT
      bsf    STATUS,RP0          ;Bank 1
      bsf    EECON1,WREN       ;Enable write
      bcf    INTCON,GIE          ;Disable INTs
      movlw    55H            ;Unlock write   ;REQUIERED
      movwf    EECON2             ;            ;REQUIERED
      movlw   AAh            ;b'10101010'         ;carga aah      ;REQUIERED
      movwf    EECON2             ;            ;REQUIERED
      bsf    EECON1,WR          ;Start the write;REQUIERED
      bsf    INTCON,GIE          ;Enable INTS
      bcf    EECON1,WREN
      bcf    STATUS,RP0          ;Bank 0
      NOP
      NOP
      NOP
      NOP
      RETURN

EL PROBLEMA ES QUE EL DATO AAh NO LO RECONOCE EL MPLAB COMO DATO Y ME DA UN ERROR DE SIMBOLO NO DEFINIDO PREVIAMENTE, Y ME APARECE DE COLOR MORADO EN VEZ DE COLOR AZUL COMO OCURRE CON EL DATO 55H.

¿COMO OBRAR?

PD: GRACIAS POR TUS CORRECIONES Y YA ME ENTERAO DE QUE LOS REGISTROS QUE  NO EXISTEN NO SE PUEDEN LEER...


MIL GRACIAS

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: problemas al escribir en la eeprom del 16f676
« Respuesta #8 en: 29 de Mayo de 2007, 11:42:28 »
GRACIAS A TI TAMBIEN MICROCOM:

EN CUANTO A LO QUE ME COMENTAS PUES TAMBIEN HE PROBADO, PERO...

1) EL PIC16F676 NO TIENE PIR2

2) CON TU IDEA SE ME OCURRIO HACERLO TESTEANDO EL WR DEL EECON1, Y CUANDO ESTE A CERO PUES SE HA ESCRITO, PERO NO FUNCIONA, LO PRUEBO EN EL MPLAB...

AQUI PONGO EL MISMO CODIGO DE ARRIBA PERO CON EL TESTEO.

ESCRIBE_MODE
                           ;contenido de mode a eeprom
      bsf    STATUS,RP0          ;Bank 1
   
      MOVLW   2100h               ;CARGA DIRECCION DE EEPROM
      MOVWF   EEADR
      MOVF   MODE,0            ;CARGA EL CONTENIDO DE MODE EN W
      MOVWF   EEDAT            ;LO PONE EN EEDAT
      bsf    STATUS,RP0          ;Bank 1
      bsf    EECON1,WREN       ;Enable write
      bcf    INTCON,GIE          ;Disable INTs
      movlw    55H            ;Unlock write   ;REQUIERED
      movwf    EECON2             ;            ;REQUIERED
      movlw   0XAA            ;b'10101010'         ;carga aah      ;REQUIERED
      movwf    EECON2             ;            ;REQUIERED
      bsf    EECON1,WR          ;Start the write;REQUIERED
RET      BTFSC   EECON1,WR   ;¿ESCRITURA LISTA?  SI, SALTE..     
      GOTO   RET
      bsf    INTCON,GIE          ;Enable INTS
      bcf    EECON1,WREN
      bcf    STATUS,RP0          ;Bank 0
      NOP
      NOP
      NOP
      NOP
      RETURN


COMO A MAUNIX TE DIGO ,,MIL GRACIAS...

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: problemas al escribir en la eeprom del 16f676
« Respuesta #9 en: 29 de Mayo de 2007, 12:16:10 »
BUENO, MIRANDO POR EL FORO, HE ENCONTRADO UN CODIGO DE MINCHO PARA 16F626 (CREO) Y LO HE DEJADO ASI:

; ESCRIBE EN LA EEPROM

ESCRIBE_MODE
                           ;contenido de mode a eeprom
      bsf    STATUS,RP0          ;Bank 1
   
      MOVLW   00h               ;CARGA DIRECCION DE EEPROM
      MOVWF   EEADR
      MOVF   MODE,0            ;CARGA EL CONTENIDO DE MODE EN W
      MOVWF   EEDAT            ;LO PONE EN EEDAT
      CALL   ESCRIBIR
      RETURN
   
;OTRA RUTINA DE ESCRITURA

ESCRIBIR

   BCF    INTCON, GIE    ; Disable INTs.
   BSF    STATUS, RP0    ; Bank 1
   bcf      EECON1,WRERR
   BSF    EECON1, WREN    ; Enable write
   MOVLW    55h          ;
   MOVWF    EECON2          ; Write 55h
   MOVLW    0xAA          ;
   MOVWF    EECON2          ; Write AAh
   BSF    EECON1,WR       ; Set WR bit
                     ; begin write
ESPERAR      
   BCF     STATUS,RP0
   BTFSS   PIR1,EEIF   ; Lee ek EEIF y salta una instrucción si el valor es 1
   GOTO   ESPERAR         ; Espera de grabación de la EEPROM
   BSF     STATUS,RP0
   btfsc   EECON1,WRERR
   goto   ESCRIBIR
   BCF     STATUS,RP0
   BCF      PIR1,EEIF   ; Limpia el flag EEIF
   BSF     STATUS,RP0
   bcf      EECON1,WREN   
   BCF      STATUS,RP0
   BCF    INTCON, GIE
   RETURN



EL CASO ES QUE EN MPLAB, LO CORRO Y AL PARALO ME APARECE ESCRITA LA EEPROM, MIENTRAS CORRE NO VEO NADA Y AL HACERLO CORRER PASO A PASO TAMPOCO VEO NADA.

A VER SI CONSIGO ENTENDER...

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: problemas al escribir en la eeprom del 16f676
« Respuesta #10 en: 29 de Mayo de 2007, 14:15:55 »
amigo mira a ver este codigo que me simula bien :carga el valor en eedat en la posicion cero del  EEADR.
LIST    P=16F676
 #INCLUDE<P16F676.INC>
;DECLARACION DE VARIABLES
TIMER0   EQU   01   
PCL     EQU     02
STATUS   EQU   03
PORTA   EQU   05
PORTC   EQU     07
CMCOM   EQU   19H
PIE1   EQU      8CH
EEDAT   EQU      9AH
EEADR   EQU      9BH
EECON1   EQU      9CH
EECON2   EQU      9D
MEMORIA   EQU      20
REG1   EQU   21
REG2   EQU   22
REG3   EQU   23


INICIO   
   BCF   STATUS,5   ;CONFIGURACION DE PUERTOS   

    MOVLW   05H
    MOVWF   CMCOM
   BSF      STATUS,5
   CLRF   ANSEL
   MOVLW   07   
   MOVWF   ADCON1
   MOVLW   B'110000'
   MOVWF   TRISA
   CLRF   ANSEL
   MOVLW   B'1111111'
   MOVWF   PORTC
   BCF   STATUS,5
   CLRF   PORTC      



ESCRIBIR
ESCRIBIR_DATO          ;ESCRIBIR DATO EN EEPROM
   BSF   STATUS,5
   MOVLW   0   ;DIRECCION  A ACCEDER
   MOVWF   EEADR
   BCF   STATUS,5
   MOVF    MEMORIA,0
   BSF   STATUS,5
   MOVWF   EEDAT
   BSF   INTCON,GIE
   BSF   EECON1,WREN      ;HABILITA ESCRITURA
   MOVLW   H'55'
   MOVWF   EECON2
   MOVLW   H'AA'
   MOVWF   EECON2
   BSF   EECON1,WR       ;INICIA ESCRITURA
TERMI_ESCRIBIR      
   BTFSC   EECON1,WR
   GOTO   TERMI_ESCRIBIR
   BCF   EECON1,WREN
   BCF   EECON1,EEIF
   BCF   STATUS,5      ;BANCO0
   
RETURN


    
LEER_DATO              ;LEER DATO EN EEPROM
   MOVLW   0
   BSF   STATUS,5
   MOVWF   EEADR
   BSF   EECON1,RD   ;ORDEN DE LECTURA
SIG_LEY   BTFSC   EECON1,RD
   GOTO   SIG_LEY
   BSF   STATUS,5
   
   MOVF   EEDAT,0
   BCF   STATUS,5
   
   MOVWF   PORTA

RETURN

   RETURN


saludos y espero haber
« Última modificación: 29 de Mayo de 2007, 14:23:01 por microcom »

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: problemas al escribir en la eeprom del 16f676
« Respuesta #11 en: 30 de Mayo de 2007, 11:16:34 »
OK MICROCOM:

HE PROBADO LA RUTINA, Y SI FUNCIONA, PERO ME PASA IGUAL QUE CON LA ANTERIOR; QUE EJECUTANDO PASO A PASO NO VEO QUE ESCRIBA, SIN EMBARGO AL DARLE AL "PLAY" DEL MPLAB, Y LUEGO AL PAUSAR, ME APARECE DIRECTAMENTE EL DATO EN LA EEPROM.

¿sera problema del mplab?

por lo menos he conseguido escribir en la eeprom y leerla, pero jo puedo simular paso a paso para ver el programa....

mi problema solucionado al 90%

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: problemas al escribir en la eeprom del 16f676
« Respuesta #12 en: 30 de Mayo de 2007, 13:30:56 »
HE PROBADO LA RUTINA, Y SI FUNCIONA, PERO ME PASA IGUAL QUE CON LA ANTERIOR; QUE EJECUTANDO PASO A PASO NO VEO QUE ESCRIBA, SIN EMBARGO AL DARLE AL "PLAY" DEL MPLAB, Y LUEGO AL PAUSAR, ME APARECE DIRECTAMENTE EL DATO EN LA EEPROM.

¿sera problema del mplab?

Amigo, tal vez se te pasó por alto lo que te dije antes de que la eeprom tarda unos 4 a 8 mseg en grabarse y esto es perfectamente simulado por el MPSIM en el MPLAB. 

Si esperas solo 4 u 8 mseg en el simulador (puedes activar el stopwatch para corroborar lo que digo) verás que se actualiza bien la eeprom una vez transcurrido ese tiempo.


Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)