- 模块来源
采购链接:https://m.tb.cn/h.54FyFCS?tk=R4sNdA5qWuW
ADS1118 16位模数转换模块 ADC开发板/SPI通信接口
资料下载:https://www.ti.com.cn/cn/lit/ds/symlink/ads1118.pdf?ts=1695121210267&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Fproduct%252Fzh-cn%252FADS1118%253FkeyMatch%253DADS1118%2526tisearch%253Dsearch-everything%2526usecase%253DGPN-ALT
-
规格参数
工作电压:2-5.5V
工作电流:连续模式 150μA
通信方式:SPI
引脚数量:12 Pin(2.54mm间距排针)
暂时无法在飞书文档外展示此内容
产品数据手册 -
模块原理(资料讲解)
ADS1118 是一款精密、低功耗、16 位模数转换器 (ADC),提供 测量 采用超小型无引线 X2QFN-10 封装 或 VSSOP-10 封装的传感器最常见信号所需的所有功 能。ADS1118 集成了可编程增益放大器 (PGA)、电压 基准、振荡器和高精度温度传感器。这些 功能以及 2V 至 5.5V 的宽电源电压范围,使得 ADS1118 非常适合 功率受限和空间受限的传感器测量 应用。 ADS1118 数据转换速率最高可达每秒 860 次采样 (SPS)。PGA 的输入范围为 ±256mV 至 ±6.144V,能 够以高分辨率测量大信号和小信号。该器件通过输入多 路复用器 (MUX) 测量双路差分输入或四路单端输入。 高精度温度传感器用于系统级温度监控或对热电偶进行 冷结点补偿。 ADS1118 可选择以连续转换模式或单次模式运行。该 器件在单次模式下完成一次转换后自动断电。在空闲状 态下,单次模式会显著降低流耗。所有数据均通过串行 外设接口 (SPI™) 进行传输。ADS1118 的额定工作温 度范围为 -40°C 至 +125°C。 -
移植工程
我们的目标是在梁山派GD32F470上能够实现16bit模式1路ADC采集电压功能,和检查温度。首先要获取资料,查看数据手册应如何实现,再移植至我们的工程。
查看资料
(1)ADS1118是SPI协议的,首先要知道ADS1118支持的SPI模式,根据数据手册可知ADS1118位SPImode1。
(2)读取ADS1118数据,根据数据手册介绍可以知ADS1118读取数据和写入数据是同时进行的(符合SPI协议支持全双工模式),只需要配置寄存器的SS位即可启动转换,通过mode位可以设置单次模式和连续模式。
(3)读取ADS1118数据方式,根据数据手册ADS1118数据传输方式有两种模式32bit和16bit。
32bit:SPI一次性发送32位数据,既发送两次相同的寄存器配置(ADS1118 控制寄存器为16位),读取的数据也为32位,前16位为ADS1118数据寄存器的值(ADC转换的值),后16位配置的控制寄存器的值。
16bit:SPI发送一次16位的控制寄存器用于配置ADS1118,这个时候因为全双工模式这一时刻交换的数据没有用,之后拉高片选(CS)后等待DOUT下降沿(数据转换完成DOUT从高变低),在发送相同的转换寄存器配置用于交换数据,这次得到的数据真正的ADC值。
本次主要使用16bit模式进行数据交换。
(4)寄存器说明
ADS1118有两个寄存器一个是控制寄存器( Config Register)和转换寄存器(Conversion Register )
- 这两个寄存器都是16位,读写都要16位操作
控制寄存器说明
控制寄存器有16位,用于控制工作模式、输入选择、数据速率、满量程范围等。
第15位:SS,读操作时可以知道当前设备的工作状态,写1可以开始工作
第14-12位:MUX为输入多路复用器,对输入模式进行选择,如下图有八种输入模式,分别是四种差分与四种单端输入,(单端输入就是测量的数据有两个引脚,一个输出一个地。差分输入就是测量两个引脚的电压差)
MUX位既配置下图连接。
第11-9位:PGA为可编程增益放大器,设置FSR(满量程范围)。
第8位:MODE选择持续转换模式或单次转换模式。
第7-5位:DR配置数据传输速率,数据传输率越低采样数据越准。
第4位:本位选取ADC读取内部温度传感器或外部通道。
第3位:本位配置DOUT是否内部上拉,推荐使能上拉。
第2-1位:本位配置是否更新控制寄存器,推荐配置位01。
第0位:只读寄存器,总是1。
转换寄存器说明
16位转换寄存器以二进制的补码格式保存结果,其中最高位为1为负数,最高位为0为正数。
4.1 引脚选择(接线方式)
使用硬件SPI0接口。
4.2 移植步骤
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: gugugu
* 修改日期: 2022年04月19日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#include "gd32f4xx.h"
#include "SPI.h"
/******************************************************************
* 函 数 名 称:MySPI_W_SS
* 函 数 说 明:写片选脚
* 函 数 形 参:BitValue = 设置的高低电平
* 函 数 返 回:无
* 作 者:gugugu
* 备 注:无
******************************************************************/
void MySPI_W_SS(uint8_t BitValue)
{
gpio_bit_write(SPI_Port,SPI_NSS,BitValue);
}
/******************************************************************
* 函 数 名 称:MySPI_Init()
* 函 数 说 明:初始化SPI
* 函 数 形 参:BitValue = 设置的高低电平
* 函 数 返 回:无
* 作 者:gugugu
* 备 注:无
******************************************************************/
void MySPI_Init()
{
spi_parameter_struct spi_structure = {0};
rcu_periph_clock_enable(RCU_GPIO); //使能SPI_Port时钟
rcu_periph_clock_enable(RCU_SPI); //使能SPI0时钟
gpio_af_set(SPI_Port,GPIO_AF_5,SPI_SCLK);//复用SPI0_SCLK
gpio_af_set(SPI_Port,GPIO_AF_5,SPI_MOSI);//复用SPI0_MOSI
gpio_af_set(SPI_Port,GPIO_AF_5,SPI_MISO);//复用SPI0_MISO
gpio_mode_set(SPI_Port,GPIO_MODE_AF,GPIO_PUPD_NONE,SPI_SCLK);//SPI0_SCLK
gpio_mode_set(SPI_Port,GPIO_MODE_AF,GPIO_PUPD_NONE,SPI_MOSI);//SPI0_M0SI
gpio_mode_set(SPI_Port,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,SPI_NSS);//SPI0_NSS
gpio_mode_set(SPI_Port,GPIO_MODE_AF,GPIO_PUPD_NONE,SPI_MISO);//SPI0_MISO
gpio_output_options_set(SPI_Port,GPIO_OTYPE_PP,GPIO_OSPEED_25MHZ,SPI_SCLK);//SPI0_SCLK
gpio_output_options_set(SPI_Port,GPIO_OTYPE_PP,GPIO_OSPEED_25MHZ,SPI_MOSI);//SPI0_MOSI
gpio_output_options_set(SPI_Port,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,SPI_NSS);//SPI0_NSS
gpio_output_options_set(SPI_Port,GPIO_OTYPE_PP,GPIO_OSPEED_25MHZ,SPI_MISO);//SPI0_MISO
spi_structure.nss = SPI_NSS_SOFT; //软件片选
spi_structure.endian = SPI_ENDIAN_MSB;
spi_structure.prescale = SPI_PSC_128; //时钟分频120M/128=937.5K
spi_structure.device_mode = SPI_MASTER; //主机模式
spi_structure.trans_mode = SPI_TRANSMODE_FULLDUPLEX; //双线全双工
spi_structure.frame_size = SPI_FRAMESIZE_16BIT; //数据16位
spi_structure.clock_polarity_phase = SPI_CK_PL_LOW_PH_2EDGE; //SPImode1
spi_init(SPI0,&spi_structure); //初始化SPI0
spi_enable(SPI0); //使能SPI0
MySPI_W_SS(1); //拉高片选
}
/******************************************************************
* 函 数 名 称:MySPI_SwapByte
* 函 数 说 明:向从机交换16位数据,并从从机读取16位数据
* 函 数 形 参:ByteSend = 发送的16位数据
* 函 数 返 回:从机数据
* 作 者:gugugu
* 备 注:无
******************************************************************/
uint16_t MySPI_SwapByte(uint16_t ByteSend)
{
while (spi_i2s_flag_get(SPI0, SPI_FLAG_TBE) != SET); //读取发送缓冲区空标志
spi_i2s_data_transmit(SPI0, ByteSend); //发送数据
while (spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE) != SET); //读取接收缓冲区非空标志
return spi_i2s_data_receive(SPI0); //接收数据
}
/******************************************************************
* 函 数 名 称:MySPI_Start()
* 函 数 说 明:拉低片选脚开始通信
* 函 数 形 参:无
* 函 数 返 回:无
* 作 者:gugugu
* 备 注:无
******************************************************************/
void MySPI_Start()
{
MySPI_W_SS(0);
}
/******************************************************************
* 函 数 名 称:MySPI_STOP()
* 函 数 说 明:拉高片选脚结束通信
* 函 数 形 参:无
* 函 数 返 回:无
* 作 者:gugugu
* 备 注:无
******************************************************************/
void MySPI_STOP()
{
MySPI_W_SS(1);
}
SPI.h
#ifndef __SPI_H
#define __SPI_H
#include "systick.h"
//SPI 端口定义
#define SPI_Port GPIOA //SPI端口
#define SPI_NSS GPIO_PIN_4 //NSS_PIN
#define SPI_MOSI GPIO_PIN_6 //MOSI_PIN
#define SPI_MISO GPIO_PIN_7 //MOSI_PIN
#define SPI_SCLK GPIO_PIN_5 //SCLK_PINPI
#define RCU_SPI RCU_SPI0
#define RCU_GPIO RCU_GPIOA
void MySPI_W_SS(uint8_t BitValue);
void MySPI_Init();
void MySPI_Start();//拉低片选脚开始通信
void MySPI_STOP();//拉高片选脚结束通信
uint16_t MySPI_SwapByte(uint16_t ByteSend);
#endif
ADS1118.c
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: LCKFB
* 修改日期: 2022年04月19日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#include "gd32f4xx.h"
#include "ADS1118.h"
//ADS1118 supply voltage 2 - 5.5V
//analog input voltage max VDD+0.3V. VIN<VDD!!!!!
//(VDD-->3v3,PGA-->4096,)无法获得满量程ADC输出代码,这种意味着一些动态范围的丢失.
/******************************************************************
* 函 数 名 称:ADS1118_ADC_Continuous_Init
* 函 数 说 明:初始化ADS1118
* 函 数 形 参:channel = ADC外部通道选择,PGA = ADC满量程选择,SPS = ADC数据传输率选择
* 函 数 返 回:无
* 作 者:gugugu
* 备 注:连续模式使用前,调用此函数完成初始化,之后调用ADS1118_Get_ADC_Continuous_Data()
******************************************************************/
void ADS1118_ADC_Continuous_Init(uint16_t channel,uint16_t PGA,uint16_t SPS)
{
MySPI_Init();
ADS1118_ENABLE;//拉低CS开始通信
delay_us(1);
MySPI_SwapByte(ADS1118_SS_START|channel|PGA|ADS1118_Continuous_MODE
|SPS|ADS1118_Temp_MODE|ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据
delay_us(10);
ADS1118_DISABLE;//拉高CS复位ADS1118结束通信
delay_1ms(1);
}
/******************************************************************
* 函 数 名 称:ADS1118_Get_Tempture_Data()
* 函 数 说 明:单次获取ADC内部Temp温度
* 函 数 形 参:无
* 函 数 返 回:返回内部温度传感器温度
* 作 者:gugugu
* 备 注:无
******************************************************************/
float ADS1118_Get_Tempture_Data()
{
uint16_t ADC_Data = 0;
float Tempture_data= 0;
ADS1118_ENABLE;//拉低CS开始通信
delay_us(5);
ADC_Data = MySPI_SwapByte(ADS1118_SS_START|ADS1118_MUX_AIN0|ADS1118_PGA_4096|
ADS1118_Sigle_SHOT_MODE|ADS1118_DR_8SPS|ADS1118_Temp_MODE|
ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据
delay_us(5);
ADS1118_DISABLE;//拉高CS复位ADS1118结束通信
delay_1ms(1);
ADS1118_ENABLE;//拉低CS开始通信
delay_us(5);
while(gpio_input_bit_get(GPIOA,GPIO_PIN_6));//DOUT拉低ADC1118数据更新准备完毕
ADC_Data = MySPI_SwapByte(ADS1118_SS_START|ADS1118_MUX_AIN0|ADS1118_PGA_4096|
ADS1118_Sigle_SHOT_MODE|ADS1118_DR_8SPS|ADS1118_Temp_MODE|
ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据
delay_us(5);
ADS1118_DISABLE;//拉高CS复位ADS1118结束通信
if(ADC_Data&0X8000)//MSB=1
{
ADC_Data = (~ADC_Data)+1 ;
}
else Tempture_data = (ADC_Data >> 2)*0.03125;
return Tempture_data;
}
/******************************************************************
* 函 数 名 称:ADS1118_Get_ADC_SIGLE_SHOT_Data
* 函 数 说 明:单次获取AD电压值
* 函 数 形 参:channel = ADC外部通道选择,PGA = ADC满量程选择,SPS = ADC数据传输率选择
* 函 数 返 回:AD电压值
* 作 者:gugugu
* 备 注:
******************************************************************/
float ADS1118_Get_ADC_SIGLE_SHOT_Data(uint16_t channel,uint16_t PGA,uint16_t SPS)
{
uint16_t ADC_Data = 0;
float Tempture_data= 0;
ADS1118_ENABLE;//拉低CS开始通信
delay_us(15);
ADC_Data = MySPI_SwapByte(ADS1118_SS_START|channel|PGA|ADS1118_Sigle_SHOT_MODE
|SPS|ADS1118_ADC_MODE|ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据
delay_us(15);
ADS1118_DISABLE;//拉高CS复位ADS1118结束通信
delay_1ms(1);
ADS1118_ENABLE;//拉低CS开始通信
delay_us(15);
while(gpio_input_bit_get(GPIOA,GPIO_PIN_6));//DOUT拉低ADC1118数据更新准备完毕
ADC_Data = MySPI_SwapByte(ADS1118_SS_START|channel|PGA|ADS1118_Sigle_SHOT_MODE
|SPS|ADS1118_ADC_MODE|ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据
delay_us(15);
ADS1118_DISABLE;//拉高CS复位ADS1118结束通信
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;
}
/******************************************************************
* 函 数 名 称:ADS1118_Get_ADC_Continuous_Data
* 函 数 说 明:连续获取AD电压值
* 函 数 形 参:channel = ADC外部通道选择,PGA = ADC满量程选择,SPS = ADC数据传输率选择
* 函 数 返 回:AD电压值
* 作 者:gugugu
* 备 注:使用此函数前调用ADS1118_ADC_Continuous_Init()
******************************************************************/
float ADS1118_Get_ADC_Continuous_Data(uint16_t channel,uint16_t PGA,uint16_t SPS)
{
uint16_t ADC_Data = 0;
float Tempture_data= 0;
ADS1118_ENABLE;//拉低CS开始通信
delay_us(1);
while(gpio_input_bit_get(GPIOA,GPIO_PIN_6));//DOUT拉低ADC1118数据更新准备完毕
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);
ADS1118_DISABLE;//拉高CS复位ADS1118结束通信
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;
}
ADS1118.h
#ifndef __ADS1118_H
#define __ADS1118_H
#include "SPI.h"
#include "systick.h"
#define ADS1118_ENABLE MySPI_Start() //PULL DOWM CS START ADC
#define ADS1118_DISABLE MySPI_STOP() //PULL UP CS STOP ADC
#define ADS1118_SS_START 0X8000 //0--》NO effect,1-->start ADC
#define ADS1118_MUX_AIN0_AIN1 0X0000 //000 = AINP is AIN0 and AINN is AIN1 (default)
#define ADS1118_MUX_AIN0_AIN3 0x1000 //001 = AINP is AIN0 and AINN is AIN3
#define ADS1118_MUX_AIN1_AIN3 0X2000 //010 = AINP is AIN1 and AINN is AIN3
#define ADS1118_MUX_AIN2_AIN3 0X3000 //011 = AINP is AIN2 and AINN is AIN3
#define ADS1118_MUX_AIN0 0X4000 //100 = AINP is AIN0 and AINN is GND
#define ADS1118_MUX_AIN1 0X5000 //101 = AINP is AIN1 and AINN is GND
#define ADS1118_MUX_AIN2 0X6000 //110 = AINP is AIN2 and AINN is GND
#define ADS1118_MUX_AIN3 0X7000 //111 = AINP is AIN3 and AINN is GND
#define ADS1118_PGA_6144 0X0000 //000 = FSR is ±6.144 V
#define ADS1118_PGA_4096 0X0200 //001 = FSR is ±4.096 V
#define ADS1118_PGA_2048 0X0400 //010 = FSR is ±2.048 V (default)
#define ADS1118_PGA_1024 0X0600 //011 = FSR is ±1.024 V
#define ADS1118_PGA_0512 0X0800 //100 = FSR is ±0.512 V
#define ADS1118_PGA_0256 0X0A00 //101 = FSR is ±0.256 V
#define ADS1118_Continuous_MODE 0X0000 //0->Continuous
#define ADS1118_Sigle_SHOT_MODE 0X0100 //1->SIGNEL ADC
#define ADS1118_DR_8SPS 0X0000 //000 = 8 SPS
#define ADS1118_DR_16SPS 0X0020 //001 = 16 SPS
#define ADS1118_DR_32SPS 0X0040 //010 = 32 SPS
#define ADS1118_DR_64SPS 0X0060 //011 = 64 SPS
#define ADS1118_DR_128SPS 0X0080 //100 = 128 SPS (default)
#define ADS1118_DR_250SPS 0X00A0 //101 = 250 SPS
#define ADS1118_DR_470SPS 0X00C0 //110 = 475 SPS
#define ADS1118_DR_860SPS 0X00E0 //111 = 860 SPS
#define ADS1118_ADC_MODE 0x0000 //ADC MODE
#define ADS1118_Temp_MODE 0X0010 //Temperature sensor mode
#define ADS1118_PUUP_DIS 0X0000 //inside pullup disabled
#define ADS1118_PUUP_EN 0x0008 //inside pullup enabled
#define ADS1118_NOP_UPDATA 0X0002 //update the Config register
void ADS1118_ADC_Continuous_Init(uint16_t channel,uint16_t PGA,uint16_t SPS);
void ADS1118_Temp_Init();
float ADS1118_Get_Tempture_Data();
float ADS1118_Get_ADC_SIGLE_SHOT_Data(uint16_t channel,uint16_t PGA,uint16_t SPS);
float ADS1118_Get_ADC_Continuous_Data(uint16_t channel,uint16_t PGA,uint16_t SPS);
#endif
- 移植验证
编写的main主函数中,编写如下
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: LCKFB
* 修改日期: 2022年04月19日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#include "gd32f4xx.h"
#include "systick.h"
#include "stdio.h"
#include "UART.h"
#include "ADS1118.h"
#include "SPI.h"
int main(void)
{
float AD_value;
nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); // 优先级分组
systick_config(); //滴答定时器初始化 1us
MySPI_Init(); //初始化spi
ADS1118_ADC_Continuous_Init(ADS1118_MUX_AIN0 ,ADS1118_PGA_4096,ADS1118_DR_8SPS);
usart_gpio_config(115200);
while(1)
{
AD_value = ADS1118_Get_ADC_SIGLE_SHOT_Data(ADS1118_MUX_AIN0 ,ADS1118_PGA_4096,ADS1118_DR_8SPS);
//AD_value = ADS1118_Get_Tempture_Data();
printf("%f",AD_value);
delay_1ms(100);
}
}
案例现象1:
烧录代码,使用debug模式,成功读取返回温度值。
案例现象2:
烧录代码,使用debug模式,成功读取返回单端电压值。
案例现象3:
烧录代码,使用debug模式,成功读取返回差分电压值。
案例现象4:
烧录代码,使用debug模式,连续模式成功读取返回单端电压值。
!](https://img-blog.csdnimg.cn/74802e778a894c228ab5e38b66332ef2.png)