#ifndef _ADS1118_SPI_H
#define _ADS1118_SPI_H
#define ADS1118CS_AIN0 0xC38B
#define ADS1118CS_AIN1 0xD38B
#define ADS1118CS_AIN2 0xE38B
#define ADS1118CS_AIN3 0xF38B
#define ADS1118_CS1_SET() HAL_GPIO_WritePin(ADS1118_CS1_GPIO_Port, ADS1118_CS1_Pin, GPIO_PIN_SET)
#define ADS1118_CS1_RESET() HAL_GPIO_WritePin(ADS1118_CS1_GPIO_Port, ADS1118_CS1_Pin, GPIO_PIN_RESET)
#define ADS1118_CS2_SET() HAL_GPIO_WritePin(ADS1118_CS2_GPIO_Port, ADS1118_CS2_Pin, GPIO_PIN_SET)
#define ADS1118_CS2_RESET() HAL_GPIO_WritePin(ADS1118_CS2_GPIO_Port, ADS1118_CS2_Pin, GPIO_PIN_RESET)
#define ADS1118_CS3_SET() HAL_GPIO_WritePin(ADS1118_CS3_GPIO_Port, ADS1118_CS3_Pin, GPIO_PIN_SET)
#define ADS1118_CS3_RESET() HAL_GPIO_WritePin(ADS1118_CS3_GPIO_Port, ADS1118_CS3_Pin, GPIO_PIN_RESET)
#define ADS1118_CLK_SET() HAL_GPIO_WritePin(ADS1118_SCLK_GPIO_Port, ADS1118_SCLK_Pin, GPIO_PIN_SET)
#define ADS1118_CLK_RESET() HAL_GPIO_WritePin(ADS1118_SCLK_GPIO_Port, ADS1118_SCLK_Pin, GPIO_PIN_RESET)
#define ADS1118_MOSI_SET() HAL_GPIO_WritePin(ADS1118_DIN_GPIO_Port, ADS1118_DIN_Pin, GPIO_PIN_SET)
#define ADS1118_MOSI_RESET() HAL_GPIO_WritePin(ADS1118_DIN_GPIO_Port, ADS1118_DIN_Pin, GPIO_PIN_RESET)
#define ADS1118_DOUT_SET() HAL_GPIO_WritePin(ADS1118_DOUT_GPIO_Port, ADS1118_DOUT_Pin, GPIO_PIN_SET)
#define ADS1118_DOUT_Pin_READ() HAL_GPIO_ReadPin(ADS1118_DOUT_GPIO_Port, ADS1118_DOUT_Pin)
void ADS1118_Init(void);
void ADS1118_Main(void);
float ResToTemp_NTC(float res,uint8_t ResType);
float GetADS1118Voltage(const uint16_t config,const uint16_t config1);
#endif
#include "main.h"
#include <math.h>
#include "delay.h"
#include "ADS1118.h"
float read_vol_buf[8];
unsigned int ADS1118_ReadWrite16Bit(unsigned int cmd)
{
unsigned char i;
unsigned int read_data = 0;
for(i = 0; i < 16; i++)
{
delay_us(1);
ADS1118_CLK_SET();
delay_us(1);
read_data <<= 1;
if(ADS1118_DOUT_Pin_READ() == SET)
{
read_data |= 1;
}
if(cmd & 0x8000)
{
ADS1118_MOSI_SET();
}
else
{
ADS1118_MOSI_RESET();
}
cmd <<= 1;
ADS1118_CLK_RESET();
}
return read_data;
}
float GetADS1118Voltage(const unsigned int config_now, const unsigned int config_next)
{
float voltage_val = 0.0f;
float VoltageK = 4.096f;
unsigned int DataRx = 0;
unsigned int count = 0;
count = 10000;
while(ADS1118_DOUT_Pin_READ() == SET && --count > 0)
{
delay_us(1);
}
DataRx = ADS1118_ReadWrite16Bit(config_next);
ADS1118_ReadWrite16Bit(config_next);
switch((config_now>>9)&0x07)
{
case 0:
VoltageK = 6.144f;
break;
case 1:
VoltageK = 4.096f;
break;
case 2:
VoltageK = 2.048f;
break;
case 3:
VoltageK = 1.024f;
break;
case 4:
VoltageK = 0.512f;
break;
default:
VoltageK = 0.128f;
break;
}
if( DataRx&0x8000 ) DataRx=0;
voltage_val = DataRx * VoltageK / 65536;
voltage_val *= 2;
return voltage_val;
}
void ADS1118_Init(void)
{
ADS1118_CS2_SET();
ADS1118_CS3_SET();
ADS1118_CS1_RESET();
delay_us(1);
ADS1118_ReadWrite16Bit(ADS1118CS_AIN0);
ADS1118_CS1_SET();
ADS1118_CS2_RESET();
delay_us(1);
ADS1118_ReadWrite16Bit(ADS1118CS_AIN0);
ADS1118_CS2_SET();
if(sys_status.testFlag == 1)
{
ADS1118_CS3_RESET();
delay_us(1);
ADS1118_ReadWrite16Bit(VSEL_I_SET_Channel);
ADS1118_CS3_SET();
}
ADS1118_Main();
}
void ADS1118_Main(void)
{
unsigned int index = 0;
ADS1118_CS2_SET();
ADS1118_CS1_RESET();
delay_us(1);
ADS1118_ReadWrite16Bit(ADS1118CS_AIN0);
read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN0, ADS1118CS_AIN1);
read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN1, ADS1118CS_AIN2);
read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN2, ADS1118CS_AIN3);
read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN3, ADS1118CS_AIN0);
ADS1118_CS1_SET();
ADS1118_CS2_RESET();
delay_us(1);
ADS1118_ReadWrite16Bit(ADS1118CS_AIN0);
read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN0, ADS1118CS_AIN1);
read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN1, ADS1118CS_AIN2);
read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN2, ADS1118CS_AIN3);
read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN3, ADS1118CS_AIN0);
ADS1118_CS2_SET();
}