各位好
1.我在调试ADS1241芯片程序,现在,配置完后,它默认的采集单通道是AIN0.即Multiplexer Control Register是0000 1000,然后将采集结果发送给上位机观察采集数据,经计算采集回来的数据与我给的信号基本相同。
有问题还是其他问题,谢谢!如果需要查看全部程序请通知我,我可以提供。POL硬件拉高*/
main(void)
{
uchar chan=0,n=0;
uchar i;
uchar ACRVal;
// 复位ADS1241
ADS1241SendResetCommand();
// 设置增益1
ADS1241SetGain(0);
//暂时设置一个通道AIN1
ADS1241SetChannel(0x10 | ADS1241_MUXN_AINCOM);//这里如果配置为AIN0,采集数据正常,但改成AIN1就不对。
//选择设置寄存器地址,写入数据
//单极性、采样频率19200Hz、输出数据高位在前、满幅输入为±Vref、数据输出速率7.5Hz
ACRVal = 0x41;
ADS1241WriteRegister(ADS1241_ACR_REGISTER, 1, &ACRVal);
CS=0;
ADS1241SendByte(ADS1241_CMD_SELFCAL);
CS=1;
for(i=0; i<4; i++)
while(DRDY);
{
AD_result=ADS1241ReadData();
/*整理将AD采集结果“AD_result”发给上位机查看结果*/
CS=0;
ADS1241SendByte(ADS1241_CMD_SELFCAL);
CS=1;
for (i=0; i<4; i++)
while (DRDY);
}
}
void ADS1241SendByte(uchar SPI_data)
{
int i;
CS=0;
for (i=0; i<8; i++)
{
if (SPI_data & 0x80)
SDI=1;
else
SDI=0;
SCLK=1;
//延迟一点时间
_nop_(); //延迟
// 时钟管脚输出低电平
SCLK = 0;
//延迟一点时间
_nop_(); //延迟
SPI_data <<= 1;
}
CS=1;
}
**********
*函数原型: uchar ADS1241ReceiveByte(void)
*功能 : 从spi总线上接受8位数据信号,并将接收到的数据作为一个字节返回
*****************************************************************************
*********/
uchar ADS1241ReceiveByte(void)
{
uchar i;
uchar Result=0;
SCLK = 1;
for (i=0; i<8; i++)
{
SCLK=0;
if(SDO==0)
Result=Result << 1;
else
{
Result=Result<<1;
Result +=1;
}
SCLK=1;
}
return(Result);
}
void ADS1241WriteRegister(uchar StartAddress, uchar NumRegs, uchar * pData)
{
uchar i;
CS=0;
// send the command byte
ADS1241SendByte(ADS1241_CMD_WREG | (StartAddress & 0x0f));
// send the command argument
ADS1241SendByte(NumRegs-1);
delayus(10);
// send the data bytes
for (i=0; i< NumRegs; i++)
{
ADS1241SendByte(*pData++);
}
CS=1;
}
int ADS1241SendResetCommand(void)
{
uchar i;
ADS1241SendByte(ADS1241_CMD_RESET);//发送复位命令
//延迟一点时间
for(i = 50;i > 0;i--) ;
}
void ADS1241SetGain(uchar gain)
{//选择放大倍数。 0~7
uchar Temp;
Temp=gain;
ADS1241WriteRegister(ADS1241_SETUP_REGISTER, 0x01, &Temp);
}
{
uchar nTemp;
nTemp=MuxCode;
ADS1241WriteRegister(ADS1241_MUX_REGISTER, 0x01, &nTemp);
}
{
int j;
lint Data;
//CS=0;
// 发送命令字节
ADS1241SendByte(ADS1241_CMD_RDATAC);
//ADS1241SendByte(ADS1241_CMD_RDATA);
//延迟一点时间
for(j = 50;j > 0;j--);
CS=0;
// 得到转换结果
Data = ADS1241ReceiveByte();
Data = (Data << 8) | ADS1241ReceiveByte();
Data = (Data << 8) | ADS1241ReceiveByte();
CS=1;
return Data;
}