8363|9

2

帖子

1

TA的资源

一粒金砂(初级)

楼主
 

ADS1115使用下面程序结果AD转换后的数据全部是1,请问是什么问题? [复制链接]

#include
#include
#define uchar    unsigned char
#define uint8    unsigned char
#define uint   unsigned short int
#define    SDA   DDRE.2
#define    SCL   DDRE.4
char a[8];
const uint8 b[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
char resulth,resultl;
uint real;
//数据通讯的开始代码
void start(void)
{
    SDA=1;  //数据高
    SCL=1;  //时钟低
    delay_us(1);
    SDA=0;  //数据低
    delay_us(1);
    SCL=0;  //时钟高
    delay_us(1);
}
//数据通讯的结束代码
void stop(void)
{
    SDA=0;   //数据低
    delay_us(1);
    SCL=1;   //时钟高
    delay_us(1);   
    SDA=1;   //数据高
    delay_us(1);     
}
//检测代码
void ack(void)
{   
    SDA=0;   //数据低
    delay_us(1);
    SCL=1;   //时钟高
    delay_us(3);
    SCL=0;   //时钟低
    delay_us(1);
    SDA=1;   //数据高
    delay_us(3);   
}
void nack(void)
{   SDA=1;  //数据高
    delay_us(1);
    SCL=1;  //时钟高
    delay_us(3);
    SCL=0;   //时钟低
    delay_us(1);
    SDA=0;   //数据低
    delay_us(3);   
}
//转换程序
void conv(char byte)
{
    char i,j;
    i=byte;
    for (j=0;j<8;j++)
    {  
        a[7-j]=(i+1)&0x01;
        i=i>>1;        
    }
}
//单片机向ADS1115写字节
void write_byte(char byte)
{
    char j;
    conv(byte);
    for (j=0;j<8;j++)
    {
        SDA=a[j];
        SCL=0;
       // delay_us(3);  
        SCL=0;   
        SCL=0;   
        SCL=0;   
        SCL=0;   
        SCL=1;
    }
}
//单片机从ADS1115读取字节
uint READ_byte()
{
    char j;
    char DAT=0X00;
    for (j=0;j<8;j++)
    {   
        SCL=0;
        delay_us(3);
        SCL=1;
        //delay_us(10);
        DAT=DAT*2;               
        if(SDA==1) DAT=DAT|0x01;
        //SCL=0;
    }
    ack();
    return DAT;  
}

//配置寄存器
void Confige1115 ()
{   
     start();                        
     write_byte(0x90);//写                     
     ack();
     write_byte(0x01);//指向配置寄存器                  
     ack();
     write_byte(0XD2); //设置配置寄存器的高八位1101 0010,即AINp=AIN1,AINn=GND;满量程FS=+-4.096;连续转换模式   
     ack();
     write_byte(0XE3);//设置配置寄存器的低八位1100 0101,即   
     ack();
     stop();                        
   }
//配置指针寄存器
void PointRegister (void)
{      
     start();                  
     write_byte(0x90);//写   
     ack();
     write_byte(0x00);//指针指向转换寄存器      
     ack();
     stop();          // Send I2C Stop Transfer
}
//读取函数
uint read()
{        
unsigned long int result;//resulth,resultl;     
start();      
write_byte(0x91);
ack();      
resulth=READ_byte();  //高八位                 
resultl=READ_byte(); //底八位     
stop();
result=resulth<<8;  
result=result|resultl;
//result=result/256/256;   
// if(result>0x7fff)        
// result=~result+1;//用于测量负电压,负电压从8000~ffff,负电压与正关于0有类似对称关系,按位取反后+1相同     
  return resulth;   
   }  
//获取最终模数转换之后的结果
uint getad()
  {      
  uint value;
  DDRF=0X00;   
  Confige1115();      
  delay_ms(1);      
  PointRegister();   
  DDRF=0X08;
  delay_ms(1);     
  value=read();     
  return value;
  }   
  
void main(void)
{  
    char x;
    unsigned long sum = 0;   
    uint value;
    uchar i,ptr[4]={6,7,8,9};
    DDRD=0XFF;
    PORTD=0xFF;
    DDRC=0XFF;
    PORTC=0xFF;
     while(1)
    {
        // for(i=0;i<1;i++)              
          sum= getad();            
         //sum=sum/2;//左移相当于除以16              
          real=(5000/256)*sum;                                                   
          ptr[3]=real / 1000; //最高位                  
          ptr[2]=(real - ptr[0]*1000)/100;//次高位            
          ptr[1]=(real - ptr[0]*1000 - ptr[1]*100)/10;//次低位            
          ptr[0]=(real - ptr[0]*1000 - ptr[1]*100 - ptr[2]*10); //最低位    uint result,,resultl;      
         // sum= getad();
    while (1)
    {         
            x=0xEF;      
            for(i=0;i<4;i++)               
             {
             PORTC=x;
             PORTD=resulth;
             x=x/2;
             PORTB=resultl;
             delay_ms(1);
             }
    }
   
    }
}

最新回复

要配置好  研究研究  Config Register(Read/Write)   详情 回复 发表于 2020-8-13 17:26
点赞 关注

回复
举报

2万

帖子

341

TA的资源

版主

沙发
 
AD转换后的数据全部是1?
确定是程序的问题么
 
 
 

回复

2

帖子

1

TA的资源

一粒金砂(初级)

板凳
 

原理图

硬件我检查了没有问题呀

点评

您解决了吗,跟你的问题一样  详情 回复 发表于 2015-4-24 13:22
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

4
 
楼主问题解决了吗?我也遇到了相同的问题

点评

请教您一个问题,你解决了吗?读数据的时候怎么读呢,如果只按手册上的配置输出的是7ffff啊,不知道怎么做了  详情 回复 发表于 2015-4-27 12:07
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(中级)

5
 
362728819 发表于 2013-11-13 10:05
硬件我检查了没有问题呀

您解决了吗,跟你的问题一样
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(中级)

6
 
杭电凌云 发表于 2014-5-5 17:10
楼主问题解决了吗?我也遇到了相同的问题

请教您一个问题,你解决了吗?读数据的时候怎么读呢,如果只按手册上的配置输出的是7ffff啊,不知道怎么做了
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

7
 
我最近也遇到了相同的问题,参考了很多人的程序,可是结果还是一样,输出的还是65535,有没有高手帮帮我?
 
 
 

回复

574

帖子

11

TA的资源

一粒金砂(高级)

8
 
您用硬件I2C试一下,看行不行,同时用逻辑分析仪看一下时序,符合不符合规范
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

9
 
楼主搞定了吗??我的也是一直是65535
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 

要配置好  研究研究  Config Register(Read/Write)

无标题.png (34.69 KB, 下载次数: 0)

无标题.png
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表