generated from LailaTheElf/rp2040_c
lots of fixes
This commit is contained in:
@@ -1,17 +1,10 @@
|
||||
#include "pico/stdlib.h"
|
||||
#include "hardware/spi.h"
|
||||
#include <cstdint>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "max31856.h"
|
||||
|
||||
// max31856 pins
|
||||
#define SPI_MAX31856 spi0
|
||||
#define SPI_MAX31856_BOUD 1E6 // 1 MHz (max31856 can go up to 5 MHz)
|
||||
#define SPI_MAX31856_SPO SPI_CPOL_0
|
||||
#define SPI_MAX31856_SPH SPI_CPHA_1
|
||||
#define SPI_MAX31856_BIT_ORDER SPI_MSB_FIRST
|
||||
#define SPI_MAX31856_BLOCK_SIZE 8
|
||||
|
||||
void max31856_init(max31856_t *max)
|
||||
{
|
||||
// init GPIO for CS
|
||||
@@ -53,7 +46,7 @@ uint8_t max31856_read8(max31856_t *max, uint8_t addr)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
uint16_t buff_tx = (addr & 0x7F)<<8;
|
||||
uint8_t buff_tx = addr & 0x7F;
|
||||
uint8_t buff_rx[] = {0, 0};
|
||||
gpio_put(max->pin_cs, 0);
|
||||
spi_read_blocking(SPI_MAX31856, buff_tx, &buff_rx[0], 2);
|
||||
@@ -68,7 +61,7 @@ uint16_t max31856_read16(max31856_t *max, uint8_t addr)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
uint16_t buff_tx = (addr & 0x7F)<<8;
|
||||
uint8_t buff_tx = addr & 0x7F;
|
||||
uint8_t buff_rx[] = {0, 0, 0};
|
||||
gpio_put(max->pin_cs, 0);
|
||||
spi_read_blocking(SPI_MAX31856, buff_tx, &buff_rx[0], 3);
|
||||
@@ -76,3 +69,63 @@ uint16_t max31856_read16(max31856_t *max, uint8_t addr)
|
||||
|
||||
return buff_rx[1]<<8 | buff_rx[2];
|
||||
}
|
||||
|
||||
uint32_t max31856_read24(max31856_t *max, uint8_t addr)
|
||||
{
|
||||
if (!(max->initilzed))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
uint8_t buff_tx = addr & 0x7F;
|
||||
uint8_t buff_rx[] = {0, 0, 0, 0};
|
||||
gpio_put(max->pin_cs, 0);
|
||||
spi_read_blocking(SPI_MAX31856, buff_tx, &buff_rx[0], 4);
|
||||
gpio_put(max->pin_cs, 1);
|
||||
|
||||
return 0 | buff_rx[1]<<16 | buff_rx[2]<<8 | buff_rx[3];
|
||||
}
|
||||
|
||||
max31856_temp_t max31856_convert_cj_temp_c(uint16_t row) {
|
||||
bool negarive = ((row & 0x8000) == 0) ? false : true;
|
||||
if (negarive) {
|
||||
row = (~row) + 1;
|
||||
}
|
||||
|
||||
max31856_temp_t temp = {
|
||||
(int16_t)(row >> 8),
|
||||
(uint8_t)(((row & 0xFF)*100)/256)
|
||||
};
|
||||
|
||||
if (negarive) {
|
||||
temp.i = -temp.i;
|
||||
}
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
max31856_temp_t max31856_convert_tc_temp_c(uint32_t row) {
|
||||
bool negarive = ((row & 0x800000) == 0) ? false : true;
|
||||
if (negarive) {
|
||||
row = (row^0xFFFFFF) + 1;
|
||||
}
|
||||
row &= 0xFFFFFF;
|
||||
|
||||
max31856_temp_t temp = {
|
||||
(int16_t)(row >> 12),
|
||||
(uint8_t)(((row & 0xFFF)*100)/0x1000)
|
||||
};
|
||||
|
||||
if (negarive) {
|
||||
temp.i = -temp.i;
|
||||
}
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
max31856_temp_t max31856_get_cj_temp_c(max31856_t *max) {
|
||||
return max31856_convert_cj_temp_c(max31856_read16(max, MAX31856_REG_CJTH));
|
||||
}
|
||||
|
||||
max31856_temp_t max31856_get_tc_temp_c(max31856_t *max) {
|
||||
return max31856_convert_tc_temp_c(max31856_read24(max, MAX31856_REG_LTCBH));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user