mcp960x - Driver for MCP9600/MCP9601, thermocouple EMF to temperature converter

group mcp960x

ESP-IDF driver for MCP960X/L0X/RL0X Thermocouple EMF to Temperature Converter.

Copyright (c) 2020 Ruslan V. Uss unclerus@gmail.com

BSD Licensed as described in the file LICENSE

Defines

MCP960X_ADDR_BASE

Basic I2C address.

Device support 8 addresses, ranging from 0x60 to 0x67.

MCP960X_ADDR_DEFAULT

Default I2C address (ADDR pin is connected to VDD or floating).

MCP960X_FILTER_OFF
MCP960X_FILTER_MAX

Enums

enum mcp960x_thermocouple_t

Thermocouple type.

Values:

enumerator MCP960X_TYPE_K

default

enumerator MCP960X_TYPE_J
enumerator MCP960X_TYPE_T
enumerator MCP960X_TYPE_N
enumerator MCP960X_TYPE_S
enumerator MCP960X_TYPE_E
enumerator MCP960X_TYPE_B
enumerator MCP960X_TYPE_R
enum mcp960x_adc_resolution_t

ADC measurement resolution.

Values:

enumerator MCP960X_ADC_RES_18

18 bits / 2 uV, 320 ms, default

enumerator MCP960X_ADC_RES_16

16 bits / 8 uV, 80 ms

enumerator MCP960X_ADC_RES_14

14 bits / 32 uV, 20 ms

enumerator MCP960X_ADC_RES_12

12 bits / 128 uV, 5 ms

enum mcp960x_burst_samples_t

Number of temperature samples in burst mode.

Values:

enumerator MCP960X_SAMPLES_1

default

enumerator MCP960X_SAMPLES_2
enumerator MCP960X_SAMPLES_4
enumerator MCP960X_SAMPLES_8
enumerator MCP960X_SAMPLES_16
enumerator MCP960X_SAMPLES_32
enumerator MCP960X_SAMPLES_64
enumerator MCP960X_SAMPLES_128
enum mcp960x_mode_t

Operational mode.

Values:

enumerator MCP960X_MODE_NORMAL

default

enumerator MCP960X_MODE_SHUTDOWN
enumerator MCP960X_MODE_BURST
enum mcp960x_tc_resolution_t

Cold-Junction/Ambient sensor resolution.

Values:

enumerator MCP960X_TC_RES_0_0625

0.0625°C, conversion time: 250 ms

enumerator MCP960X_TC_RES_0_25

0.25°C, conversion time: 63 ms

enum mcp960x_status_t

Device status.

Values:

enumerator MCP960X_OK

Device is functioning normally.

enumerator MCP960X_OPEN_CIRCUIT

Open circuit detected on thermocouple input (MCP9601 only)

enumerator MCP960X_SHORT_CIRCUIT

Short circuit detected on thermocouple input (MCP9601 only)

enum mcp960x_alert_t

Alert.

Values:

enumerator MCP960X_ALERT_1
enumerator MCP960X_ALERT_2
enumerator MCP960X_ALERT_3
enumerator MCP960X_ALERT_4
enum mcp960x_alert_mode_t

Alert mode.

Values:

enumerator MCP960X_ALERT_DISABLED

Alert disabled.

enumerator MCP960X_ALERT_COMP

Comparator mode.

enumerator MCP960X_ALERT_INT

Interrupt mode.

enum mcp960x_alert_level_t

Alert output active level.

Values:

enumerator MCP960X_ACTIVE_LOW

Active-low.

enumerator MCP960X_ACTIVE_HIGH

Active-high.

enum mcp960x_alert_temp_dir_t

Alert temperature direction.

Values:

enumerator MCP960X_FALLING

Alert limit for falling or cooling temperatures.

enumerator MCP960X_RISING

Alert limit for rising or heating temperatures.

enum mcp960x_alert_source_t

Alert monitoring source.

Values:

enumerator MCP960X_ALERT_SRC_TH

Alert monitor for thermocouple temperature TH.

enumerator MCP960X_ALERT_SRC_TC

Alert monitor for cold-junction sensor TC.

Functions

esp_err_t mcp960x_init_desc(mcp960x_t *dev, uint8_t addr, i2c_port_t port, gpio_num_t sda_gpio, gpio_num_t scl_gpio)

Initialize device descriptor.

Parameters:
  • dev – Device descriptor

  • addr – Device I2C address

  • port – I2C port

  • sda_gpio – SDA GPIO

  • scl_gpio – SCL GPIO

Returns:

ESP_OK on success

esp_err_t mcp960x_free_desc(mcp960x_t *dev)

Free device descriptor.

Parameters:

dev – Device descriptor

Returns:

ESP_OK on success

esp_err_t mcp960x_init(mcp960x_t *dev)

Init device.

Read device HW ID and revision

Parameters:

dev – Device descriptor

Returns:

ESP_OK on success

esp_err_t mcp960x_set_sensor_config(mcp960x_t *dev, mcp960x_thermocouple_t th, uint8_t filter)

Setup thermocouple parameters.

Parameters:
  • dev – Device descriptor

  • th – Thermocouple type

  • filter – Digital filtering level, 0..MCP960X_FILTER_MAX

Returns:

ESP_OK on success

esp_err_t mcp960x_get_sensor_config(mcp960x_t *dev, mcp960x_thermocouple_t *th, uint8_t *filter)

Get thermocouple parameters.

Parameters:
  • dev – Device descriptor

  • th[out] Thermocouple type, NULL-able

  • filter[out] Digital filtering level, 0..MCP960X_FILTER_MAX, NULL-able

