|
#include "stm32f10x_conf.h"
#include "delay.h"
#define SCL_1 GPIO_SetBits(GPIOC,GPIO_Pin_14)
#define SCL_0 GPIO_ResetBits(GPIOC,GPIO_Pin_14)
#define SDA_1 GPIO_SetBits(GPIOC,GPIO_Pin_15)
#define SDA_0 GPIO_ResetBits(GPIOC,GPIO_Pin_15)
#define SDA_dat GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15) //读入SDA数值
#define TRUE 1
#define FALSE 0
#define ADDRESS_0 0x90 //ADDR PIN ->GND
#define ADDRESS_1 0x92 //ADDR PIN ->VDD
#define ADDRESS_2 0x94 //ADDR PIN ->SDA
#define ADDRESS_3 0x96 //ADDR PIN ->SCL
#define ADDRESS0 ADDRESS_0 //ADDR PIN ->GND
#define ADDRESS_W ADDRESS0|0x00 //写地址
#define ADDRESS_R ADDRESS0|0x01 //读地址
#define Pointer_0 0x00 //Convertion register
#define Pointer_1 0x01 //Config register
#define Pointer_2 0x02 //Lo_thresh register
#define Pointer_3 0x03 //Hi_thresh register
#define OS_0 0x0000
#define OS_1 0x8000
#define MUX_0 0x0000 //AINp=AIN0, AINn=AIN1
#define MUX_1 0x1000 //AINp=AIN0, AINn=AIN3
#define MUX_2 0x2000 //AINp=AIN1, AINn=AIN3
#define MUX_3 0x3000 //AINp=AIN2, AINn=AIN3
#define MUX_4 0x4000 //AINp=AIN0, AINn=GND
#define MUX_5 0x5000 //AINp=AIN1, AINn=GND
#define MUX_6 0x6000 //AINp=AIN2, AINn=GND
#define MUX_7 0x7000 //AINp=AIN3, AINn=GND
#define PGA_0 0x0000 //FS=6.144V
#define PGA_1 0x0200 //FS=4.096V
#define PGA_2 0x0400 //FS=2.048V
#define PGA_3 0x0600 //FS=1.024V
#define PGA_4 0x0800 //FS=0.512V
#define PGA_5 0x0A00 //FS=0.256V
#define PGA_6 0x0C00 //FS=0.256V
#define PGA_7 0x0E00 //FS=0.256V
#define DR_0 0x0000 //Data Rate = 8
#define DR_1 0x0020 //Data Rate = 16
#define DR_2 0x0040 //Data Rate = 32
#define DR_3 0x0060 //Data Rate = 64
#define DR_4 0x0080 //Data Rate = 128
#define DR_5 0x00A0 //Data Rate = 250
#define DR_6 0x00C0 //Data Rate = 475
#define DR_7 0x00E0 //Data Rate = 860
#define COMP_MODE_0 0x0000 //0 : Traditional comparator with hysteresis (default)
#define COMP_MODE_1 0x0010 //1 : Window comparator
#define COMP_POL_0 0x0000 //0 : Active low (default)
#define COMP_POL_1 0x0008 //1 : Active hig
#define COMP_LAT_0 0x0000 //0 : Non-latching comparator (default)
#define COMP_LAT_1 0x0040 //1 : Latching comparator
#define COMP_QUE_0 0x0000 //00 : Assert after one conversion
#define COMP_QUE_1 0x0001 //01 : Assert after two conversions
#define COMP_QUE_2 0x0002 //10 : Assert after four conversions
#define COMP_QUE_3 0x0003 //11 : Disable comparator (default)
#define MODE_0 0x0000 //0:连续转换模式
#define MODE_1 0x0100 //1:断电单发模式(默认)
unsigned int Result[2];
unsigned char Readbuff[3];
unsigned char Writebuff[4];
//初始化IIC
void ads1115_IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void Start(void)
{
SCL_1;
SDA_1;
delay_us(15);
SDA_0;
delay_us(15);
SCL_0;
delay_us(15);
}
void Stop(void)
{
SDA_0;
delay_us(15);
SCL_1;
delay_us(15);
SDA_1;
delay_us(15);
}
void ACK(void)
{
SDA_0;
__nop(); __nop();
SCL_1;
delay_us(15);
SCL_0;
__nop(); __nop();
SDA_1;
delay_us(15);
}
void NACK(void)
{
SDA_1;
__nop(); __nop();
SCL_1;
delay_us(15);
SCL_0;
__nop(); __nop();
SDA_0;
delay_us(15);
}
unsigned char Check(void)
{
unsigned char slaveack;
SDA_1;
__nop(); __nop();
SCL_1;
__nop(); __nop();
__nop(); __nop();
slaveack = SDA_dat;
SCL_0;
__nop(); __nop();
__nop(); __nop();
if(slaveack)
return FALSE;
else
return TRUE;
}
void Write_1_Byte(unsigned char DataByte)
{
unsigned int i;
for(i=0;i<8;i++)
{
if(DataByte&0x80) //if((DataByte<<i)&0x80)
SDA_1;
else
SDA_0;
__nop();
SCL_1;
__nop();
SCL_0;
__nop();
DataByte <<= 1;
}
SDA_1;
__nop();
}
unsigned char Write_N_Byte(unsigned char *writebuffer,unsigned char n)
{
unsigned int i;
for(i=0;i<n;i++)
{
Write_1_Byte(*writebuffer);
if(Check())
{
writebuffer ++;
}
else
{
Stop();
return FALSE;
}
}
Stop();
return TRUE;
}
unsigned char Read_1_Byte(void)
{
unsigned char data_Value = 0,FLAG,i;
for(i=0;i<8;i++)
{
SDA_1;
__nop();
SCL_1;
__nop();
data_Value <<= 1;
FLAG=SDA_dat;
if( FLAG)
data_Value |= 0x01;
SCL_0;
__nop();
}
return data_Value;
}
void Read_N_Byte(unsigned int*readbuff, unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
{
readbuff=Read_1_Byte();
if(i==n-1)
NACK(); //不连续读字节
else
ACK(); //连续读字节
}
Stop();
}
void WriteWord(void)
{
unsigned int t;
Start(); //写入4个字节
do
{
t=Write_N_Byte(Writebuff,4);
}
while(t==0);
}
void ReadWord(void)
{
int t;
Start(); //写入2个字节
do
{
t=Write_N_Byte(Readbuff,2);
}while(t==0);
Start();
//写入2个字节
do
{
t=Write_N_Byte(&Readbuff[2],1);
}
while(t==0);
Read_N_Byte(Result,2); //读出2个字节
}
void InitADS1115(unsigned char CH)
{
unsigned int Config;
if(CH == 0){Config = OS_1+MUX_3+PGA_2+DR_7+COMP_QUE_3+MODE_1;} //AINp=AIN2, AINn=AIN3 差分输入模式 FS = 2.048V
if(CH == 1){Config = OS_1+MUX_4+PGA_2+DR_7+COMP_QUE_3+MODE_1;} //AINp=AIN0, AINn=GND 单端输入模式 FS = 2.048V
if(CH == 2){Config = OS_1+MUX_5+PGA_2+DR_7+COMP_QUE_3+MODE_1;} //AINp=AIN1, AINn=GND 单端输入模式 FS = 2.048V
if(CH == 3){Config = OS_1+MUX_5+PGA_3+DR_7+COMP_QUE_3+MODE_1;} //AINp=AIN1, AINn=GND 单端输入模式 FS = 1.024V
Writebuff[0] = ADDRESS_W;
Writebuff[1] = Pointer_1;
Writebuff[2] = Config/256;
Writebuff[3] = Config%256;
Readbuff[0] = ADDRESS_W;
Readbuff[1] = Pointer_0;
Readbuff[2] = ADDRESS_R;
}
unsigned int ADS1115(unsigned char CH)
{
unsigned int ADC_DAT;
InitADS1115(CH);
WriteWord();
delay_ms(1);
ReadWord();
ADC_DAT=Result[0]*256+Result[1]; //转换值
if(ADC_DAT >= 0xffff){ADC_DAT=0;} //寄存器溢出
return ADC_DAT;
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|