wujingbin 发表于 2006-6-30 14:12:11

MSP430驱动ADS1110如何实现ADS1110的读写操作

小弟刚接触ADS1110芯片,在MSP430环境下,对ADS1110的读操作,只有第一个字节有数据,其他的都是FF,也不能读出配置寄存器的内容,那位大侠给指点一下,在此表示感谢了!

ljd166 发表于 2006-6-30 15:26:29

好好看PDF,答案就在上面。这个芯片配置不光光是寄存器,外围电路也很重要

wujingbin 发表于 2006-7-3 15:07:58

我看了PDF文档,目前存在的问题是,采用ADS1110的默认设置,即配置寄存器为0X8C的时候,读出来的数据寄存器的数据是8191,读出来配置寄存器的数据是198,输入电压不断变化,但读出的数据不变,重新配置配置寄存器,写入:0X80,即DR1,DR2 都为0;此时读出配置寄存器的内容是64,理论上应该是128;读出数据寄存器的内容随着输入电压的变化而不断变化,最大值2047,最小值0,我感觉数据寄存器的值好像是正确的,但不能理解的是配置寄存器的值不对,各位能不能给点确切的建议!谢谢

wujingbin 发表于 2006-7-3 15:10:46

我的外围电路采用的单端输入的典型电路,SDA,SCL都是100K上拉到VCC,

wujingbin 发表于 2006-7-6 10:31:53

经过多次实验,终于搞定了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);



}

290168514 发表于 2010-9-8 16:11:27

xie谢谢分享呀

zhcj66 发表于 2013-4-20 11:16:23

wujingbin 发表于 2006-7-6 10:31 static/image/common/back.gif
**** 作者被禁止或删除 内容自动屏蔽 ****

谢谢分享,正好想写个程序试试呢,这个芯片稳定到多少位的数据?
页: [1]
查看完整版本: MSP430驱动ADS1110如何实现ADS1110的读写操作