bueno, como est titulado este mensaje estoy tratando de almacenar la temperatura que obtengo mediante un lm35dz en una eeprom 24aa256, hasta ahora ya estoy guardando datos en la eeprom pero solo valores enteros, lo que quiero es guardar por ejemplo 24.50 grados centigrados en la eeprom, pero no lo he conseguido...
el codigo que estoy usando es el siguiente: #include "Wire.h" #include <SoftwareSerial.h>
float Sen_Temp;
void loop(){
Sen_Temp = (5.0100/1024(analogRead(0))); //Se obtiene la Temperatura
Serial.print(Sen_Temp,2); //Imprime la Temperatura con 2 decimales
}
//subrutina para escritura de eepom
void eeprom_write(int dir,int Temp){
//Escribiendo en Pagina 0 la temperatura
Wire.beginTransmission(0x50); //Direccion de la Pagina a escribir
Wire.send(dir); //DIRECCION DE LA PAGINA (se puede acceder hasta 32768 posiciones)
Wire.send(0x01);
Wire.send(Temp); //Dato a escrbir
Wire.endTransmission();
observen que por el serial monitor estoy imprimiento la temperatura con dos decimales, y quiero que ese mismo valor se almacene en la eeprom... por otra parte los parametros que recibe la funcion eeprom_write son del tipo entero , he colocado Temp del tipo float y me arroja un error
Aunque usan la EEPROM interna, puedes sacar de ahi el "concepto".
También con operadores shift, y guardando siempre una cantidad fija de decimales, puedes hacerte una rutina fácil.
Me refiero, que 24.45, puedes guardarlo como 2445 en 2 bytes, y al leerlo siempre dividirlo por 100 (si crees que 2 decimales es suficiente).
Pienso que lo mejor seria que guardases directamente el valor leido en la entrada analogica en la eeprom, y cuando la quieras visualizar en el puerto serie le apliques la conversion a grados centigrados.
Creo que esta solucion es la mas elegante ya que solo ocupas 2 byte en la memoria eeprom.
bueno la de igor no la entendi muy bien, me puse fue tomar el valor de la tempertura por ejemplo 20.58 luego multiplicar por 100
luego tratat de convertir ese valor a BCD, de manera de tener : por ejemplo 2058=(0010000001011000)BCD
la idea era tomar los 8 bits mas siginificativos y guardar en una posicion de la eeprom luego tomar los 8 bits menos significativos y guardarlos
en otra posicion, y de esta manera tendria la parte entera de la teperatura en una posicion y la parte decimal en otra, pero me quede en
como separar una variable de 16 bits en dos de 8 bits....
yo estuve mirando como solucionar este mismo problema para guardar unos parámetros de calibración en un proyecto y, despues de muchas vueltas, la mejor solución que encontré es la del WriteAnythink que comenta Igos en su Post.
En el enlace adjunto puedes ver un ejemplo de la aplicación.