用户工具

站点工具


en:ocrobot:modules:lm75

LM75 temperature monitoring module

Introduce

OCROBOT LM75 temperature monitoring module is a relatively high precision temperature sensor module with low power consumption. its unique monitoring function, you can configure the upper limit and lower limit of temperature into sensor, the sensor automatic monitoring and provide alarm function, this can release the processor and does not need the processor for temperature monitoring in real time.

Parameter

The key features

I²C bus interface Independent of the drain open OS output can be used as an interrupt or the comparator input/thermostat Register read back function Power on default state allows as thermostat standalone operation 3.0 V to 5.5 V power supply Low power supply current 250 µA(typical) or 1 ma (maximum) , 4 µA (typical) shut off mode greatly reduces the power consumption On the same bus can connect up to 8 LM75

source code


// Anschlu? eines I2C-Temperatursensor mit LM75 von Horter & Kalb an Arduino 
// Bei den meisten Arduinos befindet sich der SDA (data line) an Analog Bin 4 und SCL (Clock line) an Analog Bin 5,
// bei Arduino Mega SDA an digital Pin 20 und SCL an digital Pin 21
// I2C wird über die Wire Library abgewickelt. Der angegebene Code ist für die Version 1.0 des Arduino Compilers (n?chste nach 23)
// In dieser Version wurde durch Vererbung von Streams.h die Funktion Wire.send durch die Funktion Wire.write ersetzt.
// Darauf ist zu achten, wenn man in einer ?lteren Version compiliert.
// Es wurden alle Funktionen eingebaut und als Beispiel angeführt.
// Liest man nur die Temperatur aus, so kann auf den Gro?teil verzichtet werden.
 
#include <Wire.h>
#define SensorAdresse 0x48 // Basisadresse für ersten Temperatursensor
 
// Registerparameter fuer get_LM75_temperature
#define TEMP 0  // Temperaturregister anw?hlen
#define UNTEN 2 // Register für den unteren Schaltwert anw?hlen
#define OBEN 3  // Register für den oberen Schaltwert anw?hlen
 
// LM75 Configuration Register Registeradresse: 1
// Bit 0: Stromsparmodus, bei 1 geht Temperatursensor in den Stromsparmodus (keine Messung, aber aktive Steuerung) Ausgang wird auch abgeschaltet
//                        bei 0 geht Temperatursensor aus dem Stromsparmodus (Messung) Ausgang wird wieder freigegeben  
// Bit 1: Interrupt Modus, bei 1 schaltet der Ausgang sowohl bei oberen als auch unteren Schwellwert ein, wird zurückgesetzt durch Auslesen des Registers
//                         bei 0 schaltet der Ausgang bei oberen Schaltpunkt ein und bei unteren aus (default 80°C / 75°C)
// Bit 2: OS-Pin bei 1 wird das Verhalten des Ausgangs invertiert, Ausgang ist eingeschalten innerhalb der Schwellwerte
//               bei 0 Ausgang schaltet bei überschreiten der eingestellten Schwellwerte
// Bit 3 und 4: Wert 0-3, besagt wieviele Messzyklen abgewartet wird, bis Ausgang aktiv/inaktiv wird, wenn die Bedingung erfüllt ist (verhindert Flattern des Ausgangs)
// Bit 5-7 müssen 0 sein
// Byte: 7 6 5 4 3 2 1 0
 
//char dataString[7]; // gelesene Temperatur als String aufbereitet: (-xx)x.x
double temp; // gelesene Temperatur als double
 
void setup() { 
  Wire.begin();
  Serial.begin(9600);
  delay(1000);
} 
 
