Модуль CJMCU LM75 представляет собой цифровой датчик температуры на ИМС LM75A. Датчик температуры использует шину I2C, что дает возможность подключения одновременно до 8 температурных датчиков.
- Диапазон температур: -55°C … +125°C (±2°C)
- Разрешение: 11 бит
- Напряжение питания: 2.8 В … 5.5 В
Дополнительно в модуле датчика имеется цифровой выход OS который может менять свое логическое состояние в зависимости от 2-х программируемых температурных отметок. OS — это выход с открытым стоком, для нормальной работы выхода на плате модуля установлен подтягивающий резистор и светодиод сигнализирующий состояние выхода. Максимальный выходной ток выхода 10 мА.
Для установки адреса на шине отвечают выходы, A0, A1 и A2, перед подключением необходимо установить перемычки к VDD или GND.
Начальный адрес I2C 0x48, перемычки адреса позволяют менять три младших разряда адреса:
- BIN 1001000 = 0x48 | A0 = 0, A1 = 0, A2 = 0
- BIN 1001001 = 0x49 | A0 = 0, A1 = 0, A2 = 1
- BIN 1001010 = 0x50 | A0 = 0, A1 = 1, A2 = 0
- BIN 1001011 = 0x51 | A0 = 0, A1 = 1, A2 = 1
- BIN 1001100 = 0x52 | A0 = 1, A1 = 0, A2 = 0
- BIN 1001101 = 0x53 | A0 = 1, A1 = 0, A2 = 1
- BIN 1001110 = 0x54 | A1 = 0, A1 = 0, A2 = 0
- BIN 1001111 = 0x55 | A0 = 1, A1 = 0, A2 = 1
Управление LM75 осуществляется при помощи 4 регистров:
Регистр Conf определяет режим работы выхода OS, режим работы — запись 8 бит
Если бит OS_COMP_INT равен 0, то выход OS работает следующим образом:
Если температура поднимается выше значения в регистре Tos — выход OS переходит в активное состояние. Он останется в этом состоянии до тех пор, пока температура не упадет ниже значения в регистре Thyst. Это режим называется OS comparator mode.
Если бит OS_COMP_INT равен 1, то выход OS работает следующим образом:
Если температура поднимается выше значения в регистре Tos — выход переходит в активное состояние. И остается в нем до тех пор, пока не будет прочитано значение регистра Temp. Когда регистр температуры будет прочитан, OS переключается в неактивное состояние и находится в нем до тех пор, пока температура не станет ниже значения в регистре Thyst. Тогда он опять переходит в активное состояние, пока не будет прочитано значение регистра Temp. В этом режиме можно контролировать уход температуры за пределы обозначенного регистрами Tos и Thyst диапазона. Нижней границей будет Thyst, а верхней — Tos. Это режим называется OS interrupt mode.
Бит SHUTDOWN отвечает за спящий режим. Если SHUTDOWN равен 0, то устройство активно. Если SHUTDOWN = 1, то устройство переходит в спящий режим. При этом ток потребления снижается до 100 мкА.
Бит OS_F_QUE определяет кол-во измерений температуры после которого будет опрос регистров Tos и Thyst.
Бит OS_POL меняет полярность выхода OS.
Регистр Temp содержит значение измеренной температуры, режим работы — чтение 16 бит
Чтение регистра Temp производится в два этапа, сначала читаем старший байт, потом младший. Так как регистр содержит информацию об температуре с разрешением 11 бит, то 5 младших битов младшего байта игнорируются.
При этом старший байт содержит целое число градусов, а младшие байт дробную часть градуса (1 бит = 0,125°C).
Регистры Tos и Thyst содержат температурные значения для срабатывания выхода OS, режим работы — запись 16 бит
Регистр Tos отвечает за верхнее значение диапазона регулировки температуры, регистр Thyst за нижнее значение.
Значение температуры записываемое в регистры Tos и Thyst кратно 0,5°С, при этом передается число int получаемое путем умножения на 2 числа float температуры регулировки. Например если температура регулировки 25,5°С, то передается число int 51.
Регистры Tos и Thyst 16 бит, но передаваемое значение температуры 9 бит. При этом старший байт содержит целое число градусов, а младший байт дробную часть градуса (1 бит = 0,5°C).
При отключении питания данные регистров Tos и Thyst не сохраняются (по умолчанию Tos = 80°C, Thyst = 75°С).
Ниже показан скетч демонстрирующий работу цифрового датчика температуры. В монитор порта выводится значение измеренной температуры и логическое состояние выхода OS. Состояние выхода контролируется входом D2 который подключен к OS.
#include <Wire.h> float thyst_x = 29.0; float tos_x = 30.0; void setup(){ Wire.begin(); Serial.begin(9600); pinMode(2, INPUT_PULLUP); /// CONF REG Wire.beginTransmission(0x48); Wire.write(0x01);// conf reg Wire.write(0b00000000);// data 00000000 Wire.endTransmission(); /// Thyst Wire.beginTransmission(0x48); Wire.write(0x02); Wire.write((int(thyst_x*2)) >> 1); Wire.write((int(thyst_x*2) & 1) << 7); Wire.endTransmission(); /// Tos Wire.beginTransmission(0x48); Wire.write(0x03); Wire.write((int(tos_x*2)) >> 1); Wire.write((int(tos_x*2) & 1) << 7); Wire.endTransmission(); } void loop(){ Serial.println( lm75() ); Serial.println(digitalRead(2)); delay(1000); } float lm75(){ /// TEMP REG Wire.beginTransmission(0x48); Wire.write(0x00); // temp reg Wire.endTransmission(); Wire.requestFrom(0x48, 2); while(Wire.available() < 2); float value = (((Wire.read() << 8) | Wire.read()) >> 5)*0.125 ; return value; }
В скетче указаны значения температуры регулирования:
float thyst_x = 29.0;
float tos_x = 30.0;
Выход OS работает следующим образом — при включении датчика при температуре ниже 29°С выход OS активен, на его выходе лог. 1. Как только температура достигает 30°С выход OS переходит в неактивное состояние, на его выходе лог. 0. При достижении температуры ниже 29°С, выход OS снова переходит в активное состояние.
Температуры повысилась до 30 и выше °С, выход OS = 0
Температуры понизилась до 29 и ниже °С, выход OS = 1