Autor Tema: guardar datos en eprom  (Leído 2604 veces)

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

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
guardar datos en eprom
« en: 28 de Septiembre de 2017, 12:47:30 »
Saludos,
Necesito guardar estos datos en la memoria del pic, para luego enviarlos en secuencia:

LAT:6.10128833, LONG:-75.210038

Dirección          dato
0x00:           6.10128833,-75.210038
0x01:           6.10128833,-75.210038
0x02:           6.10128833,-75.210038
0x03:           6.10128833,-75.210038

La memoria del  PIC es de 255, se que por espacio solo permite 0xFF

Quiero guardar almenos 100 datos , alguna idea?
Gracias.


Código: C
  1. dato= 1;
  2. write_int16_eeprom(0x0,(int16) dato);         // Escribe en la memoria, en la posición 0x00


« Última modificación: 28 de Septiembre de 2017, 13:36:39 por cvargcal »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:guardar datos en eprom
« Respuesta #1 en: 28 de Septiembre de 2017, 15:05:04 »
Pregunta: ¿Los vas a modificar?, ¿Como pensas usarlo?

NO en mucho tiempo (y sobra mucha Flash), o NO directamente:
Entonces usa la flash.. Ya que es mucha cantidad.

Código: C
  1. struct Grados {
  2.   float lat;
  3.   float long;
  4. };
  5.  
  6. const struct Grados[100] = {{6.10128833,-75.210038},{6.10128833,-75.210038},{6.10128833,-75.210038},......}

SI regularmente, o SI cada tanto:

Si los datos cambian, entonces vas a necesitar una EEPROM externa para un PIC.
Si usas un float de 32bits que creo que es lo que usa CCS, tenes que cada uno de los numeros va a ocupar 4 bytes, es decir 8bytes por cada par lat/long, para 100 numeros son 800 bytes a guardar. Los unicos de 8bits que conozco con mas de 512Kb son los ATmega (hasta 4K) sino usas una EEPROM externa como te dije.

¿Los quiero como numeros o como letras?
Existe la posibilidad  tambien de guardarlo como char ( en ASCII), todo depende para que los usas, los cuales son 11 bytes por cada dato, 22 bytes para un par, y 2.2Kb para tener los 100 datos. Pero eso te permitiria no tener que lidiar con float para pasarlo a texto, o si debes enviarlo por la UART o mostrarlo en un LCD, lo tenes directo, solo tenes que leerlo y usarlo. No perdes precision, y el costo es un poco mas de espacio en una EEPROM, que la diferencia de tamaños no es grande. Dependiendo que vayas a hacer, creo que es una de las mejores opciones.
En la FLASH tambien podrias guardar los datos como char.


PD:
Vas a tener error por usar floats ejemplo:
Para 6.10128833, el valor que vas a tener es de: 6.101288318634033203125
Y para -75.210038, el valor guardado es de: -75.2100372314453125

En caso de querer usar float, en el manual de CCS hay un codigo de como hacer para almacenar esos float dentro de la memoria EEPROM
« Última modificación: 28 de Septiembre de 2017, 15:09:35 por KILLERJC »

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re:guardar datos en eprom
« Respuesta #2 en: 28 de Septiembre de 2017, 15:29:27 »
...
Muchas gracias,
La idea es que funcione como un gpstracker, cuando no haya señal gsm... guardo al menos los últimos 100 registros, para luego enviarlos al servidor cuando la conexión se establezca.
Queria ahorrarme la memoria, por motivos de espacio en el pcb... pero si no hay de otra lo haré.
Creo que lo ideal es en ASCII.

Dispongo de esta memoria : 24LC64-I/SN
http://ww1.microchip.com/downloads/en/DeviceDoc/21189S.pdf

¿o cual podrías recomendarme?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:guardar datos en eprom
« Respuesta #3 en: 28 de Septiembre de 2017, 15:47:42 »
Con esa memoria vas a poder grabar bastante..

Ocupando 10 bytes por dato, si es no los tratas como un string, 20 bytes para el par lat/long, eso te deja con 2K para 100 entradas.

Esa EEPROM es de 8Kbytes, por lo tanto tendrias para 400 entradas.
O disminuir un poco las entradas y agregarle un checksum para cada par lat/long ( o cada varios pares) asi de esa forma te aseguras que sea valido lo almacenado tambien.
Pero suponete unas 300 coordenadas.

O tambien en caso que prevengas que ocurra bastante seguido el asunto de guardar coordenadas, dividir virtualmente la EEPROM en 3, y utilizarla, asi de esa forma se extiende la vida de operacion de la EEPROM. Obviamente se necesita mas investigacion/prueba, tal ves 100 sea mucho y solo necesites unos 50 maximo.

--------------

Esto si te interesa que se guarde en caso de perder la alimentacion. Si no te interesa, lo mejor es una RAM, ya que no posee limites de escritura. Ejemplo: 23K256 o 23A640T ( SPI, I2C no vi muchos )
O si tampoco te molesta, es buscar un micro con muchas mas RAM, y usar esa RAM para almacenar los datos.
« Última modificación: 28 de Septiembre de 2017, 15:50:14 por KILLERJC »

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re:guardar datos en eprom
« Respuesta #4 en: 28 de Septiembre de 2017, 16:22:27 »
... gracias, investigaré...
no contaba con el limite de escritura, lo cual realmente es critico... porque la señal se cae constantemente.