void loop()  
{  
// Temperatur aus LM75 auslesen
  temp = get_LM75_temperature(0, TEMP); //(Device)Wert vom 1. Temperatursensor lesen (0-7, je nach Jumperstellung am Board, 2. Parameter wie oben definiert)
 // dtostrf(temp, 4, 1, dataString); //dtostrf(floatVar, minStringWidthIncDecimalPoint, numVarsAfterDecimal, charBuf); (standard avr-libc function)
  Serial.print("Gemessene Temperatur: ");
  Serial.println(temp);
 
// LM75 Konfigurationsregister auslesen: Device
  Serial.print("Konfigurations-Register: "); 
  Serial.println(get_LM75_config(0), HEX);
 
// LM75 Konfigurationsregister setzen: Device, Wert siehe oben
  set_LM75_config(0, 0);
 
// LM75 Schaltwerte setzen: Device, Register, Wert als double 
  set_LM75_schaltwert(0, UNTEN, 16);     //解除警报温度下限
  set_LM75_schaltwert(0, OBEN, 20);     //报警温度上限
 
// LM75 Schaltwerte auslesen: Device, Register
  temp = get_LM75_temperature(0, UNTEN);
  Serial.print("UNTEN: "); 
  Serial.println(temp, 1);
  temp = get_LM75_temperature(0, OBEN);
  Serial.print("OBEN: "); 
  Serial.println(temp,1);
  delay(5000);
}
 
// LM75 Temperatur auslesen. Device = 0-7, regx = TEMP, OBEN, UNTEN (Registerauswahl)  
double get_LM75_temperature(int device, int regx) 
{
  int8_t msb;
  int8_t lsb;
  int8_t msb1;
  Wire.beginTransmission(SensorAdresse + device);
  Wire.write(regx);
  Wire.endTransmission();
  Wire.beginTransmission(SensorAdresse + device);
  Wire.requestFrom(SensorAdresse + device, 2);
  if (Wire.available()) {
     msb1 = Wire.read();
     msb = msb1 << 1; // Vorzeichenbit entfernen, verbliebener Wert ist nun doppelt so gro?
     lsb = Wire.read();
  }
  // h?chstes bit von lsb sagt aus, ob 0,5 Grad dazu addiert werden sollen
  lsb = (lsb & 0x80 ) >> 7; // nun ist lsb = 0 oder 1
  Wire.endTransmission();
  if (msb1 < 0x80) { // Positiver Wert?
    return double(msb + lsb)/2; // positiver Wert
  }  
  else {
    return double(msb + lsb)/2 - 128; // negativer Wert
  }  
}
 
// LM75 Konfigurationsregister setzen, Werte wie oben definiert
void set_LM75_config(int device, byte value) 
{
  Wire.beginTransmission(SensorAdresse + device);
  Wire.write(1); // Select Konfigurationsregister
  Wire.write(value);
  Wire.endTransmission();
}
 
// LM75 Konfigurationsregister auslesen, device = 0-7
byte get_LM75_config(int device) 
{
  byte reg;
  Wire.beginTransmission(SensorAdresse + device);
  Wire.write(1); // Select Konfigurationsregister
  Wire.endTransmission();
  Wire.requestFrom(SensorAdresse + device, 1);
  if (Wire.available()) { 
     reg = Wire.read();
  }
  Wire.endTransmission();
  return reg;
} 
 
// LM75 Schaltwerte setzen, device = 0-7, regx = Wert, Grad als double
void set_LM75_schaltwert(int device, byte regx, double grad) 
{
  int8_t msb;
  int8_t lsb = 0;
  uint8_t y = 0;
  boolean neg = false;
  if (grad < 0) {
    msb = abs(int(grad))+128;
  }
  else {  
    msb = abs(int(grad));
  }
  if (grad - abs(int(grad)) > 0) {
    lsb = 0x80;
  }
  Wire.beginTransmission(SensorAdresse + device);
  Wire.write(regx); // Selektiere oberes oder unteres Register
  Wire.write(msb);
  Wire.write(lsb);
  Wire.endTransmission();
}
en/ocrobot/modules/lm75.txt · 最后更改: 2023/06/07 04:23 由 127.0.0.1