超过460,000+ 应用技术资源下载
doc

基于51的ads1115程序

  • 1星
  • 日期: 2018-03-26
  • 大小: 79KB
  • 所需积分:1分
  • 下载次数:8
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: ads1115

很详细的说明,希望能够帮助到大家,我也这个说明才学会的。 

文档内容节选

功能: ADS1115单端输入检测电压 CPU: STC12C5A60S2 ADC芯片:ADS11152差分输入或4单端输入 液晶: LCD1602 ADC与单片机连接:SCLP10 SDAP11 检测范围:000499V include reg52h include intrinsh define uint unsigned int define uchar unsigned char define Nop nop 以下为LCD1602显示模块端口定义及函数声明 sbit lcdrsport P17 定义LCD控制端口 sbit lcdrwport P16 sbit lcdenport P24 define lcddataport P0 unsigned char numchartable 0123456789ABCDEF unsigned char LcdDis1table Volt V 电压显示框架 unsigned char poschartable 679AB ......

/*-------------------------------------------------------------------------- ----------------------------------------------------------------*/ /*--*************************功能: 【ADS1115单端输入检测电压】********************--*/ /*--*************************CPU: 【STC12C5A60S2】*******************************--*/ /*-- *************************ADC芯片:【ADS1115(2差分输入或4单端输入)】******* ****--*/ /*--*************************液晶: 【LCD1602】************************************--*/ /*--*************************ADC与单片机连接:【SCL:P1.0 , SDA:P1.1】*******************--*/ /*-- *************************检测范围:【0.00~4.99V】************************** *******--*/ /*-------------------------------------------------------------------------- --------------------------------------------------------------*/ #include #include #define uint unsigned int #define uchar unsigned char #define _Nop() _nop_() /*------------------------以下为LCD1602显示模块端口定义及函数声明----------- ------------*/ sbit lcd_rs_port = P1^7; /*定义LCD控制端口*/ sbit lcd_rw_port = P1^6; sbit lcd_en_port = P2^4; #define lcd_data_port P0 unsigned char num_char_table[] = {"0123456789ABCDEF"}; unsigned char Lcd_Dis1_table[] = {"Volt: V "}; //电压显示框架 unsigned char pos_char_table[] = {" 67.9AB V "}; //电压显示位置 void lcd_delay(uchar ms); //LCD1602 延时 void lcd_busy_wait(); //LCD1602 忙等待 void lcd_command_write(uchar command); //LCD1602 命令字写入 void lcd_system_reset(); //LCD1602 初始化 void lcd_char_write(uchar x_pos,y_pos,lcd_dat); //LCD1602 字符写入 void lcd_bad_check(); //LCD1602 坏点检查 void Num_to_Disp(uint Num); //LCD1602 数据处理 void LcdDisp(uint num); //LCD1602 数据显示 void delay_1ms(uchar x); //LCD1602 延时1ms /*------------------------以下为ADS1115模块端口定义及函数声明--------------- -----------*/ sbit SCL = P1^0; sbit SDA = P1^1; #define TRUE 1 #define FALSE 0 unsigned int Config; unsigned char Writebuff[4],Readbuff[3]; unsigned int Result[2]; int D_ADS; //转换的数字量 #define Accuracy 32768 //定义ADC精度,ADS1115单端输入时15位 char VCC = 4.78; //VCC,电压参考值 #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 /************POINTER REGISTER*****************/ #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 /************CONFIG 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 MODE_0 0x0000 #define MODE_1 0x0100 #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 #define COMP_MODE_1 0x0010 #define COMP_POL_0 0x0000 #define COMP_POL_1 0x0008 #define COMP_LAT_0 0x0000 #define COMP_LAT_1 0x0040 #define COMP_QUE_0 0x0000 #define COMP_QUE_1 0x0001 #define COMP_QUE_2 0x0002 #define COMP_QUE_3 0x0003 //*************ADDR Initial********************/ #define ADDRESS ADDRESS_0 //ADDR PIN ->GND #define ADDRESS_W ADDRESS|0x00 //写地址 #define ADDRESS_R ADDRESS|0x01 //读地址 /*************Config Initial*********************/ #define OS OS_1 #define MUX_A0 MUX_4 //AINp=AIN0, AINn=GND #define MUX_A1 MUX_5 //AINp=AIN1, AINn=GND #define MUX_A2 MUX_6 //AINp=AIN2, AINn=GND #define MUX_A3 MUX_7 //AINp=AIN3, AINn=GND #define PGA PGA_1 //FS=6.144V #define MODE MODE_1 //Continuous conversion mode #define DR DR_7 //Data Rate = 860 #define COMP_QUE COMP_QUE_3 void Delay_us_15 (void); void Delay_ms_1 (void); //功 能:延时 void Start(void); //功 能:完成IIC的起始条件操作 void Stop(void); //功 能:完成IIC的终止条件操作 void ACK(void); //功 能:完成IIC的主机应答操作 void NACK(void); //功 能:完成IIC的主机无应答操作 unsigned char Check(void);//功 能:检查从机的应答操作 void Write_1_Byte(unsigned char DataByte); //写 1个字节 unsigned char Write_N_Byte(unsigned char *writebuffer,unsigned char n); //写 N个字节 unsigned char Read_1_Byte(void); //读 1个字节 void Read_N_Byte(unsigned int *readbuff,unsigned char n); //读 N个字节 void InitADS1115(bit S_MUX_0, bit S_MUX_1); //ADS1115初始化 void WriteWord(void); //写 void ReadWord(void); //读 unsigned int ADS1115(bit S_MUX_0, bit S_MUX_1); //ADS1115取值 /*-------------------------------------------------------------------------- ------------------------------------------------------*/ /*--*********************************【 主函数 】*******************************--*/ /*-------------------------------------------------------------------------- -----------------------------------------------------*/ void main() { unsigned int result; lcd_system_reset(); //LCD1602 初始化 lcd_bad_check(); //LCD1602 坏点检查 while(1) { result = ADS1115(0,0); //ADS1115取值_AIN0 //result = ADS1115(0,1); //ADS1115取值_AIN1 //result = ADS1115(1,0); //ADS1115取值_AIN2 //result = ADS1115(1,1); //ADS1115取值_AIN3 LcdDisp(result); //LCD1602显示电压值 } } /*-------------------------------------------------------------------------- ------------------------------------------------------*/ /*-- **************************************************************************** --*/ /*-------------------------------------------------------------------------- -----------------------------------------------------*/ /*------------------------以下为LCD1602显示模块函数定义--------------------- --*/ void lcd_delay(uchar ms) /***********LCD1602 延时***************/ { uchar j; while(ms--){ for(j=0;j<250;j++) {;} } } void lcd_busy_wait() /**********LCD1602 忙等待*************/ { lcd_rs_port = 0; lcd_rw_port = 1; lcd_en_port = 1; lcd_data_port = 0xff; while (lcd_data_port&0x80); lcd_en_port = 0; } void lcd_command_write(uchar command) /**********LCD1602 命令字写入*************/ { lcd_busy_wait(); lcd_rs_port = 0; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = command; lcd_en_port = 1; lcd_en_port = 0; } void lcd_system_reset() /**********LCD1602 初始化**************/ { lcd_delay(20); lcd_command_write(0x38); lcd_delay(100); lcd_command_write(0x38); lcd_delay(50); lcd_command_write(0x38); lcd_delay(10); lcd_command_write(0x08); lcd_command_write(0x01); lcd_command_write(0x06); lcd_command_write(0x0c); } void lcd_char_write(uchar x_pos,y_pos,lcd_dat) /******LCD1602 字符写入**********/ { x_pos &= 0x0f; /* X位置范围 0~15 */ y_pos &= 0x01; /* Y位置范围 0~ 1 */ if(y_pos==1) x_pos += 0x40; x_pos += 0x80; lcd_command_write(x_pos); lcd_busy_wait(); lcd_rs_port = 1; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = lcd_dat; lcd_en_port = 1; lcd_en_port = 0; } void lcd_bad_check() /******LCD1602 坏点检查**********/ { char i,j; for(i=0;i<2;i++){ for(j=0;j<16;j++) { lcd_char_write(j,i,0xff); } } lcd_delay(200); lcd_delay(200); lcd_delay(200); lcd_delay(100); lcd_delay(200); lcd_command_write(0x01); // clear lcd disp } void Num_to_Disp(uint Num) /******LCD显示数据处理*****/ //Start_1- Over_1:显示电压值,Start_2-Over_2:显示ADS1115输出数值 { float NUM; //Start_1 int xx, yy, zz, zzz; NUM = (Num / (float)Accuracy) * VCC; //ADS1115取值 = Accuracy × (Vin / VCC) xx = (int)NUM; yy = (int)((NUM - (float)(xx)) * 10); zz = (int)((NUM - (float)(xx)) * 100)%10; zzz = (int)((NUM - (float)(xx)) * 1000)%10; pos_char_table[6] = num_char_table[xx / 10]; //电压值十位 pos_char_table[7]= num_char_table[xx % 10]; //电压值个位 pos_char_table[9]= num_char_table[yy]; //电压值小数点后一位 pos_char_table[10]= num_char_table[zz]; //电压值小数点后两位 pos_char_table[11]= num_char_table[zzz]; //电压值小数点后三位 //Over_1 /* pos_char_table[6] = num_char_table[Num / 10000]; //Start_2 pos_char_table[7] = num_char_table[(Num % 10000) / 1000]; pos_char_table[8]= num_char_table[((Num % 10) % 1000) / 100]; pos_char_table[9]= num_char_table[(Num / 10) % 10]; pos_char_table[A]= num_char_table[Num % 10]; //Over_2 */ } void LcdDisp(uint num) /************LCD显示*************/ { uint i=0; for (i=0;i<16;i++) { lcd_char_write(i,0,Lcd_Dis1_table[i]); //显示框架 } Num_to_Disp(num); for(i = 6; i < 12; i++) { lcd_char_write(i,0,pos_char_table[i]); //显示电压 } delay_1ms(100); } void delay_1ms(uchar x) /*******1MS为单位的延时程序******/ { uchar j; while(x--){ for(j=0;j<125;j++) {;} } } /*------------------------以下为ADS1115模块端口函数定义--------------------- -----*/ void Delay_us_15 (void) /*延时程序*/ { unsigned char i; for(i = 0;i < 15;i++) _nop_(); } void Delay_ms_1 (void) { unsigned char i; for(i = 150;i > 0;i--) _nop_(); } ///******************************************* //函数名称:Start //功 能:完成IIC的起始条件操作 //参 数:无 //返回值 :无 //********************************************/ void Start(void) { SCL=1; SDA=1; Delay_us_15 (); SDA=0; Delay_us_15 (); SCL=0; Delay_us_15 (); } // ///******************************************* //函数名称:Stop //功 能:完成IIC的终止条件操作 //参 数:无 //返回值 :无 //********************************************/ void Stop(void) { SDA=0; Delay_us_15 (); SCL=1; Delay_us_15 (); SDA=1; Delay_us_15 (); } ///******************************************* //函数名称:ACK //功 能:完成IIC的主机应答操作 //参 数:无 //返回值 :无 //********************************************/ void ACK(void) { SDA=0; _nop_(); _nop_(); SCL=1; Delay_us_15 (); SCL=0; _nop_(); _nop_(); SDA=1; Delay_us_15 (); } //******************************************* //函数名称:NACK //功 能:完成IIC的主机无应答操作 //参 数:无 //返回值 :无 //********************************************/ void NACK(void) { SDA=1; _nop_(); _nop_(); SCL=1; Delay_us_15 (); SCL=0; _nop_(); _nop_(); SDA=0; Delay_us_15 (); } //**********检查应答信号函数******************/ ///*如果返回值为1则证明有应答信号,反之没有*/ ///******************************************* //函数名称:Check //功 能:检查从机的应答操作 //参 数:无 //返回值 :从机是否有应答:1--有,0--无 //********************************************/ unsigned char Check(void) { unsigned char slaveack; SDA=1; _nop_(); _nop_(); SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); slaveack = SDA; //读入SDA数值 SCL=0; Delay_us_15 (); if(slaveack) return FALSE; else return TRUE; } /***************Write a Byte****************/ void Write_1_Byte(unsigned char DataByte) { int i; for(i=0;i<8;i++) { if(DataByte&0x80) //if((DataByte<
更多简介内容

推荐帖子

补贴:ADS1115程序+原理图+计算方法
前几天发过一个帖子说ADS1115检测接近0V的电压就会出错,这几天比较忙,没怎么花时间来解决这个问题,现在问题仍然存在。 在直接接地线检测的时候会结果有0.5V左右。在这里传上程序的电路图,供大家学习和参考。 前几天在做ads7841(已经上传了原理图和代码),检测地线也没问题的,只是有一个大约0.03V的固有误差,这个可以在转化出来的结果减去误差值消除(消除绝大部分), 现在做的ADS1
Mid_summer 【微控制器 MCU】
基于LM3S2965的ADS1115的驱动程序
注意的是,ADS1115可以选择差分输入方式。通过配置寄存器设置。datasheet的19页有详细说明。地址端ADDR接地,所以器件地址为0x90.好了附代码; 基准的设置是通过配置寄存器的PCA位,datasheet的13页表3有详细说明。如果需要改变采样通道,是需要对配置寄存器的12到14位重新设置的。 *#include "ads1115.h" //ADS1115 GPIO 初始化 void
zw357234798 【微控制器 MCU】
ADS1115转换程序解说
研究ADS1115一段时间了,终于搞定啦,其实操作还是蛮简单的,主要分为三部分的步骤,本次列子是模拟IIC操作的哦。。。。。 其实主要分为三部分, 第一部分:write config register 1   0x90   最后一位是R/W位,高为读,低为写 2  0x01    指向配置寄存器 3  开始设置配置寄存器的参数,根据自己的需要 第二部分:write to pointer
tcvsdonnnie 【微控制器 MCU】
关于ADS1115的一点问题
本帖最后由 paulhyde 于 2014-9-15 03:53 编辑 最近一直在调ADS1115这款AD,用I/O口模拟的I2C时序,结果总是不理想。读出来的数字我表示看不出规律,输入什么都不接有的时候是满值65535,有的时候乱跳。下面是我的程序,大家看下。我感觉我写的时序没什么问题,但是我的SDA总是低电平 首先IIC头文件 #ifndef _IIC_H_ #define _IIC_
偶尔瞌睡 电子竞赛
ADS1115 读低八位直接显示255
调ADS1115,低八位读出来的值总是显示255,所以最小只能调到255, 希望大侠们速度帮下忙! void main() {   ulong temp1=0,temp2=0,temp3=0;   int i;   // Stop watchdog timer to prevent time out reset   WDTCTL = WDTPW + WDTHOLD;   P1DIR
麻滴滴 【微控制器 MCU】
单片机mc9s12dg128和ADS1115配合采集但一电压,最后串口输出的结果时不时输出00000
include        #include     #pragma LINK_INFO DERIVATIVE "mc9s12dg128b" #define SDA PORTA_BIT6 #define SCL PORTA_BIT7 #define uint8_t unsigned char //变量定义 uint8_t I2C_ERROR=1;  /*应答标志位*/ uint
小草籽 单片机

评论


个人中心

意见反馈

求资源

回顶部

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

EEWorld电子技术资料下载——分享有价值的资料

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })