msp430写ADS1115

Posted xxniuren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了msp430写ADS1115相关的知识,希望对你有一定的参考价值。

/******************c文件*********************************************/

#include "msp430x26x.h"
#include "ADS1115.h"


uchar value_H,value_L,value_buf;    //设置两个接收缓存
/*******************************************
函数名称:ADS1115_delay
功    能:delay延时函数
参    数:xms     
返回值  :无
********************************************/
void ADS1115_delay(uint xms)

  uint i,j;
  for(i = xms; i > 0; i--)
    for(j = 250; j > 0; j--);

/*******************************************
函数名称:ADS1115_delay_us
功    能:delay延时函数
参    数:xms     
返回值  :无
********************************************/
void ADS1115_delay_us(uint xus)

  uint i;
  i = xus;
  while(i > 0)i--;

/*******************************************
函数名称:ADS1115_Init
功    能:初始化ADS1115
参    数:无     
返回值  :无
********************************************/
void ADS1115_Init(void)

   SCLK_DIR;                        //Init IO port
   SDA_OUT_DIR;                     //setting as output
   SCLK_H;
   SDA_H;                          //high

/*******************************************
函数名称:ADS1115_START
功    能:开始启动AD
参    数:无     
返回值  :无
********************************************/
void ADS1115_START(void)

  uint i = 0;
  SCLK_DIR;
  SDA_OUT_DIR; 
  SCLK_H;
  i++;
  SDA_H;
  i++;
  SDA_L;
  i++;
  SCLK_L;                  //CLOCK PIN LOW

/*******************************************
函数名称:ADS1115_STOP
功    能:停止启动AD
参    数:无     
返回值  :无
********************************************/
void ADS1115_STOP(void)

  uint i = 0;
  SCLK_DIR;
  SDA_OUT_DIR;
  SDA_L;
  i++;
  SCLK_H;
  i++;
  SDA_H;
  i++;
  i++;
 

/*******************************************
函数名称:ADS1115_ACK
功    能:ADS1115应答信号
参    数:无     
返回值  :无
********************************************/
void ADS1115_ACK(void)

  uint i = 0;
  SCLK_H;
  i++;
  SDA_IN_DIR;        //BIT1 INPUT
  while(((P1IN & BIT1) == BIT1)&&(i<255)) i++;            //
  i++;
  SCLK_L;

/*******************************************
函数名称:ADS1115_writebyte
功    能:ADS1115写一个字节
参    数:无     
返回值  :无
********************************************/
void ADS1115_writebyte(uchar data)

  uchar bit_data,j;
  uint i = 0;
  uchar temp;
  SDA_OUT_DIR;          //SDA_OUTPUT
  temp = data;
  for(j = 0; j < 8; j++)   //write 1 byte and add one bit for waiting for the response signal from slave
 
    bit_data = temp & 0x80;
    if(bit_data == 0x80) SDA_H;
    else SDA_L;
    i++;
    SCLK_H;
    temp <<= 1;               //move left 1 bit
    SCLK_L;                   //MAICHONG
 
    SCLK_H;
    i++;                //release the data wire
    SCLK_L;
    i++;

/*******************************************
函数名称:ADS1115_readbyte
功    能:ADS1115读一个字
参    数:无     
返回值  :无
********************************************/
void ADS1115_readbyte(void)

  uint i = 0,j = 0;
  value_buf = 0;
  uchar BYTE = 0X80;
  SDA_IN_DIR;
  for(j = 0; j < 8; j++)
 

    SCLK_H;
    if(P1IN & 0X02) value_buf = value_buf | BYTE;//1000 00000
    else value_buf = value_buf & (~BYTE);          //0111 1111
    BYTE = BYTE >> 1;
    SCLK_L;
 
  SCLK_H;
  i++;
  SDA_IN_DIR;
  SDA_L;
  i++;
  SCLK_L;
  i++;
  SCLK_H;
  i++;

