/**
* @file AD7124_ATY.c
*
* @param Project DEVICE_GENERAL_ATY_LIB
*
* @author ATY
*
* @copyright
* - Copyright 2017 - 2023 MZ-ATY
* - This code follows:
* - MZ-ATY Various Contents Joint Statement -
*
* https://mengze.top/MZ-ATY_VCJS
* - CC 4.0 BY-NC-SA -
*
* https://creativecommons.org/licenses/by-nc-sa/4.0/
* - Your use will be deemed to have accepted the terms of this statement.
*
* @brief Familiar functions of AD7124 for all embedded device
*
* @version
* - 1_01_230828 > ATY
* -# Preliminary version, first Release
* - 1_02_231229 > ATY
* -# add multy addr and dev->channel
* - 1_01_240111 > ATY
* -# add lock
********************************************************************************
*/
#ifndef __AD7124_ATY_C
#define __AD7124_ATY_C
#include "AD7124_ATY.h"
/******************************* For user *************************************/
/******************************************************************************/
/**
* @brief
*
* @param data
* @param len
* @param dev
* @return uint8_t
*/
uint8_t AD7124_WriteRead(uint8_t* data, uint8_t len, struct AD7124_ATY_Dev* dev)
{
uint8_t errCode = 0;
__ATY_LOCK(dev);
dev->nssSet(_ATY_HL_L);
if(dev->debugEnable == 1){
for(int i = 0; i < len; i++) dev->LOG("%02X", data[i]);
dev->LOG(" ");
}
errCode = dev->spiProcess(data, len, _ATY_RW_RW);
if(dev->debugEnable == 1){
for(int i = 0; i < len; i++) dev->LOG("%02X", data[i]);
dev->LOG(" ");
}
dev->nssSet(_ATY_HL_H);
__ATY_UNLOCK(dev);
return errCode;
}
/**
* @brief
*
* @param dev
* @return uint8_t
*/
uint8_t AD7124_Reset(struct AD7124_ATY_Dev* dev)
{
uint8_t errCode = 0, resetBuf[9] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
__ATY_LOCK(dev);
dev->syncSet(_ATY_HL_H);
// dev->delay(10);
dev->nssSet(_ATY_HL_H);
dev->delay(10);
__ATY_UNLOCK(dev);
// write more than 64 bits to reset AD7124
errCode = AD7124_WriteRead(resetBuf, 9, dev);
return errCode;
}
/**
* @brief
*
* @param id
* @param dev
* @return uint8_t
*/
uint8_t AD7124_ReadId(uint8_t* id, struct AD7124_ATY_Dev* dev)
{
uint8_t errCode = 0, groupTrans[2] = {0};
groupTrans[0] = 0x45;
groupTrans[1] = 0;
errCode = AD7124_WriteRead(groupTrans, 2, dev);
dev->id = groupTrans[1];
*id = dev->id;
if(dev->debugEnable == 1)
dev->LOG("AD7124_ID: %02X\r\n", dev->id);
return errCode;
}
/**
* @brief
*
* @param regAddr
* @param data
* @param len
* @param dev
* @return uint8_t
* @note AD7124_ERR_REG_SPI_IGNORE_ERR only for crc trans
*/
uint8_t AD7124_WriteReg(uint8_t regAddr, uint32_t data, uint8_t len, struct AD7124_ATY_Dev* dev)
{
uint8_t errCode = 0, i = 0, groupTrans[4] = {0};
groupTrans[0] = AD7124_COMM_REG_WA(regAddr);
for(i = 0; i < len; i++){
groupTrans[len - i] = data & 0xFF;
data = data >> 8;
}
if(dev->debugEnable == 1){
for(i = 0; i < len + 1; i++)
dev->LOG("%02X", groupTrans[i]);
dev->LOG(" ");
}
errCode = AD7124_WriteRead(groupTrans, len + 1, dev);
return errCode;
}
/**
* @brief
*
* @param regAddr
* @param data
* @param len
* @param dev
* @return uint8_t
*/
uint8_t AD7124_ReadReg(uint8_t regAddr, uint32_t* data, uint8_t len, struct AD7124_ATY_Dev* dev)
{
uint8_t errCode = 0, i = 0, groupTrans[4] = {0};
groupTrans[0] = AD7124_COMM_REG_RA(regAddr);
errCode = AD7124_WriteRead(groupTrans, len + 1, dev);
if(len == 1)
*data = groupTrans[1];
else if(len == 2)
*data = (groupTrans[1] + (groupTrans[2] << 8));
else if(len == 3)
*data = (groupTrans[1] + (groupTrans[2] << 8) + (groupTrans[3] << 16));
if(dev->debugEnable == 1){
for(i = 0; i < len + 1; i++)
dev->LOG("%X", data);
dev->LOG(" ");
}
return errCode;
}
/**
* @brief
*
* @param data
* @param dev
* @return uint8_t
*/
uint8_t AD7124_ReadData(uint8_t* data, struct AD7124_ATY_Dev* dev)
{
uint8_t errCode = 0, i = 0;
data[0] = AD7124_COMM_REG_RA(AD7124_DATA_REG);
errCode = AD7124_WriteRead(data, 5, dev);
if(dev->debugEnable == 1){
dev->LOG("Data: 0x");
for(i = 0; i < 5; i++)
dev->LOG("%02X", data[i]);
dev->LOG(" ");
}
return errCode;
}
/**
* @brief
*
* @param status
* @param dev
* @return uint8_t
*/
uint8_t AD7124_ReadStatus(uint8_t* status, struct AD7124_ATY_Dev* dev)
{
if(AD7124_ReadReg(AD7124_STATUS_REG, (uint32_t*)status, 1, dev)){
if(dev->debugEnable == 1)
dev->LOG("AD7124_ERR: STATE %02X%02X\r\n",
status[0], status[1]);
return 1;
}
dev->delay(10);
return 0;
}
/**
* @brief
*
* @param data
* @param resolution
* @param refRes
* @param gain
* @return float
*/
float AD7124_DataToRes(uint32_t data, uint8_t resolution, float refRes, uint8_t gain)
{
uint32_t tempNum = 1;
uint8_t i = 0;
for(i = 0; i < resolution - 1; i++)
tempNum *= 2;
return (float)((((float)data - (float)tempNum) * refRes) / ((float)gain * (float)tempNum));
}
/**
* @brief
*
* @param data
* @return float
*/
float AD7124_DataToResDefault(uint32_t data)
{
return (float)((((float)data - 8388608.0f) * 5110.0f) / (16.0f * 8388608.0f));
}
/**
* @brief
*
* @param cfg
* @param dev
* @return uint8_t
*/
uint8_t AD7124_Init(struct AD7124_ATY_Cfg* cfg, struct AD7124_ATY_Dev* dev)
{
uint8_t id = 0, status[2] = {0};
dev->enSet(_ATY_HL_H);
if(AD7124_Reset(dev)){
if(dev->debugEnable == 1)
dev->LOG("AD7124_ERR: RST\r\n");
return 1;
}
if(AD7124_ReadId(&id, dev)){
if(dev->debugEnable == 1)
dev->LOG("AD7124_ERR: ID\r\n");
return 2;
}
if(AD7124_ReadStatus(status, dev)){
if(dev->debugEnable == 1)
dev->LOG("AD7124_ERR: Status\r\n");
return 3;
}
if(AD7124_Config(cfg, dev)){
if(dev->debugEnable == 1)
dev->LOG("AD7124_ERR: CFG\r\n");
return 4;
}
return 0;
}
/**
* @brief
*
* @param cfg
* @param dev
* @return uint8_t
*/
uint8_t AD7124_Config(struct AD7124_ATY_Cfg* cfg, struct AD7124_ATY_Dev* dev)
{
if(cfg->AD7124_ADC_CTRL_REG_t) AD7124_WriteReg(AD7124_ADC_CTRL_REG, cfg->AD7124_ADC_CTRL_REG_t, 2, dev);
if(cfg->AD7124_IO_CTRL1_REG_t) AD7124_WriteReg(AD7124_IO_CTRL1_REG, cfg->AD7124_IO_CTRL1_REG_t, 3, dev);
if(cfg->AD7124_IO_CTRL2_REG_t) AD7124_WriteReg(AD7124_IO_CTRL2_REG, cfg->AD7124_IO_CTRL2_REG_t, 2, dev);
if(cfg->AD7124_ERREN_REG_t) AD7124_WriteReg(AD7124_ERREN_REG, cfg->AD7124_ERREN_REG_t, 3, dev);
if(cfg->AD7124_CH0_MAP_REG_t) AD7124_WriteReg(AD7124_CH0_MAP_REG, cfg->AD7124_CH0_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH1_MAP_REG_t) AD7124_WriteReg(AD7124_CH1_MAP_REG, cfg->AD7124_CH1_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH2_MAP_REG_t) AD7124_WriteReg(AD7124_CH2_MAP_REG, cfg->AD7124_CH2_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH3_MAP_REG_t) AD7124_WriteReg(AD7124_CH3_MAP_REG, cfg->AD7124_CH3_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH4_MAP_REG_t) AD7124_WriteReg(AD7124_CH4_MAP_REG, cfg->AD7124_CH4_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH5_MAP_REG_t) AD7124_WriteReg(AD7124_CH5_MAP_REG, cfg->AD7124_CH5_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH6_MAP_REG_t) AD7124_WriteReg(AD7124_CH6_MAP_REG, cfg->AD7124_CH6_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH7_MAP_REG_t) AD7124_WriteReg(AD7124_CH7_MAP_REG, cfg->AD7124_CH7_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH8_MAP_REG_t) AD7124_WriteReg(AD7124_CH8_MAP_REG, cfg->AD7124_CH8_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH9_MAP_REG_t) AD7124_WriteReg(AD7124_CH9_MAP_REG, cfg->AD7124_CH9_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH10_MAP_REG_t) AD7124_WriteReg(AD7124_CH10_MAP_REG, cfg->AD7124_CH10_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH11_MAP_REG_t) AD7124_WriteReg(AD7124_CH11_MAP_REG, cfg->AD7124_CH11_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH12_MAP_REG_t) AD7124_WriteReg(AD7124_CH12_MAP_REG, cfg->AD7124_CH12_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH13_MAP_REG_t) AD7124_WriteReg(AD7124_CH13_MAP_REG, cfg->AD7124_CH13_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH14_MAP_REG_t) AD7124_WriteReg(AD7124_CH14_MAP_REG, cfg->AD7124_CH14_MAP_REG_t, 2, dev);
if(cfg->AD7124_CH15_MAP_REG_t) AD7124_WriteReg(AD7124_CH15_MAP_REG, cfg->AD7124_CH15_MAP_REG_t, 2, dev);
if(cfg->AD7124_CFG0_REG_t) AD7124_WriteReg(AD7124_CFG0_REG, cfg->AD7124_CFG0_REG_t, 2, dev);
if(cfg->AD7124_CFG1_REG_t) AD7124_WriteReg(AD7124_CFG1_REG, cfg->AD7124_CFG1_REG_t, 2, dev);
if(cfg->AD7124_CFG2_REG_t) AD7124_WriteReg(AD7124_CFG2_REG, cfg->AD7124_CFG2_REG_t, 2, dev);
if(cfg->AD7124_CFG3_REG_t) AD7124_WriteReg(AD7124_CFG3_REG, cfg->AD7124_CFG3_REG_t, 2, dev);
if(cfg->AD7124_CFG4_REG_t) AD7124_WriteReg(AD7124_CFG4_REG, cfg->AD7124_CFG4_REG_t, 2, dev);
if(cfg->AD7124_CFG5_REG_t) AD7124_WriteReg(AD7124_CFG5_REG, cfg->AD7124_CFG5_REG_t, 2, dev);
if(cfg->AD7124_CFG6_REG_t) AD7124_WriteReg(AD7124_CFG6_REG, cfg->AD7124_CFG6_REG_t, 2, dev);
if(cfg->AD7124_CFG7_REG_t) AD7124_WriteReg(AD7124_CFG7_REG, cfg->AD7124_CFG7_REG_t, 2, dev);
if(cfg->AD7124_FILT0_REG_t) AD7124_WriteReg(AD7124_FILT0_REG, cfg->AD7124_FILT0_REG_t, 3, dev);
if(cfg->AD7124_FILT1_REG_t) AD7124_WriteReg(AD7124_FILT1_REG, cfg->AD7124_FILT1_REG_t, 3, dev);
if(cfg->AD7124_FILT2_REG_t) AD7124_WriteReg(AD7124_FILT2_REG, cfg->AD7124_FILT2_REG_t, 3, dev);
if(cfg->AD7124_FILT3_REG_t) AD7124_WriteReg(AD7124_FILT3_REG, cfg->AD7124_FILT3_REG_t, 3, dev);
if(cfg->AD7124_FILT4_REG_t) AD7124_WriteReg(AD7124_FILT4_REG, cfg->AD7124_FILT4_REG_t, 3, dev);
if(cfg->AD7124_FILT5_REG_t) AD7124_WriteReg(AD7124_FILT5_REG, cfg->AD7124_FILT5_REG_t, 3, dev);
if(cfg->AD7124_FILT6_REG_t) AD7124_WriteReg(AD7124_FILT6_REG, cfg->AD7124_FILT6_REG_t, 3, dev);
if(cfg->AD7124_FILT7_REG_t) AD7124_WriteReg(AD7124_FILT7_REG, cfg->AD7124_FILT7_REG_t, 3, dev);
if(cfg->AD7124_OFFS0_REG_t) AD7124_WriteReg(AD7124_OFFS0_REG, cfg->AD7124_OFFS0_REG_t, 3, dev);
if(cfg->AD7124_OFFS1_REG_t) AD7124_WriteReg(AD7124_OFFS1_REG, cfg->AD7124_OFFS1_REG_t, 3, dev);
if(cfg->AD7124_OFFS2_REG_t) AD7124_WriteReg(AD7124_OFFS2_REG, cfg->AD7124_OFFS2_REG_t, 3, dev);
if(cfg->AD7124_OFFS3_REG_t) AD7124_WriteReg(AD7124_OFFS3_REG, cfg->AD7124_OFFS3_REG_t, 3, dev);
if(cfg->AD7124_OFFS4_REG_t) AD7124_WriteReg(AD7124_OFFS4_REG, cfg->AD7124_OFFS4_REG_t, 3, dev);
if(cfg->AD7124_OFFS5_REG_t) AD7124_WriteReg(AD7124_OFFS5_REG, cfg->AD7124_OFFS5_REG_t, 3, dev);
if(cfg->AD7124_OFFS6_REG_t) AD7124_WriteReg(AD7124_OFFS6_REG, cfg->AD7124_OFFS6_REG_t, 3, dev);
if(cfg->AD7124_OFFS7_REG_t) AD7124_WriteReg(AD7124_OFFS7_REG, cfg->AD7124_OFFS7_REG_t, 3, dev);
if(cfg->AD7124_GAIN0_REG_t) AD7124_WriteReg(AD7124_GAIN0_REG, cfg->AD7124_GAIN0_REG_t, 3, dev);
if(cfg->AD7124_GAIN1_REG_t) AD7124_WriteReg(AD7124_GAIN1_REG, cfg->AD7124_GAIN1_REG_t, 3, dev);
if(cfg->AD7124_GAIN2_REG_t) AD7124_WriteReg(AD7124_GAIN2_REG, cfg->AD7124_GAIN2_REG_t, 3, dev);
if(cfg->AD7124_GAIN3_REG_t) AD7124_WriteReg(AD7124_GAIN3_REG, cfg->AD7124_GAIN3_REG_t, 3, dev);
if(cfg->AD7124_GAIN4_REG_t) AD7124_WriteReg(AD7124_GAIN4_REG, cfg->AD7124_GAIN4_REG_t, 3, dev);
if(cfg->AD7124_GAIN5_REG_t) AD7124_WriteReg(AD7124_GAIN5_REG, cfg->AD7124_GAIN5_REG_t, 3, dev);
if(cfg->AD7124_GAIN6_REG_t) AD7124_WriteReg(AD7124_GAIN6_REG, cfg->AD7124_GAIN6_REG_t, 3, dev);
if(cfg->AD7124_GAIN7_REG_t) AD7124_WriteReg(AD7124_GAIN7_REG, cfg->AD7124_GAIN7_REG_t, 3, dev);
if(dev->debugEnable == 1)
dev->LOG("\r\n");
return 0;
}
/**
* @brief
*
* @param calibrateType b1111
* @param cfg
* @param dev
* @return uint8_t
* @note 0001 int full cal at mid power
0010 int zero cal at full power
0100 sys full cal
1000 sys zero cal
*/
uint8_t AD7124_Calibrate(uint8_t calibrateType, struct AD7124_ATY_Cfg* cfg, struct AD7124_ATY_Dev* dev)
{
uint32_t regTrans = 0;
AD7124_WriteReg(AD7124_OFFS0_REG, 0x800000, 3, dev);
AD7124_WriteReg(AD7124_OFFS1_REG, 0x800000, 3, dev);
AD7124_WriteReg(AD7124_OFFS2_REG, 0x800000, 3, dev);
AD7124_WriteReg(AD7124_OFFS3_REG, 0x800000, 3, dev);
AD7124_WriteReg(AD7124_OFFS4_REG, 0x800000, 3, dev);
AD7124_WriteReg(AD7124_OFFS5_REG, 0x800000, 3, dev);
AD7124_WriteReg(AD7124_OFFS6_REG, 0x800000, 3, dev);
AD7124_WriteReg(AD7124_OFFS7_REG, 0x800000, 3, dev);
if(calibrateType & AD7124_CALIBRATE_INT_FULL){
AD7124_WriteReg(AD7124_ADC_CTRL_REG, 0x0058, 2, dev); // int full cal at mid power
AD7124_ReadReg(AD7124_ADC_CTRL_REG, ®Trans, 2, dev);
dev->delay(1500); // 1300ms min
AD7124_ReadReg(AD7124_ADC_CTRL_REG, ®Trans, 2, dev);
}
if(calibrateType & AD7124_CALIBRATE_INT_ZERO){
AD7124_WriteReg(AD7124_ADC_CTRL_REG, 0x0094, 2, dev); // int zero cal at full power
AD7124_ReadReg(AD7124_ADC_CTRL_REG, ®Trans, 2, dev);
dev->delay(100); // 80ms min
AD7124_ReadReg(AD7124_ADC_CTRL_REG, ®Trans, 2, dev);
}
if(calibrateType & AD7124_CALIBRATE_SYS_FULL){
AD7124_WriteReg(AD7124_ADC_CTRL_REG, 0x00A0, 2, dev); // sys full cal
AD7124_ReadReg(AD7124_ADC_CTRL_REG, ®Trans, 2, dev);
dev->delay(100); // 80ms min
AD7124_ReadReg(AD7124_ADC_CTRL_REG, ®Trans, 2, dev);
}
if(calibrateType & AD7124_CALIBRATE_SYS_ZERO){
AD7124_WriteReg(AD7124_ADC_CTRL_REG, 0x009C, 2, dev); // sys zero cal
AD7124_ReadReg(AD7124_ADC_CTRL_REG, ®Trans, 2, dev);
dev->delay(100); // 80ms min
AD7124_ReadReg(AD7124_ADC_CTRL_REG, ®Trans, 2, dev);
}
AD7124_WriteReg(AD7124_ADC_CTRL_REG, cfg->AD7124_ADC_CTRL_REG_t, 2, dev); // detect mode
if(dev->debugEnable == 1)
dev->LOG("\r\n");
dev->delay(1);
return 0;
}
/**
* @brief
*
* @param dev
* @return uint8_t
*/
uint8_t AD7124_ReadAllReg(struct AD7124_ATY_Cfg* cfg, struct AD7124_ATY_Dev* dev)
{
uint8_t i = 0;
uint32_t* p = (uint32_t*)cfg;
if(dev->debugEnable == 1)
dev->LOG("Regs %d\r\n", (sizeof(struct AD7124_ATY_Cfg) / sizeof(uint32_t)));
for(i = 0; i < (sizeof(struct AD7124_ATY_Cfg) / sizeof(uint32_t)); i++){ // 0x00~0x38
if(dev->debugEnable == 1)
dev->LOG("Reg 0x%02X: ", i);
AD7124_ReadReg(i, (p + i), 3, dev);
if(dev->debugEnable == 1)
dev->LOG("\r\n");
}
// AD7124_ReadReg(AD7124_ADC_CTRL_REG, groupTrans, 2, dev);
if(dev->debugEnable == 1)
dev->LOG("\r\n");
return 0;
}
#endif /* __AD7124_ATY_C */
/************************************ etc *************************************/
/* init */
// void AD7124_1_NSS_SET(uint8_t level){
// if(level == _ATY_HL_L)
// GPIO_SET_L(SPI2_NSS_GPIO_Port, SPI2_NSS_Pin);
// else if(level == _ATY_HL_H)
// GPIO_SET_H(SPI2_NSS_GPIO_Port, SPI2_NSS_Pin);
// }
// void AD7124_1_EN_SET(uint8_t level){ }
// void AD7124_1_SYNC_SET(uint8_t level){ }
// uint8_t AD7124_1_SPI(uint8_t* data_t, uint16_t len, uint8_t rw){
// if(rw == _ATY_RW_RW)
// return HAL_SPI_TransmitReceive(&hspi2, (uint8_t*)data_t, (uint8_t*)data_t, len, 1000);
// return 0;
// }
// struct AD7124_ATY_Dev AD7124_ATY_Dev_1 = {
// .id = 0,
// .nssSet = AD7124_1_NSS_SET,
// .enSet = AD7124_1_EN_SET,
// .syncSet = AD7124_1_SYNC_SET,
// .spiProcess = AD7124_1_SPI,
// .delay = HAL_Delay,
// .lock = _ATY_UNLOCKED,
// .debugEnable = 0,
// .LOG = printf
// };
// struct AD7124_ATY_Cfg AD7124_ATY_Cfg_RTD4_1 = {
// .AD7124_ADC_CTRL_REG_t = 0x0480,
// .AD7124_IO_CTRL1_REG_t = 0x000400,
// // .AD7124_ERREN_REG_t = 0x06FFFF,
// .AD7124_CFG0_REG_t = 0x09E4,
// .AD7124_FILT0_REG_t = 0x0060180,
// .AD7124_GAIN0_REG_t = 0x5558CC,
// .AD7124_CH0_MAP_REG_t = 0x9211, //IC Temp
// .AD7124_CFG1_REG_t = 0x09E4,
// .AD7124_FILT1_REG_t = 0x0060180,
// .AD7124_GAIN1_REG_t = 0x05558CC,
// .AD7124_CH1_MAP_REG_t = 0x9022,
// };
// struct AD7124_ATY_Cfg AD7124_ATY_Cfg_NTC1_1 = {
// .AD7124_ADC_CTRL_REG_t = 0x0480,
// .AD7124_IO_CTRL1_REG_t = 0x002040,
// .AD7124_CFG1_REG_t = 0x09E1,
// .AD7124_FILT1_REG_t = 0x0060180,
// .AD7124_GAIN1_REG_t = 0x05558CC,
// .AD7124_CH2_MAP_REG_t = 0x90A6, // 500uA * 5.11K = 2.5Vref, 1K gain 2 max
// };
// struct AD7124_ATY_Cfg AD7124_ATY_Cfg_NTC10_1 = {
// .AD7124_ADC_CTRL_REG_t = 0x0580,
// .AD7124_CFG1_REG_t = 0x09F0,
// .AD7124_FILT1_REG_t = 0x0060180,
// .AD7124_GAIN1_REG_t = 0x5558CC,
// .AD7124_CH3_MAP_REG_t = 0x918D,
// .AD7124_CH4_MAP_REG_t = 0x91CF,
// };
// struct AD7124_ATY_Cfg AD7124_ATY_Cfg_TC_1 = {
// .AD7124_ADC_CTRL_REG_t = 0x0580,
// .AD7124_IO_CTRL2_REG_t = 0x0500,
// .AD7124_CFG1_REG_t = 0x09F7,
// .AD7124_FILT1_REG_t = 0x0060180,
// .AD7124_GAIN1_REG_t = 0x5558CC,
// .AD7124_CH5_MAP_REG_t = 0x9109,
// .AD7124_CH6_MAP_REG_t = 0x914B,
// };
/* use */
// uint8_t group_AD7124_Data[5] = {0};
// if(adInitFlag == 0){
// adInitFlag = 1;
// AD7124_Init(&AD7124_ATY_Cfg_RTD4_1, &AD7124_ATY_Dev_1);
// AD7124_Calibrate(AD7124_CALIBRATE_INT_FULL | AD7124_CALIBRATE_INT_ZERO,
// &AD7124_ATY_Cfg_RTD4_1, &AD7124_ATY_Dev_1);
// }
// AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
// AD7124_Calc(group_AD7124_Data);
// // IC Temp
// fastTempCalc = ((float)(ad7124Code - 0x800000) / 13584.0f) - 272.5f;
// // RTD4
// calcRes = AD7124_DataToRes(ad7124Code, 24, 5110.0f, 16);
// fastTempCalc = ALGO_Temp_RTD_Res_Fast(calcRes);
// aboveTempCalc = ALGO_Temp_RTD_Res_Above(calcRes);
// belowTempCalc = ALGO_Temp_RTD_Res_Below(calcRes);
// // NTC1K
// calcRes = AD7124_DataToRes(ad7124Code, 24, 5110.0f, 2);
// fastTempCalc = ALGO_ResToKelvinTemp((calcRes / 1000.0f), 1.0f, 3950);
// // NTC10K
// calcVol = (((float)ad7124Code - 8388608.0f) * 2500.0f / (1.0f * 8388608.0f));
// calcRes = ((calcVol * 10.0f) / (2500.0f - calcVol));
// fastTempCalc = ALGO_ResToKelvinTemp(calcRes, 10.0f, 3380);
// // TC
// calcVol = (((float)ad7124Code - 8388608.0f) * 2500.0f / (128.0f * 8388608.0f));
// float coldTemp = 25.0f;
// float calcVolCold = ALGO_Temp_TC_TempToVol('T', coldTemp);
// calcVol += calcVolCold;
// aboveTempCalc = ALGO_Temp_TC_VolToTemp('T', calcVol);
// belowTempCalc = ALGO_Temp_TC_VolToTemp('T', calcVol);
// fastTempCalc = aboveTempCalc;
// ALGO_Kalman1D_S kfp1D_BT[2] = {{0, 0, 1, 1, 1, 1e-7, 1e-6}, {0, 0, 1, 1, 1, 1e-7, 1e-6}};
// rcPara_t rcfp_BT[2] = {{0.02262, 0}, {0.036, 0}};
// uint8_t group_AD7124_Data[5] = {0};
// uint8_t adDetectType = 6; // 0: IC temp, 1: RTD, 2: NTC1K, 34: NTC10K, 56: TC
// uint8_t adInitFlag = 0;
// void AD7124_Calc(uint8_t* codeGroup)
// {
// if((codeGroup[4] & 0x80) != 0)
// return;
// if((codeGroup[4] & 0x0F) != adDetectType)
// return;
// uint32_t ad7124Code = (codeGroup[3] + (codeGroup[2] << 8) + (codeGroup[1] << 16));
// static uint32_t lastAd7124Code = 0;
// if(lastAd7124Code == ad7124Code)
// return;
// lastAd7124Code = ad7124Code;
// float calcVol = 0, calcRes = 0, fastTempCalc = 0, aboveTempCalc = 0, belowTempCalc = 0;
// if((codeGroup[4] & 0x0F) == 0){ // IC Temp
// fastTempCalc = ((float)(ad7124Code - 0x800000) / 13584.0f) - 272.5f;
// }
// if((codeGroup[4] & 0x0F) == 1){ // RTD4
// calcRes = AD7124_DataToRes(ad7124Code, 24, 5110.0f, 16);
// fastTempCalc = ALGO_Temp_RTD_Res_Fast(calcRes);
// aboveTempCalc = ALGO_Temp_RTD_Res_Above(calcRes);
// belowTempCalc = ALGO_Temp_RTD_Res_Below(calcRes);
// }
// if((codeGroup[4] & 0x0F) == 2){ // NTC1K
// calcRes = AD7124_DataToRes(ad7124Code, 24, 5110.0f, 2);
// fastTempCalc = ALGO_ResToKelvinTemp((calcRes / 1000.0f), 1.0f, 3950);
// }
// if(((codeGroup[4] & 0x0F) == 3) || ((codeGroup[4] & 0x0F) == 4)){ // NTC10K
// calcVol = (((float)ad7124Code - 8388608.0f) * 2500.0f / (1.0f * 8388608.0f));
// calcRes = ((calcVol * 10.0f) / (2500.0f - calcVol));
// if((codeGroup[4] & 0x0F) == 3)
// fastTempCalc = ALGO_ResToKelvinTemp(calcRes, 10.0f, 3380);
// else if((codeGroup[4] & 0x0F) == 4)
// fastTempCalc = ALGO_ResToKelvinTemp(calcRes, 10.0f, 3950);
// }
// if(((codeGroup[4] & 0x0F) == 5) || ((codeGroup[4] & 0x0F) == 6)){ // TC
// calcVol = (((float)ad7124Code - 8388608.0f) * 2500.0f / (128.0f * 8388608.0f));
// float coldTemp = 25.0f;
// float calcVolCold = ALGO_Temp_TC_TempToVol('T', coldTemp);
// calcVol += calcVolCold;
// aboveTempCalc = ALGO_Temp_TC_VolToTemp('T', calcVol);
// belowTempCalc = ALGO_Temp_TC_VolToTemp('T', calcVol);
// fastTempCalc = belowTempCalc;
// }
// float rcTemp[2] = {0};
// rcTemp[0] = rcLpFiter(&rcfp_BT[0], belowTempCalc);
// rcTemp[1] = rcLpFiter(&rcfp_BT[1], rcTemp[0]);
// if(ALGO_ABS(belowTempCalc - rcTemp[0]) > 0.1) {
// rcfp_BT[0].lVal = belowTempCalc;
// rcfp_BT[1].lVal = belowTempCalc;
// }
// float kalmanBelowTemp[2] = {0};
// kalmanBelowTemp[0] = ALGO_KalmanFilter1D(&kfp1D_BT[0], rcTemp[1]);
// kalmanBelowTemp[1] = ALGO_KalmanFilter1D(&kfp1D_BT[1], kalmanBelowTemp[0]);
// if(ALGO_ABS(kalmanBelowTemp[0] - belowTempCalc) > 0.1){
// kfp1D_BT[0].X = belowTempCalc;
// kfp1D_BT[1].X = belowTempCalc;
// kalmanBelowTemp[0] = belowTempCalc;
// kalmanBelowTemp[1] = belowTempCalc;
// }
// #define AD7124_DBG
// #ifdef AD7124_DBG
// printf("C %02d: ", (codeGroup[4] & 0x0F));
// printf("%02X%02X%02X%02X%02X ",
// codeGroup[0], codeGroup[1],
// codeGroup[2], codeGroup[3],
// codeGroup[4]);
// printf("%.09f ", calcVol);
// printf("%.09f ", calcRes);
// printf("%.09f ", fastTempCalc);
// printf("%.09f ", aboveTempCalc);
// printf("%.09f ", belowTempCalc);
// // printf("%.09f ", rcTemp[0]);
// // printf("%.09f ", rcTemp[1]);
// // printf("%.09f ", kalmanBelowTemp[0]);
// // printf("%.09f ", kalmanBelowTemp[1]);
// printf("\r\n");
// #endif
// }
// void AD7124_Detect(void)
// {
// static uint8_t lastChannel = 0;
// if(lastChannel != adDetectType){
// lastChannel = adDetectType;
// adInitFlag = 0;
// }
// switch(adDetectType)
// {
// case 0:
// case 1:
// if(adInitFlag == 0){
// adInitFlag = 1;
// AD7124_Init(&AD7124_ATY_Cfg_RTD4_1, &AD7124_ATY_Dev_1);
// AD7124_Calibrate(AD7124_CALIBRATE_INT_FULL | AD7124_CALIBRATE_INT_ZERO,
// &AD7124_ATY_Cfg_RTD4_1, &AD7124_ATY_Dev_1);
// }
// AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
// AD7124_Calc(group_AD7124_Data);
// AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
// AD7124_Calc(group_AD7124_Data);
// break;
// case 2:
// if(adInitFlag == 0){
// adInitFlag = 1;
// AD7124_Init(&AD7124_ATY_Cfg_NTC1_1, &AD7124_ATY_Dev_1);
// AD7124_Calibrate(AD7124_CALIBRATE_INT_FULL | AD7124_CALIBRATE_INT_ZERO,
// &AD7124_ATY_Cfg_NTC1_1, &AD7124_ATY_Dev_1);
// }
// AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
// AD7124_Calc(group_AD7124_Data);
// break;
// case 3:
// case 4:
// if(adInitFlag == 0){
// adInitFlag = 1;
// AD7124_Init(&AD7124_ATY_Cfg_NTC10_1, &AD7124_ATY_Dev_1);
// AD7124_Calibrate(AD7124_CALIBRATE_INT_FULL | AD7124_CALIBRATE_INT_ZERO,
// &AD7124_ATY_Cfg_NTC10_1, &AD7124_ATY_Dev_1);
// }
// AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
// AD7124_Calc(group_AD7124_Data);
// AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
// AD7124_Calc(group_AD7124_Data);
// break;
// case 5:
// case 6:
// if(adInitFlag == 0){
// adInitFlag = 1;
// AD7124_Init(&AD7124_ATY_Cfg_TC_1, &AD7124_ATY_Dev_1);
// AD7124_Calibrate(AD7124_CALIBRATE_INT_FULL | AD7124_CALIBRATE_INT_ZERO,
// &AD7124_ATY_Cfg_TC_1, &AD7124_ATY_Dev_1);
// }
// AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
// AD7124_Calc(group_AD7124_Data);
// AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
// AD7124_Calc(group_AD7124_Data);
// break;
// default:
// break;
// }
// }
/******************************************************************************/
/******************************** End Of File *********************************/