#include "ADS1220.h"
void ADS1220SendByte(u8 Byte)
{
//HAL_SPI_Transmit(&hspi1,&Byte,1,10);
SPI2_ReadWriteByte(Byte);
}
unsigned char ADS1220ReceiveByte()
{
unsigned char SData = 0xff ,Result = 0;
Result = SPI2_ReadWriteByte(SData);
//HAL_SPI_TransmitReceive(&hspi1,&SData,&Result,1,10);
return Result;
}
/*
******************************************************************************
higher level functions
*/
void ADS1220ReadRegister(int StartAddress, int NumRegs, unsigned * pData)
{
int i;
/* send the command byte */
ADS1220SendByte(ADS1220_CMD_RREG | (((StartAddress<<2) & 0x0c) |((NumRegs-1)&0x03)));
/* get the register content */
for (i=0; i< NumRegs; i++)
{
*pData++ = ADS1220ReceiveByte();
}
return;
}
void ADS1220WriteRegister(int StartAddress, int NumRegs, unsigned char * pData)
{
int i;
/* send the command byte */
ADS1220SendByte(ADS1220_CMD_WREG | (((StartAddress<<2) & 0x0c) |((NumRegs-1)&0x03)));
/* send the data bytes */
for (i=0; i< NumRegs; i++)
{
ADS1220SendByte(*pData++);
}
return;
}
void ADS1220SendResetCommand()
{
/* send the command byte */
ADS1220SendByte(ADS1220_CMD_RESET);
return;
}
void ADS1220SendStartCommand()
{
/* send the command byte */
ADS1220SendByte(ADS1220_CMD_SYNC);
return;
}
void ADS1220SendShutdownCommand()
{
/* send the command byte */
ADS1220SendByte(ADS1220_CMD_SHUTDOWN);
return;
}
/* ADS1220 Initial Configuration */
unsigned int test[4];
void ADS1220Init(void)
{
uint8_t ch_cfg[4]={ADS1220_MUX_3_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS, ADS1220_CC|ADS1220_DR_45, ADS1220_VREF_SUPPLY|ADS1220_PSW_SW_OFF, ADS1220_IDAC1_OFF|ADS1220_IDAC2_OFF};
ADS1220SendResetCommand();//复位
delay_ms(100);
ADS1220WriteRegister(ADS1220_0_REGISTER,4,ch_cfg);//配置4个寄存器
delay_ms(100);
//ADS1220SendShutdownCommand();
ADS1220SendStartCommand();
}
long ADS1220ReadData()
{
long Data;
/* send the command byte */
ADS1220SendByte(ADS1220_CMD_RDATA);
/* get the conversion result */
#ifdef ADS1120
Data = ADS1220ReceiveByte();
Data = (Data << 8) | ADS1220ReceiveByte();
/* sign extend data */
if (Data & 0x8000)
Data |= 0xffff0000;
#else
Data = ADS1220ReceiveByte();
Data = (Data << 8) | ADS1220ReceiveByte();
Data = (Data << 8) | ADS1220ReceiveByte();
/* sign extend data */
if (Data & 0x800000)
Data |= 0xff000000;
#endif
return Data;
}
//选择通道函数
void ADS1220_SelCh(uint8_t ch)
{
uint8_t cfg[2]={ADS1220_MUX_0_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS};
switch(ch)
{
case 0://选择通道0
cfg[0] = ADS1220_MUX_0_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS;
ADS1220WriteRegister(ADS1220_0_REGISTER,1,cfg);
break;
case 1://选择通道1
cfg[0] = ADS1220_MUX_1_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS;
ADS1220WriteRegister(ADS1220_0_REGISTER,1,cfg);
break;
case 2://选择通道2
cfg[0] = ADS1220_MUX_2_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS;
ADS1220WriteRegister(ADS1220_0_REGISTER,1,cfg);
break;
case 3://选择通道3
cfg[0] = ADS1220_MUX_3_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS;
ADS1220WriteRegister(ADS1220_0_REGISTER,1,cfg);
break;
}
}
__IO uint16_t ADS1220_Tick = 0;
uint32_t temp,data;
float Vin[4];
//循环读取4个通道
u32 ADS1220_GetData(void)
{
static uint8_t ads_ch = 3;//通道选择
//if(ADS1220_Tick<50)return;
//ADS1220_Tick=0;
delay_ms(100);
//ADS1220ReadRegister(ADS1220_0_REGISTER,4,test);
switch(ads_ch)
{
case 0://读取通道0 然后切换到通道1
temp = ADS1220ReadData();
Vin[0] = temp*2.048f/8388608;//转换为电压 单位V
ads_ch = 1;
ADS1220_SelCh(ads_ch);
break;
case 1://读取通道1 然后切换到通道2
temp = ADS1220ReadData();
Vin[1] = temp*2.048f/8388608;//转换为电压 单位V
ads_ch = 2;
ADS1220_SelCh(ads_ch);
break;
case 2://读取通道2 然后切换到通道3
temp = ADS1220ReadData();
Vin[2] = temp*2.048f/8388608;
ads_ch = 3;
ADS1220_SelCh(ads_ch);
break;
case 3://读取通道3 然后切换到通道0
temp = ADS1220ReadData();
Vin[3] = (temp*5/32767.0000)+0.0005;
data = ((temp*5/32767.0000)+0.0005)*1000;
//ads_ch = 0;
ADS1220_SelCh(ads_ch);
break;
}
return temp;
}
关于ADS1120驱动代码,寄存器配置
1星 需积分: 0 66 浏览量
2023-06-02
16:05:54
上传
评论
收藏 3KB RAR 举报
嘻嘻爱编码
- 粉丝: 840
- 资源: 145
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