Autor Tema: BORRARLO POR FAVOR  (Leído 2432 veces)

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

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
BORRARLO POR FAVOR
« en: 02 de Noviembre de 2011, 10:26:51 »
Hola, tengo un pequeño programa para el 16F886, me simula bien la lectrua de la EEPROM, pero no así la escritura, no se que ocurre , he puesto lo que indica en el datasheet, pero no hace caso y no escribe, alguien mas ha tenido problemas en la escritura de la EEPROM al simular ?

WRFLASH      NOP
         BANKSEL   EEADR      ;;;; PAG. 116 DATASHEET
         MOVLW   01h
         MOVWF   EEADR
         BANKSEL   PIR1   
         MOVF   CONTMAX,0
         BANKSEL   EEDAT
         MOVWF   EEDAT
         BANKSEL   EECON1
         BCF      EECON1,7
         BSF    EECON1,2
         
               
         MOVLW   55h       ; SECUENCIA OBLIGADA
         MOVWF   EECON2
         MOVLW   0XAA
         MOVWF   EECON2    ;  HASTA AQUI
         BSF    EECON1,1
      
         
         
HOP1      BTFSC   EECON1,1
         GOTO   HOP1
         BANKSEL   PIR1
         RETURN

En este caso esta un poco cambiado, ya que no hay interrpciones que deshabilitar, pero anteriormente lo hize idéntico a como indica el datasheet, y nada.
Igual es el registro de configuracion, esta tarde mirare a ver.

Gracias

Un saludo

La de lecutura de la EEPROM, sin problemas.:

RDFLASH      NOP
         BANKSEL   EEADR      ;;;; PAG. 116 DATASHEET
         MOVLW   01h
         MOVWF   EEADR
         BANKSEL   EECON1
         BCF      EECON1,7
         BSF      EECON1,0   ;;;  LEE DE LA EEPROM MAX.
         BANKSEL   EEDAT
         MOVF   EEDAT,0
         BANKSEL   PIR1
         MOVWF   CONTMAX

         BANKSEL   EEADR
         MOVLW   02h
         MOVWF   EEADR
         BANKSEL   EECON1
         BCF      EECON1,7
         BSF      EECON1,0      ;; LEE DE LA EEPROM MIN.
         BANKSEL   EEDAT
         MOVF   EEDAT,0
         BANKSEL   PIR1
         MOVWF   CONTMIN
         RETURN
« Última modificación: 10 de Noviembre de 2011, 06:40:00 por JoseLuis2801 »

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Problema con el SIM del MPLAB al simular escritura en EEPROM
« Respuesta #1 en: 02 de Noviembre de 2011, 11:10:23 »
tienes puesto BANKSEL   PIR1
pero no veo que  estes definiendo el registro.y tambien deberias usar los flags para que el pic espere a que se termine de grabar bien los datos en la eeprom.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Problema con el SIM del MPLAB al simular escritura en EEPROM
« Respuesta #2 en: 02 de Noviembre de 2011, 11:25:03 »
Gracias, perdona, es que no he puesto todo el programa, registros especiales no tengo ninguno definido, esta al principio el famoso "include"



   LIST   P=16F886
   INCLUDE     <P16F886.INC>



Probaré con las interrupciones tb. 

un saludo

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Problema con el SIM del MPLAB al simular escritura en EEPROM
« Respuesta #3 en: 02 de Noviembre de 2011, 18:14:22 »
lo que quiero decir es que como ya sabras la directiva BANKSEL es para conmutar los bancos en el cual se encuentra el registro que indicas en dicha directiva.
en tu caso es el registro PIR1 y despues de la directiva no veo que carges ningun valor a PIR1.quizas lo estes cargando despues del return.
pero no es lo mejor.por evitar posibles errores en el futuro.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Problema con el SIM del MPLAB al simular escritura en EEPROM
« Respuesta #4 en: 02 de Noviembre de 2011, 20:53:35 »
Ah vale, ya te entiendo, es que he puesto ese registro simplemente por conmutar a ese banco, el banco 0, pero no porque utilize el registro PIR1, sino porque en ese banco están los registros generales previamente definidos contmax y contmin.

Gracias de todas formas.

Ahora mismo lo tengo así:


