Pages: [1]   Go Down
Author Topic: Logger de temperatura  (Read 1555 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buscando por la red encontre un proyecto muy bueno de un logger usando un reloj(ds1307), un termometro(ds1631) y una eeprom, entiendo casi todo pero hay un par de lineas que no entiendo que son.

Link del proyecto
http://kennethfinnegan.blogspot.com/2009/10/arduino-temperature-logger.html

Definicion de direcciones

Code:
//// I2C ADDRESSES ////
// DS1307 RTC chip
#define RTCI2C  (B1101000)
// DS1631 Temp sensor
#define TEMPI2C  (B1001000)
// AT24C1024B EEPROM
#define EEPROMI2C  (B1010000)



Leemos la SRAM del reloj DS1307

Code:
 // Extract the read count from the clock's battery backed
  // SRAM to make sure we don't overwrite data on the EEPROM
  // after power loss.
  Wire.beginTransmission(RTCI2C);
  Wire.send(0x08);
  Wire.endTransmission();
  Wire.requestFrom(RTCI2C, 2);
  tempreadcount = Wire.receive() << 8; // MSB
  tempreadcount += Wire.receive(); // LSB
  lcd.setCursor(0,0);
  lcd.print("READ CNT: 0x");
  lcd.print(tempreadcount, HEX);

Grabamos la temperatura y actualizamos el contador del reloj
Code:
void writetemp() {
  digitalWrite(LEDPIN, HIGH);
  long wordaddr = ((long)tempreadcount) * 2;
  // AT24C1024B adds the 17th addr bit to I2C addr
  byte eei2caddr = EEPROMI2C | (wordaddr>>16);
  
  // Write out tempurature to EEPROM
  Wire.beginTransmission(eei2caddr);
  Wire.send((byte)(wordaddr>>8) & 0xFF);
  Wire.send((byte)(wordaddr) & 0xFF);
  Wire.send(temp[0]);
  Wire.send(temp[1]);
  Wire.endTransmission();
 
  // Update read count here and in clock's SRAM
  tempreadcount++;
  Wire.beginTransmission(RTCI2C);
  Wire.send(0x08);
  Wire.send((byte)(tempreadcount>>8) & 0xFF);
  Wire.send((byte)(tempreadcount) & 0xFF);
  Wire.endTransmission();
  
  delay(10);
  digitalWrite(LEDPIN, LOW);
}

Pero en este codigo no entiendo varias lineas

Code:
Wire.send((byte)(tempreadcount>>8) & 0xFF);

Code:
tempreadcount = Wire.receive() << 8; // MSB

Code:
byte eei2caddr = EEPROMI2C | (wordaddr>>16);

Saludos
« Last Edit: April 29, 2012, 06:02:52 pm by coleoptero » Logged

Trabajando en ...

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

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

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Échale un vistazo a estas páginas:
http://www.arduino.cc/es/Reference/BitwiseAnd
http://www.arduino.cc/es/Reference/Bitshift
http://arduino.cc/forum/index.php/topic,32364.msg236679.html#msg236679

Un saludo
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Pages: [1]   Go Up
Jump to: