初级会员
- 积分
- 119
- 金钱
- 119
- 注册时间
- 2022-10-12
- 在线时间
- 33 小时
|
楼主 |
发表于 2024-1-24 13:06:25
|
显示全部楼层
void ADS1118_ADC_Init(uint16_t channel,uint16_t PGA,uint16_t SPS)
{
MySPI_Init();
GPIO_ResetBits(GPIOA,GPIO_Pin_4);//拉低CS开始通信
delay_us(5);
MySPI_SwapByte(ADS1118_SS_START|channel|PGA|ADS1118_Continuous_MODE|SPS|ADS1118_Temp_MODE|ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据 初始化
delay_us(10);
GPIO_SetBits(GPIOA,GPIO_Pin_4);//拉高CS停止通信
delay_ms(1);
}
/*********************************************************************
* ADS1118_Get_ADC_Continuous_Data
* 连续模式获取ADC数据,使用前初始化 ADS1118_ADC_Init()
* 单位V
*********************************************************************/
float ADS1118_Get_ADC_Continuous_Data(uint16_t channel,uint16_t PGA,uint16_t SPS)
{
uint16_t ADC_Data = 0;
float Tempture_data= 0;
GPIO_ResetBits(GPIOA,GPIO_Pin_4);//拉低CS开始通信
delay_us(1);
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6));//DOUT拉低ADS1118数据更新准备完毕
ADC_Data = MySPI_SwapByte(ADS1118_SS_START|channel|PGA|ADS1118_Continuous_MODE|SPS|ADS1118_ADC_MODE|ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据
delay_us(1);
GPIO_SetBits(GPIOA,GPIO_Pin_4);//拉高CS停止通信
if(ADC_Data&0X8000)//MSB=1
{
ADC_Data = (~ADC_Data)+1 ;
if(PGA == ADS1118_PGA_6144)Tempture_data=ADC_Data*0.1875;
else if(PGA == ADS1118_PGA_6144)Tempture_data=ADC_Data*0.1875;
else if(PGA == ADS1118_PGA_4096)Tempture_data=ADC_Data*0.125;
else if(PGA == ADS1118_PGA_2048)Tempture_data=ADC_Data*0.0625;
else if(PGA == ADS1118_PGA_1024)Tempture_data=ADC_Data*0.03125;
else if(PGA == ADS1118_PGA_0512)Tempture_data=ADC_Data*0.015625;
else Tempture_data=ADC_Data*0.0078125;
return Tempture_data;
}
else if(PGA == ADS1118_PGA_6144)Tempture_data=ADC_Data*0.1875;
else if(PGA == ADS1118_PGA_6144)Tempture_data=ADC_Data*0.1875;
else if(PGA == ADS1118_PGA_4096)Tempture_data=ADC_Data*0.125;
else if(PGA == ADS1118_PGA_2048)Tempture_data=ADC_Data*0.0625;
else if(PGA == ADS1118_PGA_1024)Tempture_data=ADC_Data*0.03125;
else if(PGA == ADS1118_PGA_0512)Tempture_data=ADC_Data*0.015625;
else Tempture_data=ADC_Data*0.0078125;
return Tempture_data/1000;
}
void ads_print()
{
float ads_value=0;
ads_value=ADS1118_Get_ADC_Continuous_Data(ADS1118_MUX_AIN3,ADS1118_PGA_4096,ADS1118_DR_128SPS);
printf("单通道AIN3采集电压%.3fV\r\n",ads_value);
delay_ms(2000);
}
这是我ADC芯片代码 |
|