ocrobot:modules:lm75
目录
LM75温度监控模块
介绍
OCROBOT LM75温度监控模块,是一款较高精度的低功耗温度传感器模块,其特有的监控功能,可以将温度的上限及下限配置进传感器,传感器自动监测并提供报警功能,可以释放处理器的有限资源,并不需要处理器实时对温度进行监视。
参数
关键特性
- I²C总线接口
- 独立的漏极开路OS输出可作为中断或比较器/恒温器输入
- 寄存器回读功能
- 上电默认状态允许用作恒温器单机运行
- 3.0V至5.5V电源电压
- 低工作电源电流250µA (典型值)、1mA (最大值)
- 4µA (典型值)关断模式大大降低了功耗
- 同一总线上最多可连接8个LM75
图片
示例代码
#include <Wire.h> #define SensorAdresse 0x4F // 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(); }
ocrobot/modules/lm75.txt · 最后更改: 2023/06/07 04:23 由 127.0.0.1