ADS1216Y操作过程求教
如题,硬件:AN0,AN1差分,内部参考2.5V,DSYNC及DRDY悬空。IO用来选在外部输入。单片机IO模拟SPI。
软件读写ADS1216寄存器正常,AD转换后的数据读出来随机,不正确。
请大侠赐教,急等,谢谢!
void AD_Convert(void)
{
BYTE temp;
SPI_CSN_CLR;
DrvSYS_Delay(3000);//Ñ¡ÔñADS1216Y
SpiTxRxByte(0xfe);
DrvSYS_Delay(100);//¸´Î»¼Ä´æÆ÷
SpiTxRxByte(0x50);
SpiTxRxByte(0x02);
SpiTxRxByte(0x0e);//0x00ÅäÖÃSETUP¼Ä´æÆ÷
SpiTxRxByte(0x01);//ÅäÖÃMUX¼Ä´æÆ÷,Ñ¡ÔñͨµÀ0+¡¢Í¨µÀ1-²î·Ö
SpiTxRxByte(0x00);//ÅäÖÃACR,ÔöÒæÑ¡1µµ
DrvSYS_Delay(100);
//test ¼Ä´æÆ÷¶Áok
// SpiTxRxByte(0x19);
// SpiTxRxByte(0x00);
// AD0_VALUE[0] = SpiTxRxByte(0);
//test
SpiTxRxByte(0x58);
SpiTxRxByte(0x01);
SpiTxRxByte(0x80);//ÅäÖòÉÑùƵÂʼĴæÆ÷0x780
SpiTxRxByte(0x07);
DrvSYS_Delay(100);
SpiTxRxByte(0x57);//ÅäÖÃIOȫΪÊä³ö
SpiTxRxByte(0x00);
SpiTxRxByte(0x00);
DrvSYS_Delay(100);
SpiTxRxByte(0x5D);//ÅäÖÃÂú¿Ì¶È¼Ä´æÆ÷
SpiTxRxByte(0x02);
SpiTxRxByte(0xFF);
SpiTxRxByte(0xFF);
SpiTxRxByte(0xFF);
DrvSYS_Delay(100);
SpiTxRxByte(0x59);
SpiTxRxByte(0x00);
SpiTxRxByte(0x37);//Ñ¡ÔñÂ˲¨Ä£Ê½,SINC3£¬Ë«¼«ÐÔ£¿
DrvSYS_Delay(100);
SpiTxRxByte(0x56);
SpiTxRxByte(0x00);
SpiTxRxByte(0x08);//08hΪͨµÀ0(0aH,0cH,0eH)
DrvSYS_Delay(1000);
SpiTxRxByte(0xfc);
DrvSYS_Delay(500);
wait: SpiTxRxByte(0x19);//¶ÁM/DEC1,È¡/DRDY
SpiTxRxByte(0x00);
temp=SpiTxRxByte(0);
temp=temp&0x80;
if(temp)goto wait;//µÈ´ýÊý¾Ý×¼±¸ºÃ
SpiTxRxByte(0x01);
DrvSYS_Delay(100);
SpiTxRx3Byte(0);
SPI_CSN_SET;
}
你应该需要跟 DRDY 同步.
wait: SpiTxRxByte(0x19);//读DRDY标志,低为准备好
SpiTxRxByte(0x00);
temp=SpiTxRxByte(0);
temp=temp&0x80;
if(temp)goto wait;//
发了DSYNC命令后,DRDY标志应该为高,直到把3个字节的数据读出或者覆盖掉AD数据后转为低。
我是这样理解的。请大侠指点。