Autor Tema: Lo que no me pase a mi... write_eeprom [solucionado]  (Leído 2802 veces)

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

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Lo que no me pase a mi... write_eeprom [solucionado]
« en: 09 de Enero de 2013, 17:19:36 »
Buenas!!!

aunque no posteo mucho os leo bastante, por desgracia tengo excesivos Hobbies...

Al grano, despues de utilizar 10000000 de veces la funcion write_eeprom... me ha dejado de funcionar ¿? al menos en mi programa, utilizo CSS 4.104. Tiene que ser una tonteria pero... llevo varios dias probando y no la encuentro.

Utilizo la eeprom para inicializar nuevos pics o bien restablecer valores de fabrica, el "individuo" un 16f688, esta es la inicializacion del programa:

......................
temp_rele1 =  read_eeprom (0x00);
temp_rele2 =  read_eeprom (0x01);
temp_rele3 =  read_eeprom (0x02);
histeresis =  read_eeprom (0x03);
if (((temp_rele1 == 0xff) && (temp_rele2 == 0xff) && (temp_rele3 == 0xff) &&(histeresis == 0xff)) || (fabrica == 1))
   {
   printf("Restaurados valores por defecto.");
   salto_linea();
   temp_rele1 = 90;
   temp_rele2 = 100;
   temp_rele3 = 103;
   histeresis = 5;
   write_eeprom (0x00, temp_rele1);
   write_eeprom (0x01, temp_rele2);  
   write_eeprom (0x02, temp_rele3);
   write_eeprom (0x03, histeresis);
   }
printf(" %u %u %u %u ",temp_rele1, temp_rele2, temp_rele3, histeresis);
...........


El caso es que al cargarlo en el pic, nunca, digo nunca, pone los valores de las variables correctamente en eeprom, los deja a 0xff con los pics nuevos o bien si intentas modificar la eeprom desde otro punto del programa (modificacion de variables o restore de fabrica...)