WREEPROM                                     NOP
         BANKSEL   EEADR      ;;;; PAG. 116 DATASHEET
         MOVLW   01h
         MOVWF   EEADR
         BANKSEL   PIR1   
         MOVF   CONTMAX,0
         BANKSEL   EEDAT
         MOVWF   EEDAT
         BANKSEL   EECON1
         BCF      EECON1,7
         BSF    EECON1,2
         BCF      INTCON,7
               
         MOVLW   55h       ; SECUENCIA OBLIGADA
         MOVWF   EECON2
         MOVLW   0XAA
         MOVWF   EECON2    ;  HASTA AQUI
         BSF    EECON1,1
         BSF      INTCON,7
         SLEEP
         BCF      EECON1,2   
      

         BANKSEL   EEADR      ;;;; PAG. 116 DATASHEET
         MOVLW   02h
         MOVWF   EEADR
         BANKSEL   PIR1   
         MOVF   CONTMIN,0
         BANKSEL   EEDAT
         MOVWF   EEDAT
         BANKSEL   EECON1
         BCF      EECON1,7
         BSF    EECON1,2
         BCF      INTCON,7
               
         MOVLW   55h       ; SECUENCIA OBLIGADA
         MOVWF   EECON2
         MOVLW   0XAA
         MOVWF   EECON2    ;  HASTA AQUI
         BSF    EECON1,1
         BSF      INTCON,7
         SLEEP
         BCF      EECON1,2
         BANKSEL   PIR1
         RETURN

que es justo como viene en el datasheet del PIC, y ni puñetero caso. Se trata de escribir registros contmax y contmin en la EEPROM, pero simulando con el SIM, que igual hay algún problema al simular escrituras en EEPROM, no lo se, desde luego con la escritura no hay el más mínimo problema.

Mañana seguiré a ver ............... :shock:

« Última modificación: 02 de Noviembre de 2011, 20:56:14 por JoseLuis2801 »

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Problema con el SIM del MPLAB al simular escritura en EEPROM
« Respuesta #5 en: 07 de Noviembre de 2011, 17:41:46 »
siento no tener tiempo para analizar a fondo tu codigo.pero no veo que realizes una espera a que se realize una escritura a la eeprom.

mas que nada porque no veo ninguna instruccion de comprobacion de  escritura.ni ningun control de errores.esto esta en el registro EECON1.
tienes ejemplos en el datasheet.

y en el foro tambien tienes muchos ejemplos para el uso correcto de la eeprom de datos.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Problema con el SIM del MPLAB al simular escritura en eeprom/FLASH
« Respuesta #6 en: 09 de Noviembre de 2011, 20:57:17 »
Hola, gracias por tus sugerencias, he cambiado a escribir los 2 parametros en la memo Flash, me va mejor ya que hasta con un PIC de 6 u 8  patas me puede valer.

He echo un programita, para ver las distintas partes controladas que todo va bien, y lo último ha sido incorporar las rutinas partes de escritura y lectura de datos, igual que con la EEPROM, la lectura perfecta, escritura ni caso.
Y escribo exactamente lo mismo que me indica el datasheet del PIC16F886:

   w      EQU      0h
   f      EQU      1h

      LIST      P=16F886
      INCLUDE     <P16F886.INC>

RET1      EQU   20H
RET2      EQU   21H
RET3      EQU   22H
VAR1      EQU   110H
VAR2      EQU   112H
VAR3      EQU   114H
VAR4      EQU   116H


         ORG      00H
         GOTO    INI
         ORG    05H

         

DEMORA1S   NOP
         BANKSEL   PIR1
         MOVLW   00h      ;  CARGA VARIABLES DEMORA
         MOVWF   RET1
         MOVLW   00h
         MOVWF   RET2                                             
         MOVLW   05h
         MOVWF   RET3
DEC2      DECFSZ   RET2    ;  RETARDO DE 1SEG.
         GOTO   DEC2    
         DECFSZ   RET1       
         GOTO   DEC2
         DECFSZ   RET3       ;  3 BUCLES
         GOTO   DEC2
         BANKSEL   EEDAT
         RETURN


INI         NOP
         BANKSEL   PIR1
         CLRF   PORTB
         BANKSEL ANSELH
         CLRF   ANSELH
         BANKSEL   TRISB
         MOVLW   0XF0
         MOVWF   TRISB
         BANKSEL   EEDAT
         MOVLW   01H
         MOVWF   VAR1
         MOVLW   09H
         MOVWF   VAR2
         MOVLW   06H
         MOVWF   VAR3
         MOVLW   0FH
         MOVWF   VAR4
         
         
WRFLASH      NOP
         BANKSEL   EEADRH      ;;;; PAG. 121 DATASHEET
         MOVLW   08h
         MOVWF   EEADRH
         MOVLW   00h
         MOVWF    EEADR
         MOVLW   110H
         MOVWF   FSR
LOOP      MOVF   INDF,0
         MOVWF    EEDATA          ;
         INCF    FSR,1       ; Next byte
         MOVF    INDF,0       ; Load second data byte into upper
         MOVWF    EEDATH
         INCF    FSR,1
         BANKSEL EECON1
         BSF    EECON1,7    ; Point to program memory
         BSF    EECON1,2
         BCF    INTCON,7 ; Disable interrupts (if using)
         BTFSC    INTCON,7
         GOTO   $-2
         MOVLW   55H
         MOVWF   EECON2
         MOVLW   0AAH
         MOVWF   EECON2
         BSF    EECON1,1
         NOP
         NOP
ESP         BTFSC   EECON1,1
         GOTO   ESP
         BCF    EECON1,2
         BSF    INTCON,7
         BANKSEL EEADR
         MOVF    EEADR, W
         INCF    EEADR,F ; Increment address
         ANDLW    0FH ; Indicates when sixteen words have been programmed
         SUBLW    0FH ; 0x0F = 16 words  07H SON 8 WORDS
         BTFSS    STATUS,2 ; Exit on a match,
         GOTO    LOOP
         

A0_VAR1_2                                     NOP
         MOVLW   08H
         MOVWF   VAR1
         MOVLW   08H
         MOVWF   VAR2

         

RDFLASH      NOP
         BANKSEL   EEADR      ;;;; PAG. 116 DATASHEET
         MOVLW   08h
         MOVWF   EEADRH
         MOVLW   00h
         MOVWF   EEADR   
         BANKSEL   EECON1
         BSF      EECON1,7
         BSF      EECON1,0   ;;;  LEE DE LA EEPROM MAX.
         NOP
         NOP         
         BANKSEL   EEDAT
         MOVF   EEDAT,0
         MOVWF   VAR1   
         BANKSEL   EEADR      ;;;; PAG. 116 DATASHEET
         MOVLW   08h
         MOVWF   EEADRH
         MOVLW   01h
         MOVWF   EEADR   
         BANKSEL   EECON1
         BSF      EECON1,7
         BSF      EECON1,0   ;;;  LEE DE LA EEPROM MAX.
         NOP
         NOP         
         BANKSEL   EEDAT
         MOVF   EEDAT,0
         MOVWF   VAR2   
      



         
LUZMAS      NOP
         CALL    DEMORA1S
         MOVF   VAR1,0
         MOVWF   PORTB
         CALL    DEMORA1S
         CLRF   PORTB
         CALL    DEMORA1S
         MOVF   VAR2,0
         MOVWF   PORTB
         CALL    DEMORA1S
         CLRF   PORTB
         CALL    DEMORA1S
         MOVF   VAR3,0
         MOVWF   PORTB
         CALL    DEMORA1S
         CLRF   PORTB
         CALL    DEMORA1S
         MOVF   VAR4,0
         MOVWF   PORTB
         CALL    DEMORA1S
         CLRF   PORTB
         GOTO    LUZMAS

FIN         NOP
         END


*******************************************************************

Con el rutinita de etiqueta A0_VAR1_2 , es como compruebo que no se escribe nada , porqweu al leer la flash lee 0h, y escribe en var1 y var 2 un 0, VAR1=VAR2=0. Sino encendería el led3.  En el puerto B, los bits 3:0 programados como salida , hay leds . Y iluminan bien siempre, pero sin hacer caso a la escritura de la Flash. 1 vez parpadean los 4 a la vez (portb=F ), y otra los 2 centrales (portb = 6) , los otros 2 tramos de 1 seg que tenía que iluminar leds, nada.

El registro de conf. esta bien, permitiendo escribir a partir de 0800h.

No se que pasa, a ver si alguien me puede dar algo de luz.

Gracias de antemano

un saludo
« Última modificación: 09 de Noviembre de 2011, 21:33:33 por JoseLuis2801 »

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: BORRARLO POR FAVOR
« Respuesta #7 en: 10 de Noviembre de 2011, 18:20:53 »
BSF    EECON1,7    ; Point to program memory .

busca la linea anterior. hay que poner:

BCF    EECON1,7    ; Point to program memory . para seleccionar la eeprom de datos.no de programa.

tambien te recomiendo que revises los registros EEADR Y EEADRH. no ballas a pasarte de direccionamiento y luego no veas los datos modificados.

no se si lo que quieres hacer es grabar en la eeprom de datos o en la eeprom de programa.tampoco he utilizado nunca este pic.asi que puede que no te sea de mucha ayuda. :?
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: BORRARLO POR FAVOR
« Respuesta #8 en: 10 de Noviembre de 2011, 20:59:57 »
No importa , si daré con ello, bueno ya he abierto otro hilo, pero entiendo que es un coñazo ponerse a ver todo el programita.

A ver si pones  BSF    EECON1,7 , apuntas a la memo de programa, la FLASH, eso no quiere decir que no escribas datos.
Si he visto en un libo, que en la flash hay que vigilar con la pagina de memo utilizada, y cambiar de pagina si es preciso con el registro PCLATCH, pero he modificado las direcciones para estar siempre en la pag.0 y nada, bueno el finde doy con ello seguro.


 Y cuando es BCF EECON1,7 a la memo de datos, la EEPROM.

Un saludo