Go Down

Topic: Capacidad (bits) necesaria para almacenar mediciones. (Read 915 times) previous topic - next topic

Alcafuz

Hola a todos, tengo una duda que debe ser muy básica:

¿Cómo se cuanto espacio de memoria me ocuparia almacenar una línea de datos como esta?

" 13º Lunes 24 Marzo 12:33:21", quiero hacer un datalogger y quiero ver si me conviene una gran EEPROM o necesito de una microSD, dependiendo claro de la frecuencia con que almacene datos.

Saludos y Gracias.  :smiley-roll-blue:

Alcafuz

mmm creo entender todo, es decir que debo tratar todo como numeros...mes (1 a 12), dia del mes (1 a 31), dia de la semana (1 a 7) y asi...para la temperatura eso si, debo darme un rango entre los -8º y 40º, por lo que suponiendo una resolución de 1º, necesitaría 48 estados, esto es 5 bits. Voy bien??

Ahora, esta manera que me dices, me serviría solo a mí que se como programe la palabra de X bits. ¿Podría también almacenar todo como caracteres??? De manera de que cualquier mortal pueda leer los datos almacenados?

Saludos y gracias por tu respuesta.

flico

Esta cadena la podrias grabar en una eeprom
Code: [Select]
13º Lunes 24 Marzo 12:33:21

de esta manera
1 byte temperatura
2 byte Dia de la semana del 0-7
3 byte dia
4 byte mes del 0-12
5 byte hora
6 byte minuto
7 byte segundo

Saludos.
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Alcafuz

Cuando lea los datos voy a tener una serie de cadenas de 0 y 1, como puedo hacer para traducirlas una vez que tenga por ejemplo 200 cadenas de datos, es decir 200 mediciones. ¿tendría que hacer un programa que las lea y me las muestre en caracteres ASCII?

Saludos!

chato_sat


¿tendría que hacer un programa que las lea y me las muestre en caracteres ASCII?


Efectivamente. Lo mejor es que te hagas una librería para tratar las palabras y así guardarlas y leerlas a tu antojo.



1 byte temperatura
2 byte Dia de la semana del 0-7
3 byte dia
4 byte mes del 0-12
5 byte hora
6 byte minuto
7 byte segundo



Es más aconsejable trabajar a nivel de bits, ya que de esta manera se desperdicia muchísima memoria y no es que se tenga mucha eeprom. Por ejemplo ¿para que utilizar un byte para almacenar el día de la semana si con sólo 3 bits es posible obtener el mismo resultado?

Saludos chato_sat.

curro92

Hola,
en C se pueden usar los campos de bits, que pueden servir para optimizar el uso de memoria. En este caso, se podría definir una estructura que engloba los datos mencionados
Code: [Select]

struct datos_byte
{
   int temperatura: 7;                 // 128 estados
   unsigned int      semana: 3;      //   7 estados
   unsigned int     dia_mes: 5;      //  31 estados
   unsigned int  nombre_mes: 4;   //  12 estados
   unsigned int        hora: 5;        //  24 estados
   unsigned int     minutos: 6;       //  60 estados
   unsigned int    segundos: 6 ;     //  60 estados
} datos;



curro92

Hola,
he hecho un programilla de empaquetado de datos (temperatura, semana, dia de mes, nombre de  mes,  hora, minuto, segundo)  utilizando campos de bits (ocupa 5 bytes). Se les da unos valores arbitrarios,  y se muestran  los valores  por puerto serie.
Code: [Select]


struct datos_byte
{
  int                temperatura: 7;      // 128 estados
  unsigned int         semana: 3;      //   7 estados
  unsigned int        dia_mes: 5;      //  31 estados
  unsigned int  nombre_mes: 4;      //  12 estados
  unsigned int              hora: 5;      //  24 estados
  unsigned int         minutos: 6;      //  60 estados
  unsigned int       segundos: 6 ;     //  60 estados
} datos;


void setup()
{
  Serial.begin(9600);
}

void loop()
{
 // dando valores arbitrarios
 datos.temperatura = 37;
 datos.semana = 1;
 datos.dia_mes = 2;
 datos.nombre_mes = 3;
 datos.hora = 4;
 datos.minutos = 5;
 datos.segundos = 6;
 
   
 Serial.print("\n-----------------------\n");
 Serial.print("sizeof(datos): ");
 Serial.print(sizeof(datos), DEC);
 Serial.print("\n-----------------------\n");
 
 Serial.print("temperatura: ");
 Serial.println(datos.temperatura, DEC);
 
 Serial.print("datos.semana: ");
 Serial.println(datos.semana, DEC);

 Serial.print("datos.dia_mes: ");
 Serial.println(datos.dia_mes, DEC);

 Serial.print("datos.nombre_mes: ");
 Serial.println(datos.nombre_mes, DEC);

 Serial.print("datos.hora: ");
 Serial.println(datos.hora, DEC);

 Serial.print("datos.minutos: ");
 Serial.println(datos.minutos, DEC);

 Serial.print("datos.segundos: ");
 Serial.println(datos.segundos, DEC);

 delay(3000);
}





flico

Quote
Es más aconsejable trabajar a nivel de bits, ya que de esta manera se desperdicia muchísima memoria y no es que se tenga mucha eeprom. Por ejemplo ¿para que utilizar un byte para almacenar el día de la semana si con sólo 3 bits es posible obtener el mismo resultado?


Tambien tienes razon, usando estos bits podria ahorrar el uso de memoria. No?
Dia 0-31  5 bits
Mes 0-12 4 bits
hora 0-23 5 bits
minuto 0-60 6 bits

Salu2
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Go Up