msp430写ADS1115

msp430写ADS1115/******************c文件*********************************************/#include”msp430x26x.h”#include”ADS1115.h”ucharvalue_H,value_L,value_buf;   //设置两个接收缓存/********************************

大家好,欢迎来到IT知识分享网。

/******************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 需要程序直接加就好了。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23287.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信