OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4149|回复: 3

ads1115驱动

[复制链接]

21

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
277
金钱
277
注册时间
2015-7-12
在线时间
50 小时
发表于 2015-8-6 17:33:00 | 显示全部楼层 |阅读模式
5金钱

我调的ads1115程序,采集到的数据全是1;以下是驱动,望大神指教

static void delay(u16 D)
{
 while(--D);
}

//I2C总线启动
void I2CStart(void)
{
   SDA1;
   delay(50);
   SCL1;
   delay(50);
   SDA0;
   delay(50);
   SCL0;
   delay(50);
}

//I2C停止总线
void I2CStop(void)
{
   SDA0;
   delay(50);
   SCL1;
   delay(50);
   SDA1;
   delay(50);
}

 
//I2C 写一字节
void I2CWriteByte(u8 DATA)
{
      u8 i;
      for(i=0;i<8;i++)
      {
         if(DATA&0x80)
         {
              SDA1;
         }
         else
         {
              SDA0;
         }
         SCL0;
         delay(50);
         SCL1;
         delay(50);
         DATA=DATA<<1; 
      }
   SCL0;
}


//I2C 读一字节
u8 I2CReadByte(void)
{
    u8 TData=0,i;
 SDA1;
    for(i=0;i<8;i++)
    {
  SCL0;
  delay(50);
  SCL1;
  TData=TData<<1;
  if(SDAI)
  {
   TData|=0x01;
  }
    }
 SCL0;
 delay(50);
    return TData;
}

/*********************************************************************
*函数名称:  ADS1115Config
*描    述: 设置ADS1115包括通道配置,采样时间等等
*参    数: HCMD :命令字高8位(通道,量程,转换模式)
   LCMD : 命令字低8位(采样率设置 比较模式 有效电平 信号输出锁存)
*返    回; 无
********************************************************************/
void ADS1115Config()//配置寄存器
{
 I2CStart();
    I2CWriteByte(WR_REG);  // 地址0x90  器件ADR接地 写寄存器
 delay(50);
 I2CWriteByte(CONF_REG);// 地址0x01  指向配置寄存器
 delay(50);
 I2CWriteByte(0xd2);  //设置配置寄存器的高八位1101 0010,即AINp=AIN1,AINn=GND;满量程FS=+-4.096;连续转换模式 
 delay(50); 
 I2CWriteByte(0xe3); //设置配置寄存器的低八位1100 0101
 delay(50);
 I2CStop();
}

//配置指针寄存器
void PointRegister (void)
 {     
      I2CStart();                  
      I2CWriteByte(0x90);//写   
      delay(50);
      I2CWriteByte(0x00);//指针指向转换寄存器     
      delay(50);
      I2CStop();          // Send I2C Stop Transfer
 }
 
/*******************************************************************
*函数名称:  ReadAD_A
*描    述: 获取AD转换的值
*参    数: 获取的值为在前面设置的那个通道
*返    回; 无
********************************************************************/


u16 ReadAD(void)
{
   u16 Data[2]={0,0};
   I2CStart();
   I2CWriteByte(RE_REG);//读
   delay(50);
   Data[0] = I2CReadByte();
   Data[1] = I2CReadByte();
   I2CStop();
   Data[0] = Data[0]<<8 | Data[1];
   return  (Data[0]);//&0x7fff
}


u32 getad()
   {     
   u32 value;    
   ADS1115Config();      
   delay(50);     
   PointRegister();   
   delay(50);    
   value=ReadAD();    
   return value;
   } 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

21

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
277
金钱
277
注册时间
2015-7-12
在线时间
50 小时
 楼主| 发表于 2015-8-6 20:06:51 | 显示全部楼层
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2022-10-29
在线时间
8 小时
发表于 2024-5-12 20:55:45 | 显示全部楼层
楼主,求源代码
回复

使用道具 举报

9

主题

160

帖子

0

精华

高级会员

Rank: 4

积分
775
金钱
775
注册时间
2014-11-25
在线时间
94 小时
发表于 2024-5-13 09:04:13 | 显示全部楼层
如果程序逻辑没错的话,延时调整的长些试试
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 13:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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