/*******************************************
函数名称:ADS1115_config
功    能:ADS1115写配置寄存器
参    数:无     
返回值  :无
********************************************/
void ADS1115_config(uchar data)

  uchar data1;
  switch(data)
 
  case 0 : data1 = 0xc0;break;
  case 1 : data1 = 0xd0;break;
  case 2 : data1 = 0xe0;break;
  case 3 : data1 = 0xf0;break;
 
  ADS1115_START();
  ADS1115_writebyte(0x90);   //IIC address
  ADS1115_ACK();
  ADS1115_writebyte(0x01);   //point to config register
  ADS1115_ACK(); 
  ADS1115_writebyte(data1);   //config register   6.144  CONTINUE CONVERSION MODE
  ADS1115_ACK();
  ADS1115_writebyte(0xE3);   //config register    DISABLE COMPARTOR
  ADS1115_ACK();
  ADS1115_STOP();

/*******************************************
函数名称:ADS1115_pointer
功    能:ADS1115写指针寄存器
参    数:无     
返回值  :无
********************************************/
void ADS1115_pointer(void)

  ADS1115_START();
  ADS1115_writebyte(0x90);   //IIC address write
  ADS1115_ACK();
  ADS1115_writebyte(0x00);   //IIC conversion 
  ADS1115_ACK(); 
  ADS1115_STOP(); 

/*******************************************
函数名称:ADS1115_read
功    能:ADS1115读寄存器
参    数:无     
返回值  :无
********************************************/
void ADS1115_read(void)

  ADS1115_START();
  ADS1115_writebyte(0x91);   //IIC address  read
  ADS1115_ACK();
  ADS1115_readbyte();
  value_H = value_buf;
  SDA_OUT_DIR;
  SDA_L;
  ADS1115_readbyte();
  value_L = value_buf; 
  SDA_OUT_DIR;
  SDA_L;
  ADS1115_STOP();
  value = value_H;
  value = value << 8;    //move left 8 bits
  value = value | value_L;  //change completely
  value = (uint)(value*0.0001876*1000+0.5);    

/************************h文件****************************************/

#ifndef __ADS1115_H__
#define __ADS1115_H__
#define uchar unsigned char
#define uint unsigned int

#define SCLK_DIR P1DIR |= BIT0     //时钟设置为输出
#define SDA_OUT_DIR P1DIR |= BIT1  //数据设置为输出
#define SDA_IN_DIR  P1DIR &= ~BIT1 //数据设置为输入
 
#define ADS1115_OUT  P1OUT |= 0X03

#define SCLK_H       P1OUT |= BIT0
#define SCLK_L       P1OUT &= ~BIT0
#define SDA_H        P1OUT |= BIT1
#define SDA_L        P1OUT &= ~BIT1


extern uint value;


void ADS1115_delay(uint xms);
void ADS1115_delay_us(uint xus);
void ADS1115_Init(void);
void ADS1115_START(void);
void ADS1115_STOP(void);
void ADS1115_ACK(void);
void ADS1115_writebyte(uchar data);
void ADS1115_readbyte(void);
void ADS1115_config(uchar data);
void ADS1115_pointer(void);
void ADS1115_read(void);


#endif

简要介绍下ADS1115
ADS1115是16位的AD,4通道 I2C通信模式,可以选择不同的内部基准源,可以测正电压和负电压 负电压以补码形式储存,内部开始有个PGA 进行基准源程控,然后16位AD转换存储区,然后就是内部的I2C,通过I2C转换出来的数字量的计算公式是:(data /32768)*FS 。qq:705249212 需要程序直接加就好了。

以上是关于msp430写ADS1115的主要内容,如果未能解决你的问题,请参考以下文章

msp430项目编程30

msp430各种低功耗模式有啥区别

跪求msp430的串口发送程序啊!

MSP430 DM430-A开发板学习笔记测速模块(计数传对射感器)的使用

MSP430 DM430-A开发板学习笔记测速模块(计数传对射感器)的使用

msp430无工程时如何固化程序