Pages: [1]   Go Down
Author Topic: guardar temperatura con 2 decimales en EEPROM 24AA  (Read 1992 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 19
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.0*100/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
Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mira esto http://www.arduino.cc/playground/Code/EEPROMWriteAnything

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).

http://www.arduino.cc/en/Reference/Bitshift


 smiley-wink
« Last Edit: December 05, 2010, 11:44:59 am by igorreal » Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 44
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

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.

bye
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 19
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

muchas gracias, tienes razon... la conversion la hago una vez que leo el dato de la eeprom y solucionado el problema
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 44
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

De nada.  smiley-grin

Por cierto la solucion de Igor es muy buena, asi que no la tengas muy lejos para otra ocasion.

bye
« Last Edit: December 06, 2010, 04:36:40 am by chico_del_maiz » Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si, yo habia contestado en plan generico.

 smiley-wink
Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 19
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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....
Logged

Barcelona
Offline Offline
Full Member
***
Karma: 0
Posts: 136
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

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.

http://www.zigbe.net/?p=635
Logged


Pages: [1]   Go Up
Jump to: