0.4.0 MCP9808_RT

This commit is contained in:
Rob Tillaart 2023-10-04 15:50:10 +02:00
parent 877d392562
commit d06dc4dfcd
18 changed files with 157 additions and 90 deletions

View File

@ -6,11 +6,20 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
## [0.4.0] - 2023-10-04
- Fix #13 Refactor constructor - (simpler)
- removed **setAddress()** - (force one sensor one object)
as different addresses can have e.g. different offsets.
- add ESP32 specific example.
- Fix #15 PlatformIO badge
-
----
## [0.3.1] - 2023-09-23
- Add Wire1 support for ESP32
- update readme.md
## [0.3.0] - 2023-02-03
- Fix #11 Wire2
- update readme.md

View File

@ -6,7 +6,7 @@
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/MCP9808_RT/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/release/RobTillaart/MCP9808_RT.svg?maxAge=3600)](https://github.com/RobTillaart/MCP9808_RT/releases)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/MCP9808_RT.svg)](https://registry.platformio.org/libraries/robtillaart/MCP9808_RT)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/MCP9808.svg)](https://registry.platformio.org/libraries/robtillaart/MCP9808)
# MCP9808_RT
@ -50,11 +50,15 @@ of electronics if the temperature hits a predefined value or temperature zone.
#### Constructor
- **MCP9808(const uint8_t address)** constructor for e.g. UNO.
- **MCP9808(const uint8_t address, const uint8_t dataPin = 255, const uint8_t clockPin = 255)** constructor for ESP32 and ESP8266.
- **bool setAddress(const uint8_t address, TwoWire \*wire = &Wire)** if multiple I2C buses are present one can choose.
- **MCP9808(const uint8_t address, TwoWire \*wire = &Wire)** Set the device address.
Option one can set the I2C bus if multiple I2C buses are present.
Default I2C bus is Wire.
**0.4.0 Breaking change**
The user must initialize the I2C bus in **setup()**, the library doesn't do that
since 0.4.0. So one need to call **Wire.begin()** or **Wire.begin(SDA, SCL)**.
#### Address
@ -86,7 +90,7 @@ The value of offset is not validated to keep footprint small.
The value returned by **getStatus()** is the last value read by the call to **GetTemperature()**.
There are three bits, see table below.
A value of 6 == mask == 110 means that TA is above the upper and above the critical temperature.
A value of 6 == mask == 110 means that TA is above the upper AND above the critical temperature.
| Bit | Mask | Description | Notes |
|:-----:|:------:|:--------------|:-----------------|
@ -100,15 +104,16 @@ A value of 6 == mask == 110 means that TA is above the upper and above the criti
- **void setResolution(uint8_t resolution = 3)** set the resolution, if resolution > 3, it is not set.
- **uint8_t getResolution()** returns the resolution set.
| Value | Resolution | Conv time (ms) | Samples/s | Notes |
|:-------:|:-------------|:----------------:|:-----------:|:--------:|
| 0 | 0.5°C | 30 | 33 | |
| 1 | 0.25°C | 65 | 15 | |
| 2 | 0.125°C | 130 | 7 | |
| 3 | 0.0625°C | 250 | 4 | default |
| Value | Resolution | Conversion | Samples/s | Notes |
|:-------:|:-------------|:------------:|:-----------:|:--------:|
| 0 | 0.5°C | 30 ms | 33 | |
| 1 | 0.25°C | 65 ms | 15 | |
| 2 | 0.125°C | 130 ms | 7 | |
| 3 | 0.0625°C | 250 ms | 4 | default |
Note: for the same resolution it is about 3x faster than a DS18B20.
Note: for the same resolution the MCP9808 is about 3x faster than
the popular DS18B20.
#### Configuration

View File

@ -0,0 +1,27 @@
platforms:
rpipico:
board: rp2040:rp2040:rpipico
package: rp2040:rp2040
gcc:
features:
defines:
- ARDUINO_ARCH_RP2040
warnings:
flags:
packages:
rp2040:rp2040:
url: https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
compile:
# Choosing to run compilation tests on 2 different Arduino platforms
platforms:
# - uno
# - due
# - zero
# - leonardo
# - m4
- esp32
# - esp8266
# - mega2560
# - rpipico

View File

@ -0,0 +1,31 @@
//
// FILE: mcp9808_ESP32_Wire1.ino
// AUTHOR: Rob Tillaart
// PURPOSE: demo
// DATE: 2020-11-12
#include "mcp9808.h"
MCP9808 ts(24, &Wire1);
void setup()
{
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("MCP9808_LIB_VERSION: ");
Serial.println(MCP9808_LIB_VERSION);
Wire1.begin(25, 26); // use Wire1 with adjusted pins.
}
void loop()
{
delay(2000);
Serial.println(ts.getTemperature(), 4);
}
// -- END OF FILE --

View File

@ -14,6 +14,10 @@ void setup()
{
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("MCP9808_LIB_VERSION: ");
Serial.println(MCP9808_LIB_VERSION);
Wire.begin();
}
@ -25,4 +29,3 @@ void loop()
// -- END OF FILE --

View File

@ -14,6 +14,10 @@ void setup()
{
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("MCP9808_LIB_VERSION: ");
Serial.println(MCP9808_LIB_VERSION);
Wire.begin();
}
@ -29,4 +33,3 @@ void loop()
// -- END OF FILE --

View File

@ -16,6 +16,10 @@ void setup()
{
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("MCP9808_LIB_VERSION: ");
Serial.println(MCP9808_LIB_VERSION);
Wire.begin();
// UNO can do max 850 Kbits / sec
Serial.println("\nCLOCK\tTEMP\tMICROS");
@ -44,4 +48,3 @@ void loop()
// -- END OF FILE --

View File

@ -14,6 +14,10 @@ void setup()
{
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("MCP9808_LIB_VERSION: ");
Serial.println(MCP9808_LIB_VERSION);
Wire.begin();
}
@ -31,4 +35,3 @@ void loop()
// -- END OF FILE --

View File

@ -14,6 +14,10 @@ void setup()
{
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("MCP9808_LIB_VERSION: ");
Serial.println(MCP9808_LIB_VERSION);
Wire.begin();
test_0();
test_1();
@ -140,4 +144,3 @@ void loop()
// -- END OF FILE --

View File

@ -27,8 +27,12 @@ void setup()
{
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("MCP9808_LIB_VERSION: ");
Serial.println(MCP9808_LIB_VERSION);
// SET TEMPERATURE WINDOW FOR COMPERATOR MODE °C
Wire.begin();
// SET TEMPERATURE WINDOW FOR COMPERATOR MODE <20>C
ts.setTlower(21);
ts.setTupper(23);
@ -68,4 +72,3 @@ void loop()
// -- END OF FILE --

View File

@ -37,8 +37,12 @@ void setup()
{
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("MCP9808_LIB_VERSION: ");
Serial.println(MCP9808_LIB_VERSION);
// SET TEMPERATURE WINDOW FOR COMPERATOR MODE °C
Wire.begin();
// SET TEMPERATURE WINDOW FOR COMPERATOR MODE <20>C
// small window for 'fast' effect
ts.setTlower(22);
ts.setTupper(23);
@ -87,4 +91,3 @@ void loop()
// -- END OF FILE --

View File

@ -22,21 +22,25 @@
MCP9808 ts(24);
const uint8_t ALERTPIN = 5; // ADJUST IF NEEDED
const uint8_t ALERTPIN = 5; // ADJUST IF NEEDED
void setup()
{
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("MCP9808_LIB_VERSION: ");
Serial.println(MCP9808_LIB_VERSION);
// SET TEMPERATURE WINDOW FOR COMPERATOR MODE °C
// small window for 'fast' effect
Wire.begin();
// SET TEMPERATURE WINDOW FOR COMPERATOR MODE <20>C
// small window for 'fast' effect
ts.setTlower(22);
ts.setTupper(23);
// SET AUTO RESET (p32 datasheet)
// same value as Tupper to have auto reset in comparator mode.
// note no hysteresis set
// SET AUTO RESET (p32 datasheet)
// same value as Tupper to have auto reset in comparator mode.
// note no hysteresis set
ts.setTcritical(23);
Serial.print("LOW:\t");
@ -50,19 +54,19 @@ void setup()
// SET ALERT PARAMETERS
uint16_t cfg = ts.getConfigRegister();
cfg &= ~0x0001; // set comparator mode
// cfg &= ~0x0002; // set polarity HIGH
cfg |= 0x0002; // set polarity LOW
cfg &= ~0x0004; // use upper lower and critical
cfg |= 0x0008; // enable alert
cfg &= ~0x0001; // set comparator mode
// cfg &= ~0x0002; // set polarity HIGH
cfg |= 0x0002; // set polarity LOW
cfg &= ~0x0004; // use upper lower and critical
cfg |= 0x0008; // enable alert
ts.setConfigRegister(cfg);
}
void loop()
{
// will keep on alerting until pin = LOW again
// real difference with irq-RISING or CHANGE
// will keep on alerting until pin = LOW again
// real difference with irq-RISING or CHANGE
if (digitalRead(ALERTPIN) == HIGH)
{
Serial.println("---> ALERT !!!");
@ -77,5 +81,4 @@ void loop()
}
// -- END OF FILE --
// -- END OF FILE --

View File

@ -6,7 +6,6 @@ MCP9808 KEYWORD1
# Methods and Functions (KEYWORD2)
setAddress KEYWORD2
setConfigRegister KEYWORD2
getConfigRegister KEYWORD2

View File

@ -15,7 +15,7 @@
"type": "git",
"url": "https://github.com/RobTillaart/MCP9808_RT.git"
},
"version": "0.3.1",
"version": "0.4.0",
"license": "MIT",
"frameworks": "*",
"platforms": "*",

View File

@ -1,9 +1,9 @@
name=MCP9808_RT
version=0.3.1
version=0.4.0
author=Rob Tillaart <rob.tillaart@gmail.com>
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
sentence=Arduino Library for I2C MCP9808 temperature sensor
paragraph=
paragraph=
category=Sensors
url=https://github.com/RobTillaart/MCP9808_RT
architectures=*

View File

@ -22,47 +22,25 @@
/*
0000 = RFU, Reserved for Future Use (Read-Only register)
0001 = Configuration register (CONFIG)
0010 = Alert Temperature Upper Boundary Trip register (TUPPER)
0011 = Alert Temperature Lower Boundary Trip register (TLOWER)
0100 = Critical Temperature Trip register (TCRIT)
0101 = Temperature register (TA)
0110 = Manufacturer ID register
0111 = Device ID/Revision register
1000 = Resolution register
1xxx = Reserved(1)
0x00 = 0000 = RFU, Reserved for Future Use (Read-Only register)
0x01 = 0001 = Configuration register (CONFIG)
0x02 = 0010 = Alert Temperature Upper Boundary Trip register (TUPPER)
0x03 = 0011 = Alert Temperature Lower Boundary Trip register (TLOWER)
0x04 = 0100 = Critical Temperature Trip register (TCRIT)
0x05 = 0101 = Temperature register (TA)
0x06 = 0110 = Manufacturer ID register
0x07 = 0111 = Device ID/Revision register
0x08 = 1000 = Resolution register
1xxx = Reserved(1)
*/
#if defined(ESP8266) || defined(ESP32)
MCP9808::MCP9808(const uint8_t address, const uint8_t dataPin, const uint8_t clockPin)
MCP9808::MCP9808(const uint8_t address, TwoWire *wire)
{
_address = address;
if ((address < 24) || (_address > 31)) return;
if ((dataPin < 255) && (clockPin < 255))
{
_wire->begin(dataPin, clockPin);
} else {
_wire->begin();
}
}
#else
MCP9808::MCP9808(const uint8_t address)
{
MCP9808::setAddress(address, &Wire);
}
#endif
bool MCP9808::setAddress(const uint8_t address, TwoWire *wire)
{
if ((address < 24) || (address > 31)) return false;
_address = address;
_wire = wire;
_wire->begin();
return true;
_wire = wire;
_offset = 0;
_status = 0;
}
@ -129,7 +107,7 @@ void MCP9808::setOffset(float offset)
float MCP9808::getOffset()
{
return _offset;
return _offset;
};

View File

@ -2,7 +2,7 @@
//
// FILE: mcp9808.h
// AUTHOR: Rob Tillaart
// VERSION: 0.3.1
// VERSION: 0.4.0
// PURPOSE: Arduino Library for I2C mcp9808 temperature sensor
// DATE: 2020-05-03
// URL: https://github.com/RobTillaart/MCP9808_RT
@ -17,7 +17,7 @@
// 24..31 == 0x18..0x1F
#define MCP9808_LIB_VERSION (F("0.3.1"))
#define MCP9808_LIB_VERSION (F("0.4.0"))
// CONFIGURATION REGISTER MASKS
@ -37,14 +37,8 @@
class MCP9808
{
public:
#if defined(ESP8266) || defined(ESP32)
// dataPin and clockPin can be used for ESP8266
MCP9808(const uint8_t address, const uint8_t dataPin = 255, const uint8_t clockPin = 255);
#else
MCP9808(const uint8_t address);
#endif
MCP9808(const uint8_t address, TwoWire *wire = &Wire);
bool setAddress(const uint8_t address, TwoWire *wire = &Wire);
bool isConnected();
void setConfigRegister(uint16_t configuration);

View File

@ -66,9 +66,9 @@ unittest(test_constants)
// TODO more can be tested if there is a Godmode->Wire stub
unittest(test_constructor)
{
MCP9808 ts(24);
assertTrue(ts.setAddress(24, &Wire) );
assertTrue(ts.isConnected());
MCP9808 ts(24, &Wire);
// assertTrue(ts.isConnected());
assertEqual(1,1);
}