MSP430驱动ADS1110如何实现ADS1110的读写操作
小弟刚接触ADS1110芯片,在MSP430环境下,对ADS1110的读操作,只有第一个字节有数据,其他的都是FF,也不能读出配置寄存器的内容,那位大侠给指点一下,在此表示感谢了! 好好看PDF,答案就在上面。这个芯片配置不光光是寄存器,外围电路也很重要 我看了PDF文档,目前存在的问题是,采用ADS1110的默认设置,即配置寄存器为0X8C的时候,读出来的数据寄存器的数据是8191,读出来配置寄存器的数据是198,输入电压不断变化,但读出的数据不变,重新配置配置寄存器,写入:0X80,即DR1,DR2 都为0;此时读出配置寄存器的内容是64,理论上应该是128;读出数据寄存器的内容随着输入电压的变化而不断变化,最大值2047,最小值0,我感觉数据寄存器的值好像是正确的,但不能理解的是配置寄存器的值不对,各位能不能给点确切的建议!谢谢 我的外围电路采用的单端输入的典型电路,SDA,SCL都是100K上拉到VCC, 经过多次实验,终于搞定了ADS1110的读写操作,到这里跟大家分享,希望与各位朋友常沟通与交流,我的MSN: prmtwujingbin@hotmail.com
//ADS1110 相关操作函数
//P5.0-- AD_SDA
//P5.1-- AD_SCL
void ADS_start(void);
void ADS_delay(void);
void ADS_stop(void);
void ADS_clock(void); //Generate a ACK
void ADS_ack(void); //The master send a ACK to device
void ADS_RcvAck(void); //receive device sending a ack
void ADS_nack(void); //Generate a NACK
void ADS_waitack(void); //Wating for a ACK from device
void ADS_outbyte(unsigned char); //Send one uusigned char data to Bus
unsigned char ADS_inbyte(void); //Read a byte Data from bus
void ADS_WriteCfgReg(unsigned char CfgData); //Write ADS1110 Congiguration Register
unsigned int ReadDataCfgReg(unsigned int ReadType); //Read data from ADS1110 Data register
void ADS_delay(void)
{
unsigned char i;
for(i=0;i<5;i++);
}
void ADS_clock(void)//Generate a ACK
{
//P5.0-- AD_SDA
//P5.1-- AD_SCL
P5OUT |=BIT1;
ADS_delay();
P5OUT &= ~BIT1;
ADS_delay();
}
void ADS_ack(void) //The master send a ACK to device
{
ADS_delay();
P5DIR |= BIT0;
P5OUT &= ~BIT0;
ADS_delay();
P5OUT |= BIT1;
ADS_delay();
P5OUT &= ~BIT1;
P5DIR &= ~BIT0;
}
void ADS_RcvAck(void)//receive device sending a ack
{
P5DIR &= ~BIT0;
ADS_delay();
P5OUT |= BIT1;
ADS_delay();
P5OUT &= ~BIT1;
P5DIR &= ~BIT0;
}
void ADS_nack(void) //Generate a NACK
{
P5DIR |= BIT0;
P5OUT |= BIT0;
ADS_delay();
P5OUT |= BIT1;
ADS_delay();
P5OUT &= ~BIT1;
P5DIR &= ~BIT0;
}
void ADS_waitack(void) //Wating for a ACK from device
{
//P5.0-- AD_SDA
//P5.1-- AD_SCL
unsigned int i;
P5DIR &= ~BIT0;
ADS_delay();
P5OUT |= BIT1;
ADS_delay();
i=0X0FF;
do
{
}
while(--i!=0);
P5OUT &= ~BIT1;
P5DIR |= BIT0;
}
void ADS_outbyte(unsigned char adsdata) //Send one uusigned char data to Bus
{
unsigned char i;
P5DIR |= BIT0;
for(i=0;i<8;i++)
{
if(adsdata & 0x80)
P5OUT |= BIT0;
else
P5OUT &= ~BIT0;
ADS_clock();
adsdata <<=1;
}
}
unsigned char ADS_inbyte(void) //Read a byte Data from bus
{
unsigned char i,adsdata;//,tempin;
P5DIR &= ~BIT0;
adsdata=0;
for(i=0;i<8;i++)
{
adsdata <<=1;
if(P5IN & BIT0)
adsdata |= 0X01;
ADS_clock();
}
P5OUT &= ~BIT0;
return(adsdata);
}
void ADS_WriteCfgReg(unsigned char CfgData) //Write ADS1110 Congiguration Register
{
ADS_start();
ADS_outbyte(0x92);
ADS_waitack();
ADS_outbyte(CfgData);
ADS_waitack();
ADS_stop();
}
unsigned int ReadDataCfgReg(unsigned int ReadType)//Read data from ADS1110 Data register
{
unsigned int temp,temp1;
ADS_start();
ADS_outbyte(0x93);
ADS_waitack();
temp=ADS_inbyte()*0x100;
ADS_ack();
temp+=(ADS_inbyte());
ADS_ack();
temp1 = ADS_inbyte();
ADS_ack();
ADS_stop();
if(ReadType == 0x01)
{
if(temp > 0x7fff)
{
temp = 0x0000;
return(temp);
}
else
return(temp);
}
else
return(temp1);
} xie谢谢分享呀 wujingbin 发表于 2006-7-6 10:31 static/image/common/back.gif
**** 作者被禁止或删除 内容自动屏蔽 ****
谢谢分享,正好想写个程序试试呢,这个芯片稳定到多少位的数据?
页:
[1]