ADS1115一直显示8192,不然就是0,不知道哪里有问题 大神帮忙看看

在这里插入图片描述
刚入坑菜鸟,求助 ADS1115一直显示8192,不然就是0或者65535,不知道哪里有问题 大神帮忙看看,

使用串口读数 或者用电位器分压读数都不成功。

i2c.h
#ifndef I2CHEAD
#define I2CHEAD
#include “includes.h”
#define SCL_Out //SCL设置为输出模式
sbit SCL=P2^1;
sbit SDA=P2^0;

#define SDA_In //SDA改成输入模式
#define SDA_Out //SDA变回输出模式
void delay1(uchar T);
void delay1ms(uchar i);
void start();
void stop();
void Send1byte(uchar byte);
unsigned int Read1byte();

#endif

i2c.c
#include “includes.h”

/***********************************************************************************/
void delay1(uchar T)
{
while(–T);
}
/************/
void delay1ms(uchar i)
{
uchar j;
for(j=0;j<40;j++)
{
while(–i);
}
}
/起始信号
/
void start()
{ SDA =0;
SCL=1;
delay1(100);
SDA =1;
delay1(20);
SDA =0;
SCL=0;
delay1(10);
}
/终止信号/
void stop()
{ SDA=0;
delay1(10);
SCL=1;
delay1(20);
SDA=1;
delay1(10);
}
/*向I2C总线发送一个字节/
void Send1byte(uchar byte)
{
uchar i;
for(i=0;i<8;i++)
{
if((byte<<i)&0x80)
SDA=1;
else
SDA=0;
delay1(5);
SCL=1;
delay1(10);
SCL=0;
delay1(10);
}
delay1(5);
SDA=1;
delay1(5);
SCL=1;
delay1(10);
SCL=0;
delay1(10);

}
/读取一个字节/
uint Read1byte()
{
uchar temp=0;
uchar i;
for(i=0;i<8;i++)
{
temp=temp<<1; //shift left to receive next bit
SCL=0; //set clock high
delay1(10);
SCL=1;
nop();
delay1(5);
if(SDA==1) //check if Data=high 如果有数据到来
temp|=0x01; //yes - set bit high
nop();
delay1(10);
}
SCL=0;
delay1(5);
SDA=0;
delay1(5);
SCL=1;
delay1(20);
SCL=0;
delay1(5);
SDA=1;
return temp;
}

ads1115.h
#ifndef ADS1115HEAD
#define ADS1115HEAD
#include “includes.h”

/*******Config Register/
#define OS 1 //Operational status or single-shot conversion start 操作状态或单次转换开始
#define ADS1015_REG_CONFIG_MUX_DIFF_0_1 (0x0000) // 微分P=AIN0,N=AIN1(默认值)Differential P = AIN0, N = AIN1 (default)
#define ADS1015_REG_CONFIG_MUX_DIFF_0_3 (0x1000) // Differential P = AIN0, N = AIN3
#define ADS1015_REG_CONFIG_MUX_DIFF_1_3 (0x2000) // Differential P = AIN1, N = AIN3
#define ADS1015_REG_CONFIG_MUX_DIFF_2_3 (0x3000) // Differential P = AIN2, N = AIN3
#define MUX (0x4000) // 单端AIN0 Single-ended AIN0
#define ADS1015_REG_CONFIG_MUX_SINGLE_1 (0x5000) // Single-ended AIN1
#define ADS1015_REG_CONFIG_MUX_SINGLE_2 (0x6000) // Single-ended AIN2
#define ADS1015_REG_CONFIG_MUX_SINGLE_3 (0x7000) // Single-ended AIN3
#define PGA 0x0400 //Programmable gain amplifier configuration
#define MODE 0x01 //Device operating mode

#define DR 0x0400//Data rate
#define COMP_MODE 0x0000 // Comparator mode
#define COMP_POL 0x0000 //Comparator polarity
#define COMP_LAT 0x0000 //Latching comparator
#define COMP_QUE 0x0003 //Comparator queue and disable

#define config_MSB (OS << 7)|(MUX << 4)|(PGA << 1)|(MODE)//0xC2 11001010
#define config_LSB (DR << 5)|(COMP_MODE << 4)|(COMP_POL << 3)|(COMP_LAT << 2)|(COMP_QUE)

void Confige_1115(unsigned char channel);
void Point_reg(void);
uint Read_1115(void);

#endif

ads1115.c
#include “reg51.h”

#include"ADS1115.h"
#include “I2C.h”

extern unsigned char Initdata[4];
uint result_gd=0;
/Config寄存器**/
void Confige_1115(uchar channel )
{
uchar i=0;
switch(channel)
{
case 0: Initdata[2] = 0xC2; break;
case 1: Initdata[2] = 0xD2; break;
case 2: Initdata[2] = 0xE2; break;
case 3: Initdata[2] = 0xF2; break;
}
Initdata[0] =0x90; // 启动配置命令
Initdata[1] =0x01; // 指向配置寄存器
Initdata[3] =0x83; // 配置字低字节
SCL=1;
start();
for(i=0;i<4;i++)
{
Send1byte(Initdata[i]);
delay1(20);
}
stop();
}
/指向转换结果寄存器***/
void Point_reg(void)
{
uchar i=0;
Initdata[0] =0x90; // 地址 + 写命令
Initdata[1] =0x00; // 指向转换结果寄存器
SDA_Out;
SCL=1;
start();
for(i=0;i<2;i++)
{
Send1byte(Initdata[i]);
delay1(20);
}
stop();
delay1(10);
}
/读取转换结果*/
uint Read_1115(void)
{
uchar ResultL,ResultH;
uint Result;
SCL=1;
start();
delay1(10);
Send1byte(0x91);
delay1(20);
ResultH=Read1byte();
delay1(10);
ResultL=Read1byte();
stop();
Result=(uint)ResultH<<8+(uint)ResultL;
return Result;
}
网上参考的部分程序(侵删)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值