微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > +ADS1115在msp430下的使用

+ADS1115在msp430下的使用

时间:10-02 整理:3721RD 点击:

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

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top