Go Down

Topic: Capacidad (bits) necesaria para almacenar mediciones. (Read 964 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy