ADS1115配置寄存器
- 格式:rtf
- 大小:70.35 KB
- 文档页数:3
#include "stm32f10x.h"#include "math.h"#include "delay.c" //包含delay_us(--); delay_ms(--);unsigned char BUF[8];//----------结构体声明-------------------------------//void RCC_Configuration(void) //打开各个模块时钟{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);}//----------------------------------------//void I2C_Configuration(void) //硬件iic初始化{I2C_InitTypeDef I2C_InitStructure;I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;I2C_InitStructure.I2C_OwnAddress1 = 0xA0;I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;I2C_InitStructure.I2C_ClockSpeed = 100000;I2C_Cmd(I2C1, ENABLE);I2C_Init(I2C1, &I2C_InitStructure);}//-----------------------------------------------------------------//void USART2_Configuration(void) //串口配置初始化:USART2{USART_InitTypeDef USART_InitStructure;USART_ART_BaudRate = 14400;USART_ART_WordLength = USART_WordLength_8b;USART_ART_StopBits = USART_StopBits_1;USART_ART_Parity = USART_Parity_No;USART_ART_HardwareFlowControl =USART_HardwareFlowControl_None;USART_ART_Mode = USART_Mode_Tx|USART_Mode_Rx;USART_Init(USART2, &USART_InitStructure);GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);USART_Cmd(USART2, ENABLE);}void USART2_SendData(unsigned char SendData) //防卡函数{while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);//检测上次发送是否完成;USART_SendData(USART2, SendData);//Delayms(3);}//-----------------------------------------------------------------//void GPIO_Configuration(void) //各个模块GPIO初始化{GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//配置管脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //最大输出速度为50MHzGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出GPIO_Init(GPIOE, &GPIO_InitStructure); //配置以上三句.PE3-led3GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//配置管脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //最大输出速度为50MHzGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOD, &GPIO_InitStructure); //配置以上三句.PD5 txdGPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//配置管脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //输入GPIO_Init(GPIOD, &GPIO_InitStructure); //配置以上三句.PD6 rxdGPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;//iic管脚:SCL and SDA GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;GPIO_Init(GPIOB, &GPIO_InitStructure);}void I2C_WriteByte(unsigned char id,unsigned char write_address,unsigned char byte){I2C_GenerateSTART(I2C1,ENABLE);//产生起始条件while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//等待ACKI2C_Send7bitAddress(I2C1,id,I2C_Direction_Transmitter);//向设备发送设备地址while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//等待ACKI2C_SendData(I2C1, write_address);//寄存器地址while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//等待ACKI2C_SendData(I2C1, byte);//发送数据while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//发送完成I2C_GenerateSTOP(I2C1, ENABLE);//产生结束信号}//---------------------------------------------------------//void AD_init(unsigned char id,unsigned char write_address,unsigned char byte1,unsigned char byte2){I2C_GenerateSTART(I2C1,ENABLE);//产生起始条件while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//等待ACKI2C_Send7bitAddress(I2C1,id,I2C_Direction_Transmitter);//向设备发送设备地址while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//等待ACKI2C_SendData(I2C1, write_address);//配置寄存器//寄存器地址while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//等待ACKI2C_SendData(I2C1, byte1);//c-an0 d-an1 e-an2 f-an3 0->6.144 2->4.096,高字节配置//发送数据while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//发送完成I2C_SendData(I2C1, byte2);//低字节最高转换速度while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//发送完成I2C_GenerateSTOP(I2C1, ENABLE);//产生结束信号}//----------------------------------------------------//void I2C_ADpoint(unsigned char id,unsigned char write_address){I2C_GenerateSTART(I2C1,ENABLE);//产生起始条件while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//等待ACKI2C_Send7bitAddress(I2C1,id,I2C_Direction_Transmitter);//向设备发送设备地址while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//等待ACKI2C_SendData(I2C1, write_address);//寄存器地址while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));I2C_GenerateSTOP(I2C1, ENABLE);//产生结束信号}//-------------------------------------------------------//unsigned char I2C_ReadByte(unsigned char id, unsigned char read_address){unsigned char temp;while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));//等待I2CI2C_GenerateSTART(I2C1, ENABLE);//产生起始信号while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//EV5I2C_Send7bitAddress(I2C1, id, I2C_Direction_Transmitter);//发送地址while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//EV6I2C_Cmd(I2C1, ENABLE);//重新设置可以清楚EV6I2C_SendData(I2C1, read_address);//发送读地址while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//EV8I2C_GenerateSTART(I2C1, ENABLE);//重新发送while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//EV5I2C_Send7bitAddress(I2C1, id, I2C_Direction_Receiver);//发送读地址while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));//EV6I2C_AcknowledgeConfig(I2C1, DISABLE);I2C_GenerateSTOP(I2C1, ENABLE);//关闭应答和停止条件产生while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)));temp = I2C_ReceiveData(I2C1);I2C_AcknowledgeConfig(I2C1, ENABLE);return temp;}//----------------------------------------------------------//void I2C_Read2(unsigned char id, unsigned char read_address){while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));//等待I2CI2C_GenerateSTART(I2C1, ENABLE);//产生起始信号while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//EV5I2C_Send7bitAddress(I2C1, id, I2C_Direction_Transmitter);//发送地址while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//EV6I2C_Cmd(I2C1, ENABLE);//重新设置可以清楚EV6I2C_SendData(I2C1, read_address);//发送读得地址while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//EV8I2C_GenerateSTART(I2C1, ENABLE);//重新发送while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//EV5I2C_Send7bitAddress(I2C1, id, I2C_Direction_Receiver);//发送读地址while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));//EV6while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)));BUF[1] = I2C_ReceiveData(I2C1);I2C_GenerateSTOP(I2C1, ENABLE);I2C_AcknowledgeConfig(I2C1, DISABLE);//关闭应答和停止条件产生while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)));BUF[2] = I2C_ReceiveData(I2C1);I2C_AcknowledgeConfig(I2C1, ENABLE);}//-----------------------------------------//int valu;//-----------------------------------------////-----------------------------------------------//void read_ADS1115(){AD_init(0x90,0x01,0xc2,0xe2);//器件地址90,配置寄存器01,寄存器高位,寄存器低位e2//高字节配置:c-an0 d-an1 e-an2 f-an3 ; 0->6.144 2->4.096delay_ms(1);I2C_ADpoint(0x90,0x00);delay_ms(2);I2C_Read2(0x91,0x00);valu=(BUF[1] << 8) | BUF[2];if(valu>0x7fff)valu-=0xffff;}//------------------------------------------------------------------//void Send_AD(){float t;int t1;//--------------------------------------------------------////USART2_SendData(BUF[1]);//USART2_SendData(BUF[2]); //原始16位数据//--------------------------------------------------------//// USART2_SendData((valu/10000)+0x30);// USART2_SendData((valu/1000%10)+0x30);// USART2_SendData((valu/100%10)+0x30);// USART2_SendData((valu/10%10)+0x30);// USART2_SendData((valu%10)+0x30);// USART2_SendData('`');// USART2_SendData(0x0d);// USART2_SendData(0x0a); //原始数据十进制//--------------------------------------------------------//t=4.096*valu/32768; //转化成电压显示t1=t*10000; //转化成整数输出//USART2_SendData((t1/10000)+0x30);USART2_SendData('.'); //小数点USART2_SendData((t1/1000%10)+0x30);USART2_SendData((t1/100%10)+0x30);USART2_SendData((t1/10%10)+0x30);USART2_SendData((t1%10)+0x30);USART2_SendData(0x0d);USART2_SendData(0x0a);}//---------------------------------------------------------------------// int main(){RCC_Configuration();USART2_Configuration();I2C_Configuration();GPIO_Configuration();//------------------------------------------------------------------------// //------------------------------------------------------------------------//while(1){read_ADS1115();Send_AD();GPIO_ResetBits(GPIOE, GPIO_Pin_6);//LED指示10Hz闪烁delay_ms(50);GPIO_SetBits(GPIOE, GPIO_Pin_6);delay_ms(50); }}。
STM32 ADS1115#include "stm32f10x.h"#include "ADS1115.h"#include "stm32f10x_i2c.h"#include "LCD12864.h"#include "core_cm3.h"#ifndef __cplusplustypedef enum {FALSE = 0, TRUE = !FALSE} bool; #endif/*--Private Value----------------------------------------------------------*/enum TestPort {BatVal,BatCur};unsigned char AD_BUF[2]={0};#define SCLH GPIOB->BSRR = GPIO_Pin_6 #define SCLL GPIOB->BRR = GPIO_Pin_6#define SDAH GPIOB->BSRR = GPIO_Pin_7 #define SDAL GPIOB->BRR = GPIO_Pin_7#define SCLread GPIOB->IDR & GPIO_Pin_6 #define SDAread GPIOB->IDR & GPIO_Pin_7void I2C_GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);// Configure I2C1 pins: SCL and SDAGPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//assert管脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOB, &GPIO_InitStructure);}void I2C_delay(void){__nop();}bool I2C_Start(void){SDAH;SCLH;I2C_delay();if(!SDAread)return FALSE; //SDA线为低则总线忙,退出SDAL;I2C_delay();if(SDAread) return FALSE; //SDA线为高则总线出错,退出SDAL;I2C_delay();return TRUE; }void I2C_Stop(void){SCLL;I2C_delay();SDAL;I2C_delay();SCLH;I2C_delay();SDAH;I2C_delay(); }void I2C_Ack(void) {SCLL;I2C_delay();SDAL;I2C_delay();SCLH;I2C_delay();SCLL;I2C_delay(); }void I2C_NoAck(void){SCLL;I2C_delay();SDAH;I2C_delay();SCLH;I2C_delay();SCLL;I2C_delay();}bool I2C_WaitAck(void) //返回为1有ACK,返回0无ACK {SCLL;I2C_delay();SDAH;I2C_delay();SCLH;I2C_delay();if(SDAread){SCLL;return FALSE;}SCLL;return TRUE;}void I2C_SendByte(u8 SendByte) //数据从高位到低位// {u8 i=8;while(i--){SCLL;I2C_delay();if(SendByte&0x80)SDAH;elseSDAL;SendByte<<=1;I2C_delay();SCLH;I2C_delay();}SCLL;}u8 I2C_ReceiveByte(void) //数据从高位到低位// {u8 i=8;u8 ReceiveByte=0;SDAH;while(i--){ReceiveByte<<=1;SCLL;I2C_delay();SCLH;I2C_delay();if(SDAread){ReceiveByte|=0x01;}}SCLL;return ReceiveByte; }/******************************************************************* ********** 名称: ADS1115_Init* 功能: 初始化ADS1115* 入口参数:id:设备地址;write_address寄存器地址 ;byte1:高字节配置;byte2:低字节最高转换速度* 出口参数: 无* 说明: 完成ADS1115的配置寄存器的初始化工作******************************************************************** ********/void ADS1115_Init(unsigned char id,unsigned charwrite_address,unsigned char byte1,unsignedchar byte2){while(!I2C_Start());I2C_SendByte(id);//写器件地址while(!I2C_WaitAck());I2C_SendByte(write_address);//寄存器地址while(!I2C_WaitAck());I2C_SendByte(byte1);//发送数据while(!I2C_WaitAck());I2C_SendByte(byte2);//发送数据while(!I2C_WaitAck());I2C_Stop();I2C_delay();I2C_delay();}/******************************************************************* ********** 名称: I2C_AD1115_Point* 功能: 指向ADS1115内部特定的寄存器* 入口参数:id:设备地址;write_address寄存器地址* 出口参数: 无* 说明: 指向ADS1115内部特定的寄存器******************************************************************** ********/void I2C_AD1115_Point(unsigned char id,unsigned char write_address) {while(!I2C_Start());//产生起始条件I2C_SendByte(id);//写器件地址//向设备发送设备地址while(!I2C_WaitAck());//等待ACKI2C_SendByte(write_address);//发送数据//寄存器地址while(!I2C_WaitAck());I2C_Stop();//产生结束信号}/******************************************************************* ********** 名称: I2C_Read2* 功能: 读ADS1115转换结果* 入口参数:id:设备地址;read_address寄存器地址* 出口参数: 无* 说明: 转换的值放在BUF【2】******************************************************************** ********/void I2C_Read2(unsigned char id, unsigned char read_address){while(!I2C_Start());//产生起始条件I2C_SendByte(id);//写器件地址//发送地址while(!I2C_WaitAck());//等待ACKAD_BUF[0] = I2C_ReceiveByte();I2C_Ack();AD_BUF[1] = I2C_ReceiveByte();I2C_NoAck();I2C_Stop();}/******************************************************************* ********** 名称: StartChannel* 功能: 选择通道测量* 入口参数: 通道序号0、1、2、3* 出口参数: 采样值* 说明: 完成ADS1115的采样工作******************************************************************** ********/float StartChannlel(char Channel) {float AD_Val=0;int temp=0;if(Channel==BatVal){//First (1001000)Address+0; Second :Point to the Config resgister ADS1115_Init(0x90,0x01,0x02,0xe0);//量程4.096;Continuous conversionmode;860SPS; Out=AIN0-AIN1;}if(Channel==BatCur){ADS1115_Init(0x90,0x01,0x36,0xe0);//量程1.024;Continuous conversionmode;860SPS;Out=AIN2-AIN3;00110110}// if(Channel==2)// {// ADS1115_Init(0x90,0x01,0x62,0xe0);//量程4.096;Continuous conversionmode;860SPS;// }// if(Channel==3)// {// ADS1115_Init(0x90,0x01,0x72,0xe0);//量程4.096;Continuous conversionmode;860SPS;// }while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5));I2C_AD1115_Point(0x90,0x00);I2C_Read2(0x91,0x00);temp=(AD_BUF[0] << 8) | AD_BUF[1];AD_Val=temp/32768.0;return AD_Val;}。
#include <msp430x16x.h>#include "delay.h"typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long int ulong;#define SCL_OUT P2DIR |= BIT0;#define SDA_OUT P2OUT |= BIT1;#define SDA_IN P2OUT &= ~BIT1;#define SCL_0 P2OUT &= ~BIT0;#define SCL_1 P2OUT |= BIT0;#define SDA_0 P2OUT &= ~BIT1;#define SDA_1 P2OUT |= BIT1;#define channel_0 0 //表示选择通道0#define channel_1 1 //表示选择通道1#define channel_2 2 //表示选择通道2#define channel_3 3 //表示选择通道2uchar Initdata[4]={0};uchar send_data[15]={0};/****************************************************************************** *****************函数名称:StartAD1com()函数功能:开始ADC通信入口参数:出口参数:备注:******************************************************************************* *****************/void StartAD1com(){SDA_0; //*********SCL_1;delay_us(100);SDA_1;delay_us(20);SDA_0;delay_us(20);SCL_0;delay_us(10);}/****************************************************************************** *****************函数名称:StopAD1com()函数功能:停止ADC通信入口参数:出口参数:备注:******************************************************************************* *****************/void StopAD1com(){SDA_0;delay_us(10);SCL_1;delay_us(20);SDA_1;delay_us(10);// SCL_0; //**************// delay_us(20);}/***************************************************************************函数名称:Send1_Byte(uchar byte)函数功能:单字节SPI传输入口参数:uchar byte出口参数:备注:*****************************************************************************/ void Send1_Byte(uchar byte){uchar i;for(i=0;i<8;i++){SDA_0; //*******************if (( byte << i) & 0x80 ) SDA_1;delay_us(5);SCL_1;delay_us(10);SCL_0;delay_us(10);}delay_us(5);SDA_1;delay_us(5);SCL_1;delay_us(10);SCL_0;delay_us(10);}/***********************************/void Confige1115A(uchar channel_Co){uchar i=0;uchar channel;switch (channel_Co){case 0: //0通道channel=0xC0;break;case 1: //1通道channel=0xD0;break;case 2: //2通道channel=0xE0;break;case 3: //3通道channel=0xF0;break;default:break;}Initdata[0] =0x90; // 地址+写命令Initdata[1] =0x01; // 指向配置寄存器//Initdata[2] =0x82; // 配置字高字节Initdata[2]= channel + 0X06; // 配置字高字节Initdata[3] =0xE3; // 配置字低字节P2DIR |= 0x02; // SDA脚设置推挽SCL_1; //********** StartAD1com();for(i=0;i<4;i++){Send1_Byte(Initdata[i]);delay_us(20);}StopAD1com();P2DIR &= ~0x02; // SDA1脚设置漏开******************}/****************************************************************************** *****************函数名称:Read1_Byte()函数功能:读取一个字节入口参数:出口参数:备注:******************************************************************************* *****************/uchar Read1_Byte(){uchar temp=0;uchar i;P2DIR &= ~0x02; // SDA1脚设置漏开for(i=0;i<8;i++){temp=temp<<1; //shift left to receive next bitSCL_0;//set clock highdelay_us(10);SCL_1;_NOP();delay_us(5);if(P2IN&0x02)//check if Data=high 如果有数据到来temp|=0x01;//yes - set bit high_NOP();delay_us(10);}SCL_0;delay_us(5);P2DIR |= 0x02; // SDA1脚设置推挽SDA_0;delay_us(5);SCL_1;delay_us(20);SCL_0;delay_us(5);SDA_1;P2DIR &= ~0x02; // SDA1脚设置漏开return temp;}/****************************************************************************** *****************函数名称:Pointregister1()函数功能:指向转换结果寄存器入口参数:无出口参数:备注:******************************************************************************* *****************/void Pointregister1(void){uchar i=0;P2DIR |= 0x02; // SDA1脚设置推挽SCL_0; //*************StartAD1com();for(i=0;i<2;i++){Send1_Byte(Initdata[i]);delay_us(20);}StopAD1com();delay_us(10);}/****************************************************************************** *****************函数名称:Read1115A()函数功能:读AD转换结果入口参数:无出口参数:备注:******************************************************************************* *****************/uint Read1115A(void){uchar ResultL,ResultH;uint Result;Initdata[0] =0x91; // 地址+读命令P2DIR |= 0x02; // SDA1脚设置推挽SCL_1;StartAD1com();delay_us(10);Send1_Byte(Initdata[0]);P2DIR &= ~0x02; // SDA1脚设置漏开delay_us(20);ResultH = Read1_Byte();delay_us(10);ResultL=Read1_Byte();StopAD1com();Result=ResultH+ResultL;return Result;}/*****模拟量采集转化为数字量*****************/uint Ad_1115A(uchar channel_Ad){uint result_gd;Confige1115A(channel_Ad);delay_ms(1);Pointregister1();delay_us(10);result_gd=Read1115A(); //结果存储AD转化值return result_gd;}。
TI公司的ADS1113, ADS1114和ADS1115是超小型16位精密模数转换器(ADC),具有板载基准电压和振荡器,通过I2C兼容接口传输数据,工作电压从2.0V到5.5V,取样频率高达860SPS,.连续模式的功耗仅为150uA, 工作温度从–40℃到+140℃,可用在手提仪表,消费类产品,电池监视,温度测量以及工厂自动化和过程控制.本文介绍了ADS1113, ADS1114和ADS1115的主要特性,方框图, 基本硬件配置图, 典型连接图, 多个ADS1113/4/5连接图以及评估板ADS1015EVM/ADS1115EVM电路图和材料清单.The ADS1113, ADS1114, and ADS1115 are precision analog-to-digital converters (ADCs) with 16 bits of resolution offered in an ultra-small, leadless QFN-10 package or an MSOP-10 package. The ADS1113/4/5 are designed with precision, power, and ease of implementation in mind. The ADS1113/4/5 feature an onboard reference and oscillator. Data are transferred via anI2C-compatible serial interface; four I2C slave addresses can be selected. The ADS1113/4/5 operate from a single power supply ranging from 2.0V to 5.5V.The ADS1113/4/5 can perform conversions at rates up to 860 samples per second (SPS). An onboard PGA is available on the ADS1114 and ADS1115 that offers input ranges from the supply to as low as ±256mV, allowing both large and small signals to be measured with high resolution. The ADS1115 also features an input multiplexer (MUX) that provides two differential or four single-ended inputs.The ADS1113/4/5 operate either in continuous conversion mode or asingle-shot mode that automatically powers down after a conversion and greatly reduces current consumption during idle periods. The ADS1113/4/5 are specified from –40℃to +125℃.ADS1115主要特性:ULTRA-SMALL QFN PACKAGE:2mm × 1,5mm × 0,4mmWIDE SUPPLY RANGE: 2.0V to 5.5VLOW CURRENT CONSUMPTION:Continuous Mode: Only 150µASingle-Shot Mode: Auto Shut-DownPROGRAMMABLE DATA RATE:8SPS to 860SPSINTERNAL LOW-DRIFTVOLTAGE REFERENCEINTERNAL OSCILLATORINTERNAL PGAI2C INTERFACE: Pin-Selectable AddressesFOUR SINGLE-ENDED OR TWO DIFFERENTIAL INPUTS (ADS1115) PROGRAMMABLE COMPARATOR (ADS1114 and ADS1115) OPERATING TEMPERATURE: –40℃ to +140℃ADS1115应用:PORTABLE INSTRUMENTATIONCONSUMER GOODSBATTERY MONITORINGTEMPERATURE MEASUREMENTFACTORY AUTOMATION AND PROCESS CONTROLS 图1.ADS1115功能方框图图2.ADS1115基本硬件配置图图3.ADS1115典型连接图图4.多个ADS1113/4/5连接图图5.多个器件类型连接图图6.ADS1115EVM (左)和ADS1115EVM-PDK (右)外形图ADS1015EVM/ADS1115EVM 评估板主要特性:Contains all support circuitry needed for the ADS1015/ADS1115Two ADS1015/ADS1115 devices onboard to demonstrate I2C™ bus functionality+3.3, +5V, or external power supply options for ADCCompatible with the TI Modular EVM SystemADS1015EVM-PDK/ADS1115EVM-PDK 主要特性:Easy-to-use evaluation software for Microsoft® Windows® XPData collection to text filesBuilt-in analysis tools including scope, FFT, and histogram displaysComplete control of board settingsEasily expandable with new analysis plug-in tools from Texas Instruments图7.MMB3方框图图8. ADS1015EVM/ADS1115EVM电路图ADS1015EVM/ADS1115EVM 材料清单:。
ads1115原理(一)ads1115的相关原理解析什么是ads1115•ads1115是一种高精度、低功耗的模拟转换器(ADC)•它由德州仪器(Texas Instruments)公司推出,是一款采用I²C 接口的16位ADC芯片I²C接口简介•I²C全称为Inter-Integrated Circuit,是一种串行通信协议•ads1115利用I²C接口与主控设备进行通信•I²C接口具有双线制,包括串行数据线(SDA)和串行时钟线(SCL)ads1115的工作原理1.ads1115通过SDA和SCL接收来自主控设备的指令和时钟信号2.主控设备发送启动信号,ads1115进入工作模式3.ads1115根据指令进行模拟输入信号的采样和转换4.转换完成后,ads1115将结果存储在16位寄存器中5.主控设备通过读取寄存器中的数据获取转换结果ads1115的特点•高精度:ads1115的分辨率达到16位,提供更准确的模拟信号转换•低功耗:ads1115的设计旨在降低能耗,适用于电池供电的应用•内置比较器:ads1115可以通过内置的比较器实现电压或电流的阈值检测•多路输入:ads1115提供4个单端或2个差分输入通道,满足不同应用的需求ads1115的应用场景•电池管理:利用ads1115的低功耗和高精度特点,进行电池电压监测和容量估算•温度测量:通过连接温度传感器,利用ads1115进行精确的温度测量•压力监测:结合压力传感器,ads1115可以测量液体或气体中的压力,并输出相应的模拟信号总结•ads1115是一款高精度、低功耗的模拟转换器•它利用I²C接口与主控设备进行通信,完成模拟输入信号的采样和转换•ads1115具有高精度、低功耗、多路输入等特点,适用于多种应用场景以上就是对ads1115的相关原理的解析,希望对读者有所帮助。
ads1115的寄存器解析前言•ads1115具有多个寄存器,用于存储配置信息和转换结果•理解寄存器的作用和配置将有助于使用ads1115进行准确的模拟信号转换寄存器列表1.寄存器0:配置寄存器(Config Register)2.寄存器1:控制寄存器(Control Register)3.寄存器2:低字节数据寄存器(Low Byte Data register)4.寄存器3:高字节数据寄存器(High Byte Data register)配置寄存器详解•配置寄存器用于设置ads1115的工作模式和参数•共有16个位,每个位对应一个特定的功能或配置选项工作模式•Bit 15:MODE(模式位)–0:连续转换模式–1:单次转换模式输入选择•Bit 14-12:MUX(输入选择位)–000:AINP = AIN0,AINN = AIN1(差分输入0-1)–001:AINP = AIN0,AINN = AIN3(差分输入0-3)–010:AINP = AIN1,AINN = AIN3(差分输入1-3)–011:AINP = AIN2,AINN = AIN3(差分输入2-3)–100:AINP = AIN0,AINN = GND(单端输入AIN0)–101:AINP = AIN1,AINN = GND(单端输入AIN1)–110:AINP = AIN2,AINN = GND(单端输入AIN2)–111:AINP = AIN3,AINN = GND(单端输入AIN3)增益选择•Bit 11-9:PGA(增益选择位)–000:FSR = ±6.144V–001:FSR = ±4.096V–010:FSR = ±2.048V–011:FSR = ±1.024V–100:FSR = ±0.512V–101:FSR = ±0.256V–110:FSR = ±0.256V–111:FSR = ±0.256V 数据速率•Bit 8-5:DR(数据速率位)–0000:8 SPS–0001:16 SPS–0010:32 SPS–0011:64 SPS–0100:128 SPS–0101:250 SPS–0110:475 SPS–0111:860 SPS–1000:8 SPS–1001:16 SPS–1010:32 SPS–1011:64 SPS–1100:128 SPS–1101:250 SPS–1110:475 SPS–1111:860 SPS操作模式•Bit 4:OS(操作模式位)–0:尚未启动转换–1:启动转换操作状态•Bit 3:OS-单次位–0:未完成单次转换–1:完成单次转换引脚禁用•Bit 2:COMP_MODE(比较器模式位)–0:比较器模式功能启用–1:比较器模式功能禁用比较器开关•Bit 1:COMP_POL(比较器极性位)–0:比较器输出为标准–1:比较器输出翻转比较器模式•Bit 0:COMP_LAT(比较器延迟位)–0:比较器延迟功能启用–1:比较器延迟功能禁用以上就是ads1115的寄存器配置解析,希望能帮助你更好地理解ads1115的工作原理和设置。
∙特点∙应用∙描述∙订购信息∙绝对最大额定值∙电气特性∙引脚配置∙时序要求∙概览∙快速入门指南∙复用器∙模拟输入∙满量程输入∙数据格式∙走样∙操作模式∙复位和上电∙低功耗税骑自行车∙COMPARATOR(ADS1114/15只)∙转换就绪PIN(ADS1114 / 5只)∙SMBus报警反应∙I2C接口∙I2C地址选择∙I2C广播呼叫∙I2C速度模式∙从属模式操作∙接收模式∙传输模式∙写/读寄存器∙寄存器∙指针寄存器∙转换寄存器∙CONFIG寄存器∙lo_thresh与Hi_thresh寄存器∙应用信息∙基本连接∙连接多个设备∙GPIO端口通信∙单端输入∙低侧电流监视器- ADS111 3 ADS111 月4ADS1115www.ti.co 米SBAS444A 2009年5月- 2009年8月修订超小型,低功耗,16双牛逼的模拟-数字转换器检查样品:ADS1113 ADS1114 ADS1115特点∙超小型QFN封装:2毫米×1.5毫米×0.4毫米∙宽电源电压范围:2.0V至5.5V∙低消耗电流:连续模式:只有150 μ单次模式:自动关闭∙可编程数据速率:8SPS到860SPS∙内部低漂移电压基准∙内部振荡器∙内部PGA∙我2C™接口:引脚可选择的地址∙四个单端或两个差分输入(ADS1115)∙可编程比较器(ADS1114和ADS1115)∙工作温度:-40°C至+140°C时应用∙便携式仪表∙消费品∙电池监控∙温度测量∙工厂自动化和过程控制描述ADS1113,ADS1114和ADS1115是高精度模拟到数字转换器(ADC)号决议第16位,超小型,无铅QFN-10封装或MSOP-10封装中提供。
的ADS1113/4/5设计精度,功耗和易于记住的实施。
ADS1113/4/5功能板载参考和振荡器。
数据传输通过一个I 2 C兼容串行接口,四个I 2 C 从地址。
第30卷 第3期 苏州科技大学学报(工程技术版)V ol. 30 No. 3 2017 年 9 月Journal of Suzhou University of Science and Technology(Engineering and Technology)Sep.2017基于ADS1115多通道低功耗环境参数检测系统设计李长才肖金球4华猛^(1.苏州科技大学电子与信息工程学院,江苏苏州215009;2.苏州市智能测控工程技术研究中心,江苏苏州215009)摘要:为了可靠准确地检测环境参数,尽可能降低功耗,设计了基于ADS1115多通道低功耗检测系统。
采用 ADS1115作为数据采样与转化模块,STM32处理器作为控制与处理模块。
通过配置ADS1115寄存器,进行通道转换 与数据采集。
利用STM32的待机模式,大大降低了系统功耗。
给出了 ADS1115芯片的简介、硬件设计方案、软件实现 方法以及最终测试结果。
经测试,该检测系统具有功耗低、体积小、可靠稳定以及功能扩展性好等特点,适用于对功 耗要求比较高的数据采集与测量环境中。
关键词:ADS1115;参数检测;多通道;STM32;低功耗中图分类号:TP274 文献标识码:A文章编号:2096-3270(2017)03-0077-04当前,模数、数模转化器[1]已经被广泛的应用在工业、通信、汽车及消费类领域,在电子智能测量技术的 高速发展的趋势下,对数据采集与转换的要求也越来越高。
特别是在电能供应不便的地方,数据采集需要的 电能只有通过电池或太阳能板提供,所以需要模数转换器具有低功耗特性。
此外,数据采集检测系统还需要 稳定、可靠、安全地运行,实现对数据的测量与监控。
ADS1115不仅具有低功耗的特性,而且体积小、精度高,集成了多路复用器以及増益放大器等部件,简化了外围电路的设计。
在特定的场合,能够充分发挥其优势。
该文设计了基于ADS1115多通道低功耗环境参数检测系统I利用ADS1115单次转化模式以及STM32处 理器的待机模式,大大降低了整个系统的功耗,实现了系统可靠稳定运行。
ADS1115程序代码参赛必备#include "ads1115.h"#include "ap_i2c.h"static void Confige1115 (unsigned char port);static void PointRegister (void);static void ReadData (unsigned char chn, unsigned char cnt);unsigned char WriteIntBuf[4], WritepointBuf[2], count = 6,ReadBuffer[64];;void delay (unsigned int delay){while(delay--);}/************************************************************** **************** ** Function Name : Confige1115* Description : 延迟时间* Input : None* Output : None* Return : None* Attention :获取ADS1115模拟转换结果*************************************************************** **************** /void Get_ATOD (unsigned char channel,unsigned char cnt) {static unsigned char chn;chn = channel;Confige1115(channel);delay(1000);PointRegister();delay(1000);ReadData(chn,cnt);delay(1000);}/************************************************************** **************** ** Function Name : Confige1115* Description : 延迟时间* Input : None* Output : None* Return : None* Attention :配置ADS1115*************************************************************** **************** /static void Confige1115 (unsigned char port){static unsigned char chnel, i;switch (port){case 0: //0通道chnel=0xC2;break;case 1: //1通道chnel=0xD2;break;case 2: //2通道chnel=0xE2;break;case 3: //3通道chnel=0xF2;break;default:break;}WriteIntBuf[0] = CMD_Write;WriteIntBuf[1] = CMD_CONF_REG;WriteIntBuf[2] = chnel;WriteIntBuf[3] = CONF_L;if(!(TWI_START())){for(i=0;i<4;i++){TWI_SendByte(WriteIntBuf[i]);delay(20);}}TWI_STOP();}/************************************************************** **************** ** Function Name : PointRegister* Description : 延迟时间* Input : None* Output : None* Return : None* Attention :指向ADS1115指针寄存器用于准备读取数据*************************************************************** **************** /static void PointRegister (void){unsigned char i;WritepointBuf[0] = CMD_Write;WritepointBuf[1] = CMD_POINT_REG;if(!(TWI_START())){for(i=0;i<2;i++){TWI_SendByte(WritepointBuf[i]);delay(20);}}TWI_STOP();}/************************************************************** **************** ** Function Name : I2C_delay* Description : 延迟时间* Input : None* Output : None* Return : None* Attention : CH1 PA4 CH2 PA7 CH3 PA6 CH4 PA5*************************************************************** **************** /static void ReadData (unsigned char chn,unsigned char cnt) {switch(chn){case 0: //0通道if(!(TWI_START())){ if(count == 0xff)count = 6;TWI_SendByte(CMD_Read);delay(20);ReadBuffer[cnt * 8] = TWI_ReceiveByte();TWI_SendACK();ReadBuffer[(cnt * 8) + 1] = TWI_ReceiveByte();TWI_SendACK();TWI_STOP();ReadBuffer[56]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_4) << count);}break;case 1: //1通道if(!(TWI_START())){ TWI_SendByte(CMD_Read);delay(20);ReadBuffer[(cnt * 8) + 2] = TWI_ReceiveByte();TWI_SendACK();ReadBuffer[(cnt * 8) + 3] = TWI_ReceiveByte();TWI_SendACK();TWI_STOP();ReadBuffer[57]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7) << count);}break;case 2: //2通道if(!(TWI_START())){TWI_SendByte(CMD_Read);delay(20);ReadBuffer[(cnt * 8) + 4] = TWI_ReceiveByte();TWI_SendACK();// I2C_delay(20);ReadBuffer[(cnt * 8) + 5] = TWI_ReceiveByte();TWI_SendACK();TWI_STOP();ReadBuffer[59]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) << count);}break;case 3: //3通道if(!(TWI_START())){TWI_SendByte(CMD_Read);delay(20);// I2C_delay(20);ReadBuffer[(cnt * 8) + 6] = TWI_ReceiveByte();TWI_SendACK();// I2C_delay(20);ReadBuffer[(cnt * 8) + 7] = TWI_ReceiveByte();TWI_SendACK();TWI_STOP();ReadBuffer[58]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) << count--);}break;default:break;}/* if(chn == 0)if(count == 0xff)count = 6;// if(!(TWI_START())){TWI_SendByte(CMD_Read);ReadBuffer[cnt * 8] = TWI_ReceiveByte();TWI_SendACK();ReadBuffer[(cnt * 8) + 1] = TWI_ReceiveByte();TWI_SendACK();TWI_STOP();}ReadBuffer[56]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_4) << count);}if(chn == 1){// if(!(TWI_START())){TWI_SendByte(CMD_Read);ReadBuffer[(cnt * 8) + 2] = TWI_ReceiveByte();TWI_SendACK();ReadBuffer[(cnt * 8) + 3] = TWI_ReceiveByte();TWI_SendACK();TWI_STOP();}ReadBuffer[57]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) << count);}if(chn == 2)// if(!(TWI_START())){TWI_SendByte(CMD_Read);ReadBuffer[(cnt * 8) + 6] = TWI_ReceiveByte();TWI_SendACK();// I2C_delay(20);ReadBuffer[(cnt * 8) + 7] = TWI_ReceiveByte();TWI_SendACK();TWI_STOP();}ReadBuffer[59]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) << count);}if(chn == 3){// if(!(TWI_START())){TWI_SendByte(CMD_Read);// I2C_delay(20);ReadBuffer[(cnt * 8) + 4] = TWI_ReceiveByte();TWI_SendACK();// I2C_delay(20);ReadBuffer[(cnt * 8) + 5] = TWI_ReceiveByte();TWI_SendACK();TWI_STOP();}ReadBuffer[58]|=(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7) << count--);}*///===================================== ============================///#ifndef __ADS1115_H#define __ADS1115_H#include "stm32f10x_i2c.h"#include "stm32f10x_gpio.h"#define CMD_Write 0x90#define CMD_Read 0x91#define CMD_CONF_REG 0x01#define CMD_POINT_REG 0x00#define CONF_L 0xe3void Get_ATOD (unsigned char channel,unsigned char cnt); #endif。
#include "stm32f10x.h"#include "ADS1115.h"#include "stm32f10x_i2c.h"#include "LCD12864.h"#include "core_cm3.h"#ifndef __cplusplustypedef enum {FALSE = 0, TRUE = !FALSE} bool;#endif/*--Private Value----------------------------------------------------------*/ enum TestPort {BatVal,BatCur};unsigned char AD_BUF[2]={0};#define SCLH GPIOB->BSRR = GPIO_Pin_6#define SCLL GPIOB->BRR = GPIO_Pin_6#define SDAH GPIOB->BSRR = GPIO_Pin_7#define SDAL GPIOB->BRR = GPIO_Pin_7#define SCLread GPIOB->IDR & GPIO_Pin_6#define SDAread GPIOB->IDR & GPIO_Pin_7void I2C_GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);// Configure I2C1 pins: SCL and SDAGPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//assert管脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOB, &GPIO_InitStructure);}void I2C_delay(void){__nop();}bool I2C_Start(void){SDAH;SCLH;I2C_delay();if(!SDAread)return FALSE; //SDA线为低则总线忙,退出SDAL;I2C_delay();if(SDAread) return FALSE; //SDA线为高则总线出错,退出SDAL;I2C_delay();return TRUE;}void I2C_Stop(void){SCLL;I2C_delay();SDAL;I2C_delay();SCLH;I2C_delay();SDAH;I2C_delay();}void I2C_Ack(void){SCLL;I2C_delay();SDAL;I2C_delay();SCLH;I2C_delay();SCLL;I2C_delay();}void I2C_NoAck(void){SCLL;I2C_delay();SDAH;I2C_delay();SCLH;I2C_delay();SCLL;I2C_delay();}bool I2C_WaitAck(void) //返回为1有ACK,返回0无ACK {SCLL;I2C_delay();SDAH;I2C_delay();SCLH;I2C_delay();if(SDAread){SCLL;return FALSE;}SCLL;return TRUE;}void I2C_SendByte(u8 SendByte) //数据从高位到低位//{u8 i=8;while(i--){SCLL;I2C_delay();if(SendByte&0x80)SDAH;elseSDAL;SendByte<<=1;I2C_delay();SCLH;I2C_delay();}SCLL;}u8 I2C_ReceiveByte(void) //数据从高位到低位//{u8 i=8;u8 ReceiveByte=0;SDAH;while(i--){ReceiveByte<<=1;SCLL;I2C_delay();SCLH;I2C_delay();if(SDAread){ReceiveByte|=0x01;}}SCLL;return ReceiveByte;}/***************************************************************************** 名称:ADS1115_Init* 功能:初始化ADS1115* 入口参数:id:设备地址;write_address寄存器地址;byte1:高字节配置;byte2:低字节最高转换速度* 出口参数:无* 说明: 完成ADS1115的配置寄存器的初始化工作****************************************************************************/ void ADS1115_Init(unsigned char id,unsigned char write_address,unsigned char byte1,unsigned char byte2){while(!I2C_Start());I2C_SendByte(id);//写器件地址while(!I2C_WaitAck());I2C_SendByte(write_address);//寄存器地址while(!I2C_WaitAck());I2C_SendByte(byte1);//发送数据while(!I2C_WaitAck());I2C_SendByte(byte2);//发送数据while(!I2C_WaitAck());I2C_Stop();I2C_delay();I2C_delay();}/**************************************************************************** * 名称:I2C_AD1115_Point* 功能:指向ADS1115内部特定的寄存器* 入口参数:id:设备地址;write_address寄存器地址* 出口参数:无* 说明: 指向ADS1115内部特定的寄存器****************************************************************************/ void I2C_AD1115_Point(unsigned char id,unsigned char write_address){while(!I2C_Start());//产生起始条件I2C_SendByte(id);//写器件地址//向设备发送设备地址while(!I2C_WaitAck());//等待ACKI2C_SendByte(write_address);//发送数据//寄存器地址while(!I2C_WaitAck());I2C_Stop();//产生结束信号}/**************************************************************************** * 名称:I2C_Read2* 功能:读ADS1115转换结果* 入口参数:id:设备地址;read_address寄存器地址* 出口参数:无* 说明: 转换的值放在BUF【2】****************************************************************************/ void I2C_Read2(unsigned char id, unsigned char read_address){while(!I2C_Start());//产生起始条件I2C_SendByte(id);//写器件地址//发送地址while(!I2C_WaitAck());//等待ACKAD_BUF[0] = I2C_ReceiveByte();I2C_Ack();AD_BUF[1] = I2C_ReceiveByte();I2C_NoAck();I2C_Stop();}/**************************************************************************** * 名称:StartChannel* 功能:选择通道测量* 入口参数:通道序号0、1、2、3* 出口参数:采样值* 说明: 完成ADS1115的采样工作****************************************************************************/ float StartChannlel(char Channel){float AD_Val=0;int temp=0;if(Channel==BatVal){//First (1001000)Address+0; Second :Point to the Config resgisterADS1115_Init(0x90,0x01,0x02,0xe0);//量程 4.096;Continuous conversionmode;860SPS; Out=AIN0-AIN1;}if(Channel==BatCur){ADS1115_Init(0x90,0x01,0x36,0xe0);//量程 1.024;Continuous conversionmode;860SPS;Out=AIN2-AIN3;00110110}// if(Channel==2)// {// ADS1115_Init(0x90,0x01,0x62,0xe0);//量程 4.096;Continuous conversionmode;860SPS;// }// if(Channel==3)// {// ADS1115_Init(0x90,0x01,0x72,0xe0);//量程 4.096;Continuous conversionmode;860SPS;// }while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5));I2C_AD1115_Point(0x90,0x00);I2C_Read2(0x91,0x00);temp=(AD_BUF[0] << 8) | AD_BUF[1];AD_Val=temp/32768.0;return AD_Val;}。