Autor Tema: Problemas escribiendo datos en la memoria Flash con 16f877  (Leído 2319 veces)

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

Desconectado Jorge_Loa

  • PIC10
  • *
  • Mensajes: 24
Problemas escribiendo datos en la memoria Flash con 16f877
« en: 04 de Marzo de 2007, 21:25:20 »
Hola a todos, aunque soy nuevo usuario hace bastante tiempo que he venido resolviendo dudas a traves de los mensajes de los foros que he leido; por dicha razón decidí registrarme y colaborar en lo que pueda. Sin embargo empiezo por comentar un problema que tengo:

Actualmente intento programar un Pic que basicamente debe monitorear, controlar y registrar T° y HR en un galpón, el sistema debe "saber" la fecha y la hora para determinar en que dia de produccion se tienen los pollos y de acuerdo a este dato debe controlar unos ventiladores y unos calefactores;.............. además debe (y es la parte donde en este momento tengo un problema) cada quince minutos almacenar fecha, hora, valor de T° y valor de HR que deben ser guardados en un PC, sin embargo y dado que el PC no estará conectado siempre la idea es que mientras el PC se encuentra conectado los datos se almacenan directamente en el, y cuando no lo esté, los datos se almacenaran en el Pic para que cuando el Pc sea encendido pasen al disco duro.
En mis calculos debo almacenar los datos en la memoria FLASH (por que la EEPROM no me alcanza), a modo de prueba he escrito unos datos en unas direcciones y cuando voy a leer en una de esas direcciones el Pic me muestra la direccion mas no el dato guardado en ella. La verdad es que es la primera vez que uso la opción de almacenar en memoria y no se en que estoy fallando asi es que agradecería mucho su colaboración, :lol:..............y desde luego en lo que yo pueda ayudar aqui estaré. :lol:


Anexo el codigo correspondiente a la parte de lectura y escritura en Flash, esta en asm porque con el lenguaje C no es que me vaya muy bien :?

;--------------------------- LECTURA DE UN DATO EN FLASH ------------------------------;
   
LEER_FLASH      bsf      STATUS,RP1         ; Selección del Banco 2   
            bcf      STATUS,RP0
            movf   DIRECCION_H_L,W      ; Se introduce en EEADRH la parte alta de la dirección
            movwf   EEADRH            ; a leer
            movf   DIRECCION_L_L,W      ; Se introduce en EEADRH la parte baja de la dirección
            movwf   EEADR            ; a leer
            bsf      STATUS,RP0         ; Selección del Banco 3
            bsf      EECON1,EEPGD      ; Se selecciona el acceso a la memoria FLASH
            bsf      EECON1,RD         ; Se da la orden de leer.
            nop                     ; Se tarda 3 ciclos en tener el dato por lo que cualquier
            nop                     ; instruccion es ignorada
            nop
            bcf      STATUS,RP0         ; Se pasa al banco 2
            movf   EEDATA,W         ; Se lee el dato, solo los 8 bits de menor peso ya que los
            movwf   DATO_LEIDO         ; datos son de 1 Byte, por eso no se usa EEDATAH
            return
Un solo privilegio: La inteligencia
Una sola aristocracia: La del Espíritu

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Problemas escribiendo datos en la memoria Flash con 16f877
« Respuesta #1 en: 05 de Marzo de 2007, 00:39:42 »
bueno pess, si tas haciendolo al pie de la letra como indica el datasheet no deberia haber errores en esa zona, desahbilitas interrupciones durante esa rutina de escritura? lamentablemente no he utlizado ese recurso aun, pero se seguro la gente va a contestar. exitos  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problemas escribiendo datos en la memoria Flash con 16f877
« Respuesta #2 en: 05 de Marzo de 2007, 08:32:48 »
Jorge_Loa, solo has subido la parte de la lectura que es idéntica hasta donde veo a lo que hay en el datasheet y debieran funcionar.

De todas forams, te tengo algunas preguntas para ver cómo te va el tema.

1) DIRECCION_H_L y DIRECCION_L_L en dónde están declarados?

2) Estás probando con el simulador? SI es así , ¿estás realmente usando un 16F877 o un 16F877A ?

- 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 Jorge_Loa

  • PIC10
  • *
  • Mensajes: 24
Re: Problemas escribiendo datos en la memoria Flash con 16f877
« Respuesta #3 en: 05 de Marzo de 2007, 18:46:31 »
Hola a todos, les cuento que mi primer problema ha sido solucionado; el error consistia en que sin darme cuenta estaba moviendo al registro de los datos el valor de la direccion y no el dato, por tanto era obvio que siempre me mostraba la dirección :lol:....todo por que no habia visto una instruccion que decia MOVF Dato y que debia decir MOVF Dato,w.............pero en fin ahi sigo. De todas formas agradezco a todos y ofrezco disculpas por el tiempo que sin querer les haya hecho perder.
Un solo privilegio: La inteligencia
Una sola aristocracia: La del Espíritu

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problemas escribiendo datos en la memoria Flash con 16f877
« Respuesta #4 en: 05 de Marzo de 2007, 23:23:00 »
Hola a todos, les cuento que mi primer problema ha sido solucionado; el error consistia en que sin darme cuenta estaba moviendo al registro de los datos el valor de la direccion y no el dato, por tanto era obvio que siempre me mostraba la dirección :lol:....todo por que no habia visto una instruccion que decia MOVF Dato y que debia decir MOVF Dato,w.............pero en fin ahi sigo. De todas formas agradezco a todos y ofrezco disculpas por el tiempo que sin querer les haya hecho perder.

De nada, lo más importante es que te hayas dado cuenta solo.  Así se aprende muchisimo y de eso también se trata este foro ;)

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 micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Problemas escribiendo datos en la memoria Flash con 16f877
« Respuesta #5 en: 06 de Marzo de 2007, 00:55:08 »
tambien podrias poner MOVFW dato
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problemas escribiendo datos en la memoria Flash con 16f877
« Respuesta #6 en: 06 de Marzo de 2007, 08:24:18 »
tambien podrias poner MOVFW dato

Es lo mismo que movf dato,w , es solo un macro abreviación del MPASM pero no es una nueva instrucción.

Si haces


   movfw  DATO


se ensamblará como


   movf   DATO,w



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)