Capacidad (bits) necesaria para almacenar mediciones.

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. :roll_eyes:

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.

Esta cadena la podrias grabar en una eeprom

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.

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!

Alcafuz:
¿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.

flico:
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.

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

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;

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.

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);
}

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