This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

【原创】+ADS1115在msp430下的使用

Other Parts Discussed in Thread: ADS1115, ADS1245

ADS1115是高精度的16位AD,号称电赛必备的芯片,可以通过I2C总线与MCU相连,ADS1115的引脚图见附件。

ADS1115和MCU连接图如下

程序如下

  • void I2CforADS1115_NOACK(void)
    {       
            SDA_OUT;
            SCL_OUT;
    	SDA_H;
    	_NOP(); _NOP();
    	SCL_H;
    	SCL_L;
    	_NOP(); _NOP();
    	SDA_L;        
    }
    /**************起始信号***************/
    void I2CforADS1115_Start()
    {
    	SDA_L;
    	SCL_H;
    	SDA_H;
    	SDA_L;
    	SCL_L;
    }
    /*************终止信号*************/
    void I2CforADS1115_Stop()
    {
    	SDA_L;
    	SCL_H;
    	SDA_H;
    }
    /*************向I2C总线发送一个字节************/
    void I2CforADS1115_WriteByte(uchar wData)
    {
    	uchar i;
            SDA_OUT;
    	for(i=0;i<8;i++)
    	{
    	   if((wData<<i) & 0x80)
    		   SDA_H;
    	   else
    		   SDA_L;
    	   SCL_H;
               SCL_L;
    	 }
            SDA_H;
            SCL_H;
            SCL_L;
    }
    /**************读取一个字节**************/
    uchar I2CforADS1115_ReadByte()
    {
        uchar temp=0,i;
        SDA_IN;
        for(i=0;i<8;i++)
        {
        	temp=temp<<1;
        	SCL_L;
            SCL_H;
            if(SDA_VAL)
            {
            	temp|=0x01;
            }
    
        }
        SCL_L;
        SDA_L;
        SCL_H;
        SCL_L;
        SDA_H;
        return temp;
    }
    void Configure_ADS1115()
    {
        uchar i=0;
        Init_Data[0] =0x90;       // 地址 + 写命令(写地址0x90,读地址0X91)
        Init_Data[1] =0x01;       // 指向配置寄存器
        Init_Data[2] =0xc0;       // 配置字高字节,采用-4.096到+4.096,选择AINp0输入,AINPn为GND
        Init_Data[3] =0x83;       // 配置字低字节,选择转换速率即通信速率
        SCL_H;
        I2CforADS1115_Start();
        for(i=0;i<4;i++)
        {
          I2CforADS1115_WriteByte(Init_Data[i]);
          _NOP();
        }
        I2CforADS1115_Stop();
    }
    /************指向转换结果寄存器***************/
    void PointRegister_ADS115(void)
    {
    	uchar i=0;
    	Init_Data[0] =0x90;           // 地址 + 写命令
    	Init_Data[1] =0x00;            // 指向转换结果寄存器
    	SDA_OUT;
    	SCL_H;
    	I2CforADS1115_Start();
    	for(i=0;i<2;i++)
            {
              I2CforADS1115_WriteByte(Init_Data[i]);
            }
            I2CforADS1115_Stop();
    }
    
    
    
    
    /**************读取转换结果***************/
    uint32 ReadData_ADS1115(void)
    {
      uchar   ResultL,ResultH;
      uint32    Result;
      SCL_H;
      I2CforADS1115_Start();
      I2CforADS1115_WriteByte(0x91);
      ResultH=I2CforADS1115_ReadByte();
      I2CforADS1115_NOACK();//非应答一定要,表示我还要数据
      ResultL=I2CforADS1115_ReadByte();
      I2CforADS1115_NOACK();
      I2CforADS1115_Stop();
      Result=ResultH*256+ResultL;
      return   Result;
    }
    /***********模拟量采集转化为数字量***********/
    uint32  GetData_ADS1115()
     {
            uint32 ResultValue;
    	Configure_ADS1115();
            PointRegister_ADS115();
    	ResultValue=ReadData_ADS1115();             //结果存储AD转化值
            return   ResultValue;
     }
    
  • 您好,请问ADS1115以及其他型号的AD芯片中,SCL和CLK都必须有电平驱动吗,如图中的VDD?另外,您用过ADS1245吗,它的CLK推荐频率为2.4576MHz,请问如何获得?

  • SCL是I2C的时钟,CLK是系统时钟,430就能实现2.4576MHz

  • 您好!我现在遇到了一个问题,单个通道采集没有问题,但是两个通道交替采集时,出来的数据是一样的,请问一下怎么解决,谢谢!