用的是网上的程序,高八位读取正常。
#include "iic.h"
#include "msp430f149.h"
#ifndef _ads1115_H_
#define _ads1115_H_
uchar table[4],ReadBuffer[16],buffer[16];
unsigned long sum = 0;
uint real;
void delay(uint z)
{
unsigned int i,j;
for(i = 0;i<500;i++)
for(j=0;j<z;j++)
{;;};
}
//配置ads1115
void Confige1115 ()
{
unsigned char i;
table[0] = 0x90;//CMD_Write;
table[1] = 0x01;//指向配置寄存器
table[2] = 0xC2;//设置配置寄存器的高八位1100 0101,即AINp=AIN0,AINn=GND;满量程FS=+-4.096;连续转换模式
table[3] = 0xe3;//设置配置寄存器的低八位1100 0101,即
start();//发送起始信号
for(i=0;i<4;i++)
{ shout(table[i]);//将table里面的数写入ads1115
_NOP();
}
stop();//发送停止信号
}
//指向ADS1115指针寄存器用于准备读取数据
void PointRegister (void)
{
unsigned char i;
table[0] = 0x90;//写
table[1] = 0x00;//指针指向转换寄存器
start();//发送起始信号
for(i=0;i<2;i++)
{
shout(table[i]);//将table里面的数写入ads1115
delay(5);
}
stop();//发送停止信号
}
//读转换寄存器里面的值
uint read()
{ uint result,resulth,resultl;
start(); shout(0x91); resulth = shin(); //高八位 resultl = shin(); //底八位
stop(); result=(resulth<<8)|resultl;
if(result>0x7fff)
result=~result+1;//用于测量负电压,负电压从8000~ffff,负电压与正关于0有类似对称关系,按位取反后+1相同
return result;}
//获取最终模数转换之后的结果
uint getad()
{
uint value;
Confige1115(); _NOP();
PointRegister();
_NOP(); value=read();
return value;
}
user151383853:
没有看到 shout(); 这个函数的定义.
这是个 I2C 的接口程序里的数据收发底层函数. 不知道数据传输怎么实现的.
另外, 你也可以查一下接口时序的波形, 来判断一下从机有没有对主机的请求做出了回应呢?
一般网上的程序找到的程序都需要一定的修改.