las variables temp_releX e histeresis son int, aunque tambien lo he probado con unsigned int.... tambien he cambiado el pic por si estuviera averiado... y sigo igual :(

¿Alguna idea de que me puede estar pasando?

Gracias de antemano.

Saludos.
« Última modificación: 10 de Enero de 2013, 20:08:45 por xerex »
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Lo que no me pase a mi... write_eeprom
« Respuesta #1 en: 09 de Enero de 2013, 17:54:03 »
No tendrás la variable Fabrica en 1 ??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Re: Lo que no me pase a mi... write_eeprom
« Respuesta #2 en: 09 de Enero de 2013, 18:33:43 »
no, si fuera asi, no leeria de eeprom siempre 0xff :.(
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Lo que no me pase a mi... write_eeprom
« Respuesta #3 en: 09 de Enero de 2013, 18:40:23 »
No tendrás el bit de protección de escritura en eeprom activado ??
Me refiero al bit de la palabra de configuración...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Re: Lo que no me pase a mi... write_eeprom
« Respuesta #4 en: 09 de Enero de 2013, 18:53:34 »
#FUSES NOCPD                    //No EE protection

:(
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Lo que no me pase a mi... write_eeprom
« Respuesta #5 en: 09 de Enero de 2013, 19:09:09 »
Tienes claro que en ese trozo de código, si el valor esta en 0XFF al leerlo primero, y después grabarlo, solo vas a mostrar el 0xFF de todos modos, ya que no vuelves a leerlo después de escribirlo??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Re: Lo que no me pase a mi... write_eeprom
« Respuesta #6 en: 09 de Enero de 2013, 19:15:41 »
no, porque tengo una asignacion directa a las variables antes de grabar en eeprom...

temp_rele1 = 90;
temp_rele2 = 100;
temp_rele3 = 103;
histeresis = 5;
write_eeprom (0x00, temp_rele1);
write_eeprom (0x01, temp_rele2);  
write_eeprom (0x02, temp_rele3);
write_eeprom (0x03, histeresis);

Asi que si leo 0xff en todas las posiciones, asigno valores por defecto y los grabo en eeprom eliminando 0xff... :?
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Lo que no me pase a mi... write_eeprom
« Respuesta #7 en: 09 de Enero de 2013, 20:41:58 »
dime una cosa.... la variable histeresis puede ser que su valor sea diferente de 0xFF en algun momento del programa?

if (((temp_rele1 == 0xff) && (temp_rele2 == 0xff) && (temp_rele3 == 0xff)) || (fabrica == 1)){
   printf("Restaurados valores por defecto.");
   salto_linea();
   temp_rele1 = 90;
   temp_rele2 = 100;
   temp_rele3 = 103;
   write_eeprom (0x00, temp_rele1);
   write_eeprom (0x01, temp_rele2); 
   write_eeprom (0x02, temp_rele3);
}
temp_rele1 =  read_eeprom (0x00);
temp_rele2 =  read_eeprom (0x01);
temp_rele3 =  read_eeprom (0x02);
histeresis =  read_eeprom (0x03);
printf(" %u %u %u %u ",temp_rele1, temp_rele2, temp_rele3, histeresis);

prueba asi de momento....
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Re: Lo que no me pase a mi... write_eeprom
« Respuesta #8 en: 09 de Enero de 2013, 20:51:29 »
Veamos, el problema no es la asignacion de 0xff en las variables, histeresis podria valer en un momento determinado e hipoteticamente 255 pero no es asi y no sera el caso.

El problema es que write_eeprom, no escribe el valor de las variables en la eeprom, osea si yo quiero escribir 0x10 y pongo:

Escribe en la direccion 0x00 el valor 0x10: write_eeprom(0x00, 0x10)

no lo escribe, lo deja en 0xff y no se porque   :oops:

mañana probare a hacer otro programa por si fuera algo del fichero de proyecto del css que este dañado :(

Gracias a todos.
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Lo que no me pase a mi... write_eeprom
« Respuesta #9 en: 09 de Enero de 2013, 21:03:58 »
Veamos, el problema no es la asignacion de 0xff en las variables, histeresis podria valer en un momento determinado e hipoteticamente 255 pero no es asi y no sera el caso.

El problema es que write_eeprom, no escribe el valor de las variables en la eeprom, osea si yo quiero escribir 0x10 y pongo:

Escribe en la direccion 0x00 el valor 0x10: write_eeprom(0x00, 0x10)

no lo escribe, lo deja en 0xff y no se porque   :oops:

mañana probare a hacer otro programa por si fuera algo del fichero de proyecto del css que este dañado :(

Gracias a todos.
yo tengo la version del CSS 4.104. y la grabacion en la eeprom interna del 18f2550 y 4550 va bien...
haz algo simple, graba... delay de 1 seg... lee la eeprom y muestrala con el sprintf, y asi sucesibamente, usa proteus para depurar y te sacara de dudas....
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Lo que no me pase a mi... write_eeprom
« Respuesta #10 en: 09 de Enero de 2013, 21:56:40 »
Estas haciendo la prueba en hardware? Si es así, probaste con otra dirección en la memoria?


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Re: Lo que no me pase a mi... write_eeprom
« Respuesta #11 en: 10 de Enero de 2013, 17:34:41 »
Bueno a vuestros comentarios,

si he probado otra direccion de memoria y... pasa lo mismo pero como a veces es mejor dejar las cosas y cogerlas un poco mas tarde, he estado ampliando el programa y...... con este codigo a ver si adivinais que a pasado...


if ((restart_cause() !=  NORMAL_POWER_UP) && (restart_cause() !=  WDT_TIMEOUT))
   {
   printf("Sistema Reseteado por software");
   salto_linea();
   }
else if (restart_cause() !=  WDT_TIMEOUT) //Contamos las veces que se ha reseteado el equipo por WDT
   {
   i = read_eeprom(0x14);
   i++;
   write_eeprom(0x14,i);
   }
temprele1 =  read_eeprom (0x00);
temprele2 =  read_eeprom (0x01);
temprele3 =  read_eeprom (0x02);
histeresis =  read_eeprom (0x03);
if (((temprele1 == 0xff) && (temprele2 == 0xff) && (temprele3 == 0xff) &&(histeresis == 0xff)) || (fabrica == 1))
   {
   printf("Restaurados valores por defecto.");
   salto_linea();
   temprele1 = 90;
   write_eeprom (0x00, temprele1);
   delay_ms(100);
   temprele2 = 100;
   write_eeprom (0x01, temprele2);  
   delay_ms(100);
   temprele3 = 103;
   write_eeprom (0x02, temprele3);
   delay_ms(100);
   histeresis = 5;
   write_eeprom (0x03, histeresis);
   delay_ms(100);
   }
printf(" %u %u %u %u %u",temprele1, temprele2, temprele3, histeresis,read_eeprom(0x14));


Resulta que si se escribe en la posicion 0x14 (resets) pero en el resto no (0x00 a 0x03..), he probado con mas por supuesto con el mismo resultado :5]

Por cierto tambien he cambiado el nombre a las variables... por si acaso... pero nada  :5]

y una de las ultimas pruebas, escribir solo una variable temprelex en otro sitio y la direccion 0x04.... y la 0x04 tambien la escribe...

ahora si que estoy desesperado... voy a ver si puedo instalar proteus que no lo suelo usar.... :.(
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Re: Lo que no me pase a mi... write_eeprom
« Respuesta #12 en: 10 de Enero de 2013, 17:46:53 »
la ultima...

cambio de compilador al 4.084 y pruebo... aparte de que me salta que he excedido la ROM.... una vez lo soluciono temporalmente.. hago la prueba y.... solo escribe temprele1 y temprele2.... el resto las deja a 0xff...

pienso que es problema del compilador con esta prueba :(
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Re: Lo que no me pase a mi... write_eeprom [solucionado]
« Respuesta #13 en: 10 de Enero de 2013, 20:10:02 »
pues si lo he solucionado, me he bajado la version 4.140d y he cambiado la referencia a las posiciones de memoria de la eeprom por etiquetas:

temprele1 =  read_eeprom (temp1_eeprom);
temprele2 =  read_eeprom (temp2_eeprom);
temprele3 =  read_eeprom (temp3_eeprom);
histeresis =  read_eeprom (histeresis_eeprom);
if (((temprele1 == 0xff) || (temprele2 == 0xff) || (temprele3 == 0xff) || (histeresis == 0xff)) || (fabrica == 1))
   {
   printf("Restaurados valores por defecto.");
   salto_linea();
   temprele1 = 90;
   write_eeprom (temp1_eeprom, temprele1);
   delay_ms(100);
   temprele2 = 100;
   write_eeprom (temp2_eeprom, temprele2);   
   delay_ms(100);
   temprele3 = 103;
   write_eeprom (temp3_eeprom, temprele3);
   delay_ms(100);
   histeresis = 5;
   write_eeprom (histeresis_eeprom, histeresis);
   delay_ms(100);
   }

Asi, si funciona  :5], comprobado porque he compilado lo mismo en la 4.104 y seguia igual :(

Gracias a todos.

Saludos.
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P