Autor Tema: PIC al 99% y problema con la EEPROM - AYUDA!  (Leído 3216 veces)

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

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
PIC al 99% y problema con la EEPROM - AYUDA!
« en: 16 de Abril de 2010, 15:38:18 »
Hola,

He programado una aplicación en un 16F819 que tiene 4 bloques iguales de datos definidos a través de una estructura.

Si utilizo los 4 bloques de datos, la ROM se me va al 99% y cuando accedo a la EEPROM me lee datos erróneos. Sin embargo, si utilizo sólo 3 bloques, la memoria se me queda en el 87% y todo va bien. Los 4 bloques son idénticos y hacen las mismas operaciones.

¿Es posible que al estar en el 99% aparezcan esos errores de lectura de la EEPROM? El resto de funciones van bien!

La EEPROM está declarada de forma normal:

#rom 0x2100 = {0x00, 0xFF...

Y para los accesos utilizo read_eeprom(pointer);

Gracias por la ayuda!

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: PIC al 99% y problema con la EEPROM - AYUDA!
« Respuesta #1 en: 18 de Abril de 2010, 15:03:06 »
ESTO ES RARÍSMO!!!

Para hacer una prueba he eliminado varias funciones del código junto con 2 de las estructuras y el código se me ha quedado en el 50% de la capacidad del PIC y el error SIGUE APARECIENDO!!!

Os pongo cómo lo tengo declarado:

Código: [Seleccionar]
typedef struct
{
   int16 high;       //Límite superior del rango del canal
   int16 low;        //Límite inferior del rango del canal
   
} threshold;

typedef struct
{
   int16 val;        //Valor real del canal
   int16 spi_val;    //Valor a enviar al conversor por SPI
   threshold rng;    //Rango válido del canal
   
} channel;

//Declaración de los canales
channel chn1;
channel chn2;

Si elimino la línea channel chn2; todo funciona bien. Escribo en la EEPROM y leo los valores escritos correctamente. Si pongo esa línea, la EEPROM devuelve valores raros.

No se qué hacer!!! Gracias por la ayuda!!!

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: PIC al 99% y problema con la EEPROM - AYUDA!
« Respuesta #2 en: 18 de Abril de 2010, 15:37:28 »
Talvez sea un bug que BrunoF ya ha experimentado (si es que usas CCS porque no lo mencionas).

http://www.todopic.com.ar/foros/index.php?topic=21226.msg251253#msg251253

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: PIC al 99% y problema con la EEPROM - AYUDA!
« Respuesta #3 en: 18 de Abril de 2010, 20:38:41 »
Sí, utilizo CCS. Pero yo no utilizo ningún puntero para recorer un array como le pasa a BrunoF. Yo lo único que hago es:

Recibir 20 bytes por el puerto serie
Guardar los 20 bytes en la EEPROM
Leer los 20 bytes y sacarlos por el puerto serie para confirmar la correcta recepción.

Aunque NO utilice la variable chn2, si la declaro, me devuelve mal los 20 bytes. Si comento la línea me los devuelve bien!!!

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: PIC al 99% y problema con la EEPROM - AYUDA!
« Respuesta #4 en: 19 de Abril de 2010, 14:52:53 »
Si quieres pon el código involucrado e intentamos deducir el problema.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: PIC al 99% y problema con la EEPROM - AYUDA!
« Respuesta #5 en: 19 de Abril de 2010, 14:56:01 »
Es probable que ya hayas probado, pero a veces esos errores raros se solucionan cambiando de versión. Y no necesariamente a una posterior.

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: PIC al 99% y problema con la EEPROM - AYUDA!
« Respuesta #6 en: 19 de Abril de 2010, 18:55:05 »
Es probable que ya hayas probado, pero a veces esos errores raros se solucionan cambiando de versión. Y no necesariamente a una posterior.

No lo he probado pero lo haré. También probaré a declarar la variable en otro lado del código, a declararlas la estructura como variables individuales, etc... es que es muy raro que sólo por declararla ya vaya mal aunque no aparezca en ninguna otra parte del código!!!

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: PIC al 99% y problema con la EEPROM - AYUDA!
« Respuesta #7 en: 21 de Abril de 2010, 05:50:39 »
Lo acabo de probar con la versión 4.106 y parece que funciona. Declaro la variable y ahora sí me lee correctamente los datos de la EEPROM. Voy a implementar el resto de funciones para esta estructura a ver si todo sigue igual.

Lo que no me explico es cómo puede pasar esto!!!


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: PIC al 99% y problema con la EEPROM - AYUDA!
« Respuesta #8 en: 21 de Abril de 2010, 06:08:15 »
Échale un vistazo a la lista de bugs corregidos de versión a versión y seguro que alguno te da la clave:
http://www.ccsinfo.com/devices.php?page=versioninfo

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: PIC al 99% y problema con la EEPROM - AYUDA!
« Respuesta #9 en: 21 de Abril de 2010, 07:36:49 »
Pues vuelve a fallar!!  :5]

Resulta que ahora, si declaro la variable no falla, pero a la que le doy el primer uso, sólo con asignarle un valor a uno de los parámetros dela estructura, zas! Me devuelve cosas raras.  :shock:

Lo curioso es que el fallo siempre se presenta en los mismos bytes, como si el fallo al acceso fuese sólo ahí. No creo que sea una cosa de lectura de la EEPROM porque la primera lectura de ésta sin haber escrito nada antes funciona bien. Los valores que lee se asignan desde el compilador.

Os pongo dos capturas:




Como podéis ver, el fallo es en unos bytes determinados. La lectura de los valores por RS-232 es:

Código: [Seleccionar]
  while(n_bytes < CONF_BYTES)
   {      
      if(f_com_tout)
      {
         putc(NAK);
         return 1;
      }
      
      if(kbhit())
         buffer[n_bytes++] = getc();
   }
   
   putc(ACK);

Y la escritura en la EEPROM:

Código: [Seleccionar]
for(n_bytes = 1; n_bytes < CONF_BYTES - 2; n_bytes++)
      write_eeprom(n_bytes - 1, buffer[n_bytes]);

Alguna idea o prueba a realziar?
« Última modificación: 21 de Abril de 2010, 08:23:35 por DarkVect »

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: PIC al 99% y problema con la EEPROM - AYUDA!
« Respuesta #10 en: 21 de Abril de 2010, 09:10:00 »
Parece que lo acabo de resolver. Hasta ahora, recibía los valores por el serie, deshabilitaba todas las interrupciones y luego guardaba los datos en la EEPROM. Ahora he deshabilitado las interrupciones antes de leer el puerto serie (a 9600) y funciona todo bien :)

No lo entiendo muy bien porque sin declarar la variable famosa, si que funciona aunque estén las interrupciones activadas ¿ :shock:?

El problema es que tenía un timer que me hacía de timeout para la recepción serie y ahora no se cómo hacerlo. Probaré a dejar sólo esa única interrupción a ver si aguanta. No puedo usar la interrupción del puerto serie porque los pines están asignados al SPI que uso para hablar con los perfiéricos.

Sigo informando luego.


 

anything