Autor Tema: Problema con write_eeprom  (Leído 3901 veces)

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

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Problema con write_eeprom
« en: 17 de Octubre de 2009, 18:16:41 »
Hola gente.
Tengo un problema con un programa que estoy haciendo.
El error se produce cuando intento graba en la eprom en una direccion superior a la direccion 255. Cuando intento hacer esto, los datos que estan en los primeros bytes de la misma se sobre escriben.
 
Grabo con esta cuenta. Osea el tema no es que este usando una variable de 8bits. Pero pareceria que el resultado lo devuelve en 8bits.
write_eeprom(((numPrograma-1)*5)+236,b3);

Esto es posible? Deberia castear de alguna forma.
El micro tiene 1024 bytes de eprom.

Desde ya muchas gracias.
Saludos. Pablo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con write_eeprom
« Respuesta #1 en: 17 de Octubre de 2009, 18:48:49 »
Prueba de la siguiente manera:

Código: C
  1. write_eeprom((((long (numPrograma))-1)*5)+236,b3);

Seguramente numPrograma esta definido en 8 bits y se trunca la operación.-

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

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Problema con write_eeprom
« Respuesta #2 en: 17 de Octubre de 2009, 20:56:58 »
Gracias. Estuve intentando lo que me dijiste y al principio, debuguie el resultado y se truncaba cuando pasaba los 255.

Ahora no se trunca, pero directo sigue haciendo lo mismo, intente tambien guardarlo en una variable pero tampoco resulta.

   address = (((((int16)numPrograma-1))*5)+233);
   write_eeprom((int16)address,b1);

Si se te ocurre otro cosa avisame.

Muchas gracias.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con write_eeprom
« Respuesta #3 en: 17 de Octubre de 2009, 21:32:23 »
 :shock: Si no se trunca debería de funcionar! Según la ayuda de CCS address puede ser de 8 o 16 bits dependiendo del micro. Prueba de colocar una dirección bien conocida:

Código: C
  1. write_eeprom(300,0xAA);


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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Problema con write_eeprom
« Respuesta #4 en: 17 de Octubre de 2009, 22:00:08 »
Gracias. Estuve intentando lo que me dijiste y al principio, debuguie el resultado y se truncaba cuando pasaba los 255.

Ahora no se trunca, pero directo sigue haciendo lo mismo, intente tambien guardarlo en una variable pero tampoco resulta.

   address = (((((int16)numPrograma-1))*5)+233);
   write_eeprom((int16)address,b1);

Si se te ocurre otro cosa avisame.

Muchas gracias.

Hola, creo que está mal tu casting.

Código: [Seleccionar]
int16 address;
address = (int16) ((int16) numprograma-1)*5 + 233;
write_eeprom((int16)address,b1);

Si eso no funciona alguna combinación de castings debería, cuida que todas las operaciones sean ejecutadas como int16.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con write_eeprom
« Respuesta #5 en: 17 de Octubre de 2009, 22:24:32 »
Hola, creo que está mal tu casting.

:| el casting esta bien!  :5]   :mrgreen:   ;-) Hay muchos paréntesis, eso si  :D

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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Problema con write_eeprom
« Respuesta #6 en: 17 de Octubre de 2009, 22:34:34 »
Uff perdón Suky, es que las prioridades de castings no son mi fuerte... y pues está muy parentesiseado su código  :D

La otra cosa es que su pic no tenga los 1024 bytes de eeprom... pero pues quién sabe.  :z)

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Problema con write_eeprom
« Respuesta #7 en: 17 de Octubre de 2009, 22:51:29 »
El casting esta bien, pero sigue confundiendome algo.
Acabo de probar esto

write_eeprom(256, 'x');

Inspeccione el programa con el proteus y lo graba en el byte 0 de la memoria. Como cuando uno se pasa de el valor maximo del un byte y vuelve a empezar.
El pic que estoy usando es un 18F4620 supuestamente tiene 1024bytes.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Problema con write_eeprom
« Respuesta #8 en: 17 de Octubre de 2009, 23:06:08 »
Ah, con que simulando en Proteus... mira lo que a mi me entrega al simularlo...

http://img14.imageshack.us/img14/3771/proteusbug.png


Mejor pruébalo en tu pic porque en proteus no va a funcionar porque solo simula los primeros 256 bytes.  :?

Lo probé con Proteus 7.5 SP3.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con write_eeprom
« Respuesta #9 en: 17 de Octubre de 2009, 23:17:41 »
Me parecía que era el bendito proteus  :5]
No contesto mensajes privados, las consultas en el foro

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Problema con write_eeprom
« Respuesta #10 en: 17 de Octubre de 2009, 23:23:11 »
Es verdad en la simulacion no funciona. Es algo extraño, debo estar haciendo algo mal.
Primer error casting, solucionado. Pero sigue sobrescribiendo los primeros bytes de la eeprom.
Sigo revisando el codigo y les cuento.

Gracias.
« Última modificación: 18 de Octubre de 2009, 01:23:23 por pablo »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Problema con write_eeprom
« Respuesta #11 en: 18 de Octubre de 2009, 09:55:10 »
Me parecía que era el bendito proteus  :5]

Hey Suky, yo hace años dejé de usar Proteus 5.x por eso mismo... los bugs que no avisan... ahora que retomé la versión 7.5 poco han cambiado las cosas  :D

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Problema con write_eeprom
« Respuesta #12 en: 18 de Octubre de 2009, 12:10:57 »
Todo solucionado. Era un tema de casting.

int16 address;
address = (int16) ((int16) numprograma-1)*5 + 233;
write_eeprom((int16)address,b1);

Me funciono de esta forma, con las otras seguía teniendo problemas.

Tenia un problema de casting y cuando lo chequie en el proteus me mostraba que si me pasaba del byte 255 volvía a empezar, justo lo que me estaba haciendo en el micro sin castear. De ahí es que termine confundiéndome y creí que ese era el error y no el casting.

Si no usan el proteus que herramienta usan para probar un código?

Muchas gracias a todos por la ayuda.
Saludos, Pablo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con write_eeprom
« Respuesta #13 en: 18 de Octubre de 2009, 12:34:09 »
Que raro, el tema del casting lo había probado y no truncaba el resultado  :oops: Esa forma de hacer el casting es como muestra la ayuda de CCS. Además creería que hacer esto write_eeprom((int16)address,b1); no es necesario si address es de 16 bits y el parámetro de la función también lo es  :undecided:
Bueno, por lo menos se solucionó el problema  :-/

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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Problema con write_eeprom
« Respuesta #14 en: 18 de Octubre de 2009, 14:42:59 »
Si no usan el proteus que herramienta usan para probar un código?

Muchas gracias a todos por la ayuda.
Saludos, Pablo

jeje pues con mucha imaginación y un poco de pesimismo buscando qué partes del código fallarán al probar el circuito en protoboard.

¿Quién dice que los programadores no somos pesimistas? Es lo que nos ayuda más para generar código robusto.  ;-)


 

anything