lots of fixes

This commit is contained in:
2025-11-24 16:57:26 +01:00
parent 55a1469b99
commit 9e771ba4fc
5 changed files with 167 additions and 71 deletions

View File

@@ -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));
}