社区导航

 

搜索
查看: 493|回复: 0

[经验] msp430写ADS1115

[复制链接]

3420

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2020-2-4 22:14 | 显示全部楼层 |阅读模式

/******************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 。

 


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 1/4 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-4 10:12 , Processed in 0.080123 second(s), 20 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表