mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
0.2.2 MCP9808_RT
This commit is contained in:
parent
321993ce1a
commit
2da9513a7e
@ -1,3 +1,18 @@
|
|||||||
|
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:
|
compile:
|
||||||
# Choosing to run compilation tests on 2 different Arduino platforms
|
# Choosing to run compilation tests on 2 different Arduino platforms
|
||||||
platforms:
|
platforms:
|
||||||
@ -9,3 +24,4 @@ compile:
|
|||||||
- esp32
|
- esp32
|
||||||
# - esp8266
|
# - esp8266
|
||||||
# - mega2560
|
# - mega2560
|
||||||
|
- rpipico
|
||||||
|
44
libraries/MCP9808_RT/CHANGELOG.md
Normal file
44
libraries/MCP9808_RT/CHANGELOG.md
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# Change Log MCP9808_RT
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
||||||
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.2] - 2022-11-17
|
||||||
|
- add RP2040 in build-CI
|
||||||
|
- add changelog.md
|
||||||
|
- edit readme.md
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.1] - 2021-12-21
|
||||||
|
- update library.json
|
||||||
|
- update license
|
||||||
|
- minor edits
|
||||||
|
|
||||||
|
## [0.2.0] - 2021-11-19
|
||||||
|
- fix #7 negative temperature
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
## [0.1.4] - 2021-11-08
|
||||||
|
- update build-CI, badges
|
||||||
|
- default offset for offset
|
||||||
|
- default Wire for I2C bus - setAddress()
|
||||||
|
|
||||||
|
## [0.1.3] - 2021-01-01
|
||||||
|
- Arduino-ci + unit test
|
||||||
|
|
||||||
|
## [0.1.2] - 2020-11-16
|
||||||
|
- removed hasAlert
|
||||||
|
- removed setAlertPin,
|
||||||
|
- added 2 alert examples
|
||||||
|
- refactor low level
|
||||||
|
|
||||||
|
## [0.1.1] - 2020-11-12
|
||||||
|
- refactor
|
||||||
|
|
||||||
|
## [0.1.0] - 2020-05-03
|
||||||
|
- initial version.
|
||||||
|
|
@ -21,19 +21,19 @@ of electronics if the temperature hits a predefined value or zone.
|
|||||||
### MCP9808 breakout board
|
### MCP9808 breakout board
|
||||||
```
|
```
|
||||||
//
|
//
|
||||||
// Adafruit MCP9808 breakout board
|
// Adafruit MCP9808 breakout board
|
||||||
// +----------+
|
// +----------+
|
||||||
// |0 ALERT |---------------+--[ 4K7 ]---- +5V
|
// |0 ALERT |---------------+--[ 4K7 ]---- +5V
|
||||||
// | A2 |---- GND |
|
// | A2 |---- GND |
|
||||||
// | A1 |---- GND +--[ LED ]---- GND // or other electronics.
|
// | A1 |---- GND +--[ LED ]---- GND // or other electronics.
|
||||||
// | A0 |---- GND
|
// | A0 |---- GND
|
||||||
// | SDA |---- I2C MCU
|
// | SDA |---- I2C MCU
|
||||||
// | SCL |---- I2C MCU
|
// | SCL |---- I2C MCU
|
||||||
// | GND |---- GND MCU
|
// | GND |---- GND MCU
|
||||||
// |0 VCC |---- +5V
|
// |0 VCC |---- +5V
|
||||||
// +----------+
|
// +----------+
|
||||||
//
|
//
|
||||||
// address above is 24
|
// address above is 24
|
||||||
//
|
//
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ Default I2C bus is Wire.
|
|||||||
|
|
||||||
#### Address
|
#### Address
|
||||||
|
|
||||||
There ar max 8 sensors on one I2C bus.
|
There are max 8 sensors on one I2C bus.
|
||||||
Normal address = 0011xxx where xxx = A2, A1, A0
|
Normal address = 0011xxx where xxx = A2, A1, A0
|
||||||
|
|
||||||
| Address | HEX | A2 | A1 | A0 |
|
| Address | HEX | A2 | A1 | A0 |
|
||||||
@ -80,11 +80,11 @@ The value returned by **getStatus()** is the last value read by the call to **Ge
|
|||||||
There are three bits, see table below.
|
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 |
|
| Bit | Mask | Description | Notes |
|
||||||
|:----:|:------:|:------------|:----------------|
|
|:-----:|:------:|:--------------|:-----------------|
|
||||||
| 0 | 0x01 | TA < TLOWER | lower |
|
| 0 | 0x01 | TA < TLOWER | lower |
|
||||||
| 1 | 0x02 | TA > TUPPER | larger |
|
| 1 | 0x02 | TA > TUPPER | larger |
|
||||||
| 2 | 0x04 | TA ≥ TCRIT | larger or equal |
|
| 2 | 0x04 | TA ≥ TCRIT | larger or equal |
|
||||||
|
|
||||||
|
|
||||||
### Resolution
|
### Resolution
|
||||||
@ -92,12 +92,12 @@ 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.
|
- **void setResolution(uint8_t resolution = 3)** set the resolution, if resolution > 3, it is not set.
|
||||||
- **uint8_t getResolution()** returns the resolution set.
|
- **uint8_t getResolution()** returns the resolution set.
|
||||||
|
|
||||||
| Value | Resolution | Conv time (ms) | Samples/s | Notes |
|
| Value | Resolution | Conv time (ms) | Samples/s | Notes |
|
||||||
|:------:|:-----------|:--------------:|:---------:|:-------:|
|
|:-------:|:-------------|:----------------:|:-----------:|:--------:|
|
||||||
| 0 | 0.5°C | 30 | 33 | |
|
| 0 | 0.5°C | 30 | 33 | |
|
||||||
| 1 | 0.25°C | 65 | 15 | |
|
| 1 | 0.25°C | 65 | 15 | |
|
||||||
| 2 | 0.125°C | 130 | 7 | |
|
| 2 | 0.125°C | 130 | 7 | |
|
||||||
| 3 | 0.0625°C | 250 | 4 | default |
|
| 3 | 0.0625°C | 250 | 4 | default |
|
||||||
|
|
||||||
|
|
||||||
Note: for the same resolution it is about 3x faster than a DS18B20.
|
Note: for the same resolution it is about 3x faster than a DS18B20.
|
||||||
@ -112,7 +112,7 @@ Note: for the same resolution it is about 3x faster than a DS18B20.
|
|||||||
|:-----:|:------:|:-----------|:----------------|:-------|
|
|:-----:|:------:|:-----------|:----------------|:-------|
|
||||||
| 0 | 0x0001 | ALT MOD | alert mode | **0 = comparator output**, 1 = interrupt output
|
| 0 | 0x0001 | ALT MOD | alert mode | **0 = comparator output**, 1 = interrupt output
|
||||||
| 1 | 0x0002 | ALT POL | alert polarity | **0 = active low**, 1 = active high
|
| 1 | 0x0002 | ALT POL | alert polarity | **0 = active low**, 1 = active high
|
||||||
| 2 | 0x0004 | ALT SEL | alert select | **0 = upper+lower+crit**, 1 = crit only
|
| 2 | 0x0004 | ALT SEL | alert select | **0 = upper+lower+crit**, 1 = critical only
|
||||||
| 3 | 0x0008 | ALT CNT | alert control | **0 = OFF**, 1 = ON
|
| 3 | 0x0008 | ALT CNT | alert control | **0 = OFF**, 1 = ON
|
||||||
| 4 | 0x0010 | ALT STAT | alert status | **0 = OFF**, 1 = ON (read!)
|
| 4 | 0x0010 | ALT STAT | alert status | **0 = OFF**, 1 = ON (read!)
|
||||||
| 5 | 0x0020 | INT CLR | interrupt clear | **0 = none**, 1 = clear interrupt
|
| 5 | 0x0020 | INT CLR | interrupt clear | **0 = none**, 1 = clear interrupt
|
||||||
@ -163,8 +163,19 @@ See examples
|
|||||||
|
|
||||||
## Future
|
## Future
|
||||||
|
|
||||||
|
#### must
|
||||||
- update documentation
|
- update documentation
|
||||||
- do unit test
|
- compare DS18B20?
|
||||||
- add more examples for the **ALERT**
|
- test more
|
||||||
-
|
- negative temperatures
|
||||||
|
|
||||||
|
#### should
|
||||||
|
- do unit test
|
||||||
|
- check for optimizations
|
||||||
|
|
||||||
|
#### could
|
||||||
|
- add examples
|
||||||
|
- for the **ALERT**
|
||||||
|
- multi sensor
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/RobTillaart/MCP9808_RT.git"
|
"url": "https://github.com/RobTillaart/MCP9808_RT.git"
|
||||||
},
|
},
|
||||||
"version": "0.2.1",
|
"version": "0.2.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"frameworks": "arduino",
|
"frameworks": "arduino",
|
||||||
"platforms": "*",
|
"platforms": "*",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
name=MCP9808_RT
|
name=MCP9808_RT
|
||||||
version=0.2.1
|
version=0.2.2
|
||||||
author=Rob Tillaart <rob.tillaart@gmail.com>
|
author=Rob Tillaart <rob.tillaart@gmail.com>
|
||||||
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
|
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
|
||||||
sentence=Arduino Library for I2C MCP9808 temperature sensor
|
sentence=Arduino Library for I2C MCP9808 temperature sensor
|
||||||
|
@ -1,22 +1,10 @@
|
|||||||
//
|
//
|
||||||
// FILE: mcp9808.cpp
|
// FILE: mcp9808.cpp
|
||||||
// AUTHOR: Rob Tillaart
|
// AUTHOR: Rob Tillaart
|
||||||
// VERSION: 0.2.1
|
// VERSION: 0.2.2
|
||||||
// PURPOSE: Arduino Library for I2C mcp9808 temperature sensor
|
// PURPOSE: Arduino Library for I2C mcp9808 temperature sensor
|
||||||
// DATE: 2020-05-03
|
// DATE: 2020-05-03
|
||||||
// URL: https://github.com/RobTillaart/MCP9808_RT
|
// URL: https://github.com/RobTillaart/MCP9808_RT
|
||||||
//
|
|
||||||
// HISTORY:
|
|
||||||
// 0.1.0 2020-05-03 initial version
|
|
||||||
// 0.1.1 2020-11-12 refactor
|
|
||||||
// 0.1.2 2020-11-16 removed hasAlert, removed setAlertPin,
|
|
||||||
// added 2 alert examples, refactor low level
|
|
||||||
// 0.1.3 2021-01-01 Arduino-ci + unit test
|
|
||||||
// 0.1.4 2021-11-08 update build-CI, badges
|
|
||||||
// default offset for offset
|
|
||||||
// default Wire for I2C bus - setAddress()
|
|
||||||
// 0.2.0 2021-11-19 fix #7 negative temperature
|
|
||||||
// 0.2.1 2021-12-21 update library.json, license, minor edits
|
|
||||||
|
|
||||||
|
|
||||||
#include "mcp9808.h"
|
#include "mcp9808.h"
|
||||||
@ -33,16 +21,16 @@
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
0000 = RFU, Reserved for Future Use (Read-Only register)
|
0000 = RFU, Reserved for Future Use (Read-Only register)
|
||||||
0001 = Configuration register (CONFIG)
|
0001 = Configuration register (CONFIG)
|
||||||
0010 = Alert Temperature Upper Boundary Trip register (TUPPER)
|
0010 = Alert Temperature Upper Boundary Trip register (TUPPER)
|
||||||
0011 = Alert Temperature Lower Boundary Trip register (TLOWER)
|
0011 = Alert Temperature Lower Boundary Trip register (TLOWER)
|
||||||
0100 = Critical Temperature Trip register (TCRIT)
|
0100 = Critical Temperature Trip register (TCRIT)
|
||||||
0101 = Temperature register (TA)
|
0101 = Temperature register (TA)
|
||||||
0110 = Manufacturer ID register
|
0110 = Manufacturer ID register
|
||||||
0111 = Device ID/Revision register
|
0111 = Device ID/Revision register
|
||||||
1000 = Resolution register
|
1000 = Resolution register
|
||||||
1xxx = Reserved(1)
|
1xxx = Reserved(1)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -195,7 +183,7 @@ uint16_t MCP9808::getRFU()
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// PRIVATE
|
// PRIVATE
|
||||||
//
|
//
|
||||||
void MCP9808::writeFloat(uint8_t reg, float f)
|
void MCP9808::writeFloat(uint8_t reg, float f)
|
||||||
{
|
{
|
||||||
@ -214,7 +202,7 @@ float MCP9808::readFloat(uint8_t reg)
|
|||||||
{
|
{
|
||||||
_status = (val & 0xE000) >> 13;
|
_status = (val & 0xE000) >> 13;
|
||||||
}
|
}
|
||||||
if (val & 0x1000) // negative value
|
if (val & 0x1000) // negative value
|
||||||
{
|
{
|
||||||
return ((val & 0x0FFF) * 0.0625) - 256.0;
|
return ((val & 0x0FFF) * 0.0625) - 256.0;
|
||||||
}
|
}
|
||||||
@ -224,7 +212,7 @@ float MCP9808::readFloat(uint8_t reg)
|
|||||||
|
|
||||||
void MCP9808::writeReg8(uint8_t reg, uint8_t value)
|
void MCP9808::writeReg8(uint8_t reg, uint8_t value)
|
||||||
{
|
{
|
||||||
if (reg > MCP9808_RES) return; // see p.16
|
if (reg > MCP9808_RES) return; // see p.16
|
||||||
Wire.beginTransmission(_address);
|
Wire.beginTransmission(_address);
|
||||||
Wire.write(reg);
|
Wire.write(reg);
|
||||||
Wire.write(value);
|
Wire.write(value);
|
||||||
@ -234,7 +222,7 @@ void MCP9808::writeReg8(uint8_t reg, uint8_t value)
|
|||||||
|
|
||||||
uint8_t MCP9808::readReg8(uint8_t reg)
|
uint8_t MCP9808::readReg8(uint8_t reg)
|
||||||
{
|
{
|
||||||
if (reg > MCP9808_RES) return 0; // see p.16
|
if (reg > MCP9808_RES) return 0; // see p.16
|
||||||
Wire.beginTransmission(_address);
|
Wire.beginTransmission(_address);
|
||||||
Wire.write(reg);
|
Wire.write(reg);
|
||||||
Wire.endTransmission();
|
Wire.endTransmission();
|
||||||
@ -245,18 +233,18 @@ uint8_t MCP9808::readReg8(uint8_t reg)
|
|||||||
|
|
||||||
void MCP9808::writeReg16(uint8_t reg, uint16_t value)
|
void MCP9808::writeReg16(uint8_t reg, uint16_t value)
|
||||||
{
|
{
|
||||||
if (reg > MCP9808_RES) return; // see p.16
|
if (reg > MCP9808_RES) return; // see p.16
|
||||||
Wire.beginTransmission(_address);
|
Wire.beginTransmission(_address);
|
||||||
Wire.write(reg);
|
Wire.write(reg);
|
||||||
Wire.write(value >> 8); // hi byte
|
Wire.write(value >> 8); // hi byte
|
||||||
Wire.write(value & 0xFF); // lo byte
|
Wire.write(value & 0xFF); // lo byte
|
||||||
Wire.endTransmission();
|
Wire.endTransmission();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint16_t MCP9808::readReg16(uint8_t reg)
|
uint16_t MCP9808::readReg16(uint8_t reg)
|
||||||
{
|
{
|
||||||
if (reg > MCP9808_RES) return 0; // see p.16
|
if (reg > MCP9808_RES) return 0; // see p.16
|
||||||
Wire.beginTransmission(_address);
|
Wire.beginTransmission(_address);
|
||||||
Wire.write(reg);
|
Wire.write(reg);
|
||||||
Wire.endTransmission();
|
Wire.endTransmission();
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
//
|
//
|
||||||
// FILE: mcp9808.h
|
// FILE: mcp9808.h
|
||||||
// AUTHOR: Rob Tillaart
|
// AUTHOR: Rob Tillaart
|
||||||
// VERSION: 0.2.1
|
// VERSION: 0.2.2
|
||||||
// PURPOSE: Arduino Library for I2C mcp9808 temperature sensor
|
// PURPOSE: Arduino Library for I2C mcp9808 temperature sensor
|
||||||
// DATE: 2020-05-03
|
// DATE: 2020-05-03
|
||||||
// URL: https://github.com/RobTillaart/MCP9808_RT
|
// URL: https://github.com/RobTillaart/MCP9808_RT
|
||||||
@ -12,16 +12,16 @@
|
|||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include "Wire.h"
|
#include "Wire.h"
|
||||||
|
|
||||||
// VALID ADDRESSES,
|
// VALID ADDRESSES,
|
||||||
// max 8 sensors on one bus
|
// max 8 sensors on one bus
|
||||||
// 24..31 == 0x18..0x1F
|
// 24..31 == 0x18..0x1F
|
||||||
|
|
||||||
|
|
||||||
#define MCP9808_LIB_VERSION (F("0.2.1"))
|
#define MCP9808_LIB_VERSION (F("0.2.2"))
|
||||||
|
|
||||||
|
|
||||||
// CONFIGURATION REGISTER MASKS
|
// CONFIGURATION REGISTER MASKS
|
||||||
// check the datasheet for exact usage
|
// check the datasheet for exact usage
|
||||||
#define MCP9808_THYSTERESIS 0x0600
|
#define MCP9808_THYSTERESIS 0x0600
|
||||||
#define MCP9808_SHUTDOWN 0x0100
|
#define MCP9808_SHUTDOWN 0x0100
|
||||||
#define MCP9808_CRIT_LOCK 0x0080
|
#define MCP9808_CRIT_LOCK 0x0080
|
||||||
@ -38,7 +38,7 @@ class MCP9808
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
#if defined(ESP8266) || defined(ESP32)
|
#if defined(ESP8266) || defined(ESP32)
|
||||||
// dataPin and clockPin can be used for ESP8266
|
// dataPin and clockPin can be used for ESP8266
|
||||||
MCP9808(const uint8_t address, const uint8_t dataPin = 255, const uint8_t clockPin = 255);
|
MCP9808(const uint8_t address, const uint8_t dataPin = 255, const uint8_t clockPin = 255);
|
||||||
#else
|
#else
|
||||||
MCP9808(const uint8_t address);
|
MCP9808(const uint8_t address);
|
||||||
@ -61,8 +61,8 @@ public:
|
|||||||
float getOffset();
|
float getOffset();
|
||||||
float getTemperature();
|
float getTemperature();
|
||||||
|
|
||||||
// getStatus() returns 0..7
|
// getStatus() returns 0..7
|
||||||
// to get latest status, getTemperature() must be called first
|
// to get latest status, getTemperature() must be called first
|
||||||
uint8_t getStatus();
|
uint8_t getStatus();
|
||||||
|
|
||||||
void setResolution(uint8_t resolution = 3);
|
void setResolution(uint8_t resolution = 3);
|
||||||
@ -72,13 +72,13 @@ public:
|
|||||||
uint8_t getDeviceID();
|
uint8_t getDeviceID();
|
||||||
uint8_t getRevision();
|
uint8_t getRevision();
|
||||||
|
|
||||||
// Reserved Register, not used
|
// Reserved Register, not used
|
||||||
uint16_t getRFU();
|
uint16_t getRFU();
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
float _offset = 0;
|
float _offset = 0;
|
||||||
uint8_t _status = 0; // 0..7
|
uint8_t _status = 0; // 0..7
|
||||||
uint8_t _address;
|
uint8_t _address;
|
||||||
TwoWire* _wire;
|
TwoWire* _wire;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user