Returns:

ESP_OK on success

esp_err_t mcp960x_set_device_config(mcp960x_t *dev, mcp960x_mode_t mode, mcp960x_burst_samples_t bs, mcp960x_adc_resolution_t adc_res, mcp960x_tc_resolution_t tc_res)

Set device configuration.

Parameters:
  • dev – Device descriptor

  • mode – Operation mode

  • bs – Number of temperature samples in burst mode

  • adc_res – ADC measurement resolution

  • tc_res – Cold-Junction/Ambient sensor resolution

Returns:

ESP_OK on success

esp_err_t mcp960x_get_device_config(mcp960x_t *dev, mcp960x_mode_t *mode, mcp960x_burst_samples_t *bs, mcp960x_adc_resolution_t *adc_res, mcp960x_tc_resolution_t *tc_res)

Get device configuration.

Parameters:
  • dev – Device descriptor

  • mode[out] Operation mode, NULL-able

  • bs[out] Number of temperature samples in burst mode, NULL-able

  • adc_res[out] ADC measurement resolution, NULL-able

  • tc_res[out] Cold-Junction/Ambient sensor resolution, NULL-able

Returns:

ESP_OK on success

esp_err_t mcp960x_set_mode(mcp960x_t *dev, mcp960x_mode_t mode)

Switch device operation mode.

Parameters:
  • dev – Device descriptor

  • mode – Operation mode

Returns:

ESP_OK on success

esp_err_t mcp960x_get_raw_adc_data(mcp960x_t *dev, int32_t *data)

Get raw ADC data.

Parameters:
  • dev – Device descriptor

  • data[out] Raw ADC data

Returns:

ESP_OK on success

esp_err_t mcp960x_get_thermocouple_temp(mcp960x_t *dev, float *t)

Get thermocouple temperature.

Returns cold-junction compensated and error-corrected thermocouple temperature

Parameters:
  • dev – Device descriptor

  • t[out] Temperature, degrees Celsius

Returns:

ESP_OK on success

esp_err_t mcp960x_get_delta_temp(mcp960x_t *dev, float *t)

Get thermocouple junctions delta temperature.

Returns error corrected thermocouple hot-junction temperature without the cold-junction compensation

Parameters:
  • dev – Device descriptor

  • t[out] Temperature, degrees Celsius

Returns:

ESP_OK on success

esp_err_t mcp960x_get_ambient_temp(mcp960x_t *dev, float *t)

Get cold-junction/ambient temperature.

Parameters:
  • dev – Device descriptor

  • t[out] Temperature, degrees Celsius

Returns:

ESP_OK on success

esp_err_t mcp960x_get_status(mcp960x_t *dev, bool *temp_ready, bool *burst_ready, mcp960x_status_t *status, bool *alert1, bool *alert2, bool *alert3, bool *alert4)

Get device status.

Parameters:
  • dev – Device descriptor

  • temp_ready[out] Temperature conversion complete if true, NULL-able

  • burst_ready[out] Burst conversion complete if true, NULL-able (burst mode only)

  • status[out] Device status, NULL-able

  • alert1[out] Alert 1 status, NULL-able

  • alert2[out] Alert 2 status, NULL-able

  • alert3[out] Alert 3 status, NULL-able

  • alert4[out] Alert 4 status, NULL-able

Returns:

ESP_OK on success

esp_err_t mcp960x_set_alert_config(mcp960x_t *dev, mcp960x_alert_t alert, mcp960x_alert_mode_t mode, mcp960x_alert_level_t active_lvl, mcp960x_alert_temp_dir_t temp_dir, mcp960x_alert_source_t src, float limit, uint8_t hyst)

Setup temperature alert.

Parameters:
  • dev – Device descriptor

  • alert – Alert index

  • mode – Alert mode

  • active_lvl – Alert output active level

  • temp_dir – Alert temperature direction

  • src – Alert temperature source

  • limit – Alert limit

  • hyst – Hysteresis

Returns:

ESP_OK on success

esp_err_t mcp960x_get_alert_config(mcp960x_t *dev, mcp960x_alert_t alert, mcp960x_alert_mode_t *mode, mcp960x_alert_level_t *active_lvl, mcp960x_alert_temp_dir_t *temp_dir, mcp960x_alert_source_t *src, float *limit, uint8_t *hyst)

Get temperature alert configuration.

Parameters:
  • dev – Device descriptor

  • alert – Alert index

  • mode[out] Alert mode, NULL-able

  • active_lvl[out] Alert output active level, NULL-able

  • temp_dir[out] Alert temperature direction, NULL-able

  • src[out] Alert temperature source, NULL-able

  • limit[out] Alert limit, NULL-able

  • hyst[out] Hysteresis, NULL-able

Returns:

ESP_OK on success

esp_err_t mcp960x_get_alert_status(mcp960x_t *dev, mcp960x_alert_t alert, bool *status)

Get alert status.

Parameters:
  • dev – Device descriptor

  • alert – Alert index

  • status[out] Alert status

Returns:

ESP_OK on success

esp_err_t mcp960x_clear_alert_int(mcp960x_t *dev, mcp960x_alert_t alert)

Clear alert interrupt.

Parameters:
  • dev – Device descriptor

  • alert – Alert index

Returns:

ESP_OK on success

struct mcp960x_t
#include <mcp960x.h>

Device descriptor.

Public Members

i2c_dev_t i2c_dev

I2C device descriptor.

uint8_t id

Hardware ID.

uint8_t revision

Hardware revision.