K_A37_005 基于STM32等单片机驱动ADS1115 ADC模块 串口与OLED0.96双显示

这篇具有很好参考价值的文章主要介绍了K_A37_005 基于STM32等单片机驱动ADS1115 ADC模块 串口与OLED0.96双显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ads1115 stm32,单片机,stm32,嵌入式硬件,ADS1115,ADC模块

所有资源导航

其他资料目录 直戳跳转

一、资源说明

单片机型号 测试条件 模块名称 代码功能
STC89C52RC 晶振11.0592M ADS1115 ADC模块 STC89C52RC驱动ADS1115 ADC模块 串口与OLED0.96双显示
STM32F103C8T6 晶振8M/系统时钟72M ADS1115 ADC模块 STM32F103C8T6驱动ADS1115 ADC模块 串口与OLED0.96双显示

二、基本参数

参数

ads1115 stm32,单片机,stm32,嵌入式硬件,ADS1115,ADC模块

引脚说明

ADS1115 ADC模块 引脚说明
VIN 正极 5V供电
GND GND 电源负极
SCL IIC时钟线
SDA IIC数据线
ADDR 数字比较器输出或转换就绪引脚
ALERT 从机地址选择引脚
A0 ADC采集通道0
A1 ADC采集通道1
A2 ADC采集通道2
A3 ADC采集通道3

三、驱动说明

IIC时序

ads1115 stm32,单片机,stm32,嵌入式硬件,ADS1115,ADC模块

对应程序:

以51为例

/****************************************************************
通讯起始信号:当 SCL 线是高电平时 SDA 线从高电平向低电平切换,表示通讯的开始;
*****************************************************************/

void ADS1115_IIC_start(void)  
{

		IIC_SDA = 1;//拉高
		IIC_SCL = 1;
		IIC_SDA = 0;
		IIC_SCL = 0;		//拉低时钟线,准备开始时钟

}
/****************************************************************
通讯停止信号:当 SCL 是高电平时 SDA线由低电平向高电平切换,表示通讯的停止。
*****************************************************************/

void ADS1115_IIC_stop(void) 
{


		IIC_SDA = 0;
		IIC_SCL = 1;
		IIC_SDA = 1;	//通讯停止


}
/****************************************************************
//接收应答信号函数
*****************************************************************/

uint8_t ADS1115_IIC_Get_ack(void)
{
		uint16_t CNT;

		IIC_SCL = 0;		//拉低时钟线。
		IIC_SCL = 1;		//拉高时钟线。
		while((IIC_SDA)  && (CNT < 100) )
		{
				CNT++;
				if(CNT == 100)
				{
						return 0;
				}
		}

		IIC_SCL = 0;		//拉低时钟线。
		return 1;

}
/****************************************************************
//发送应答信号函数
*****************************************************************/

void ADS1115_IIC_ACK(void)	
{ 

		IIC_SDA = 0;	//拉低数据线,应答
		IIC_SCL = 1;	//产生第九个时钟信号。
		IIC_SCL = 0;	

}
//非应答

void ADS1115_IIC_NACK(void)
{ 

		IIC_SDA = 1;	//拉高数据线,非应答
		IIC_SCL = 1;	//产生第九个时钟信号。
		IIC_SCL = 0;	

}

/****************************************************************
//向IIC总线写入一个字节的数据
*****************************************************************/

void ADS1115_IIC_write_byte(uint8_t Data)
{

		uint8_t i;
		for(i=0;i<8;i++)//八位数据
		{
				if((Data & 0x80) == 0x80)
				{
						IIC_SDA = 1;
				}
				else
				{
						IIC_SDA = 0;
				}
				IIC_SCL = 1; //一个时钟信号送入数据
				IIC_SCL = 0;
				Data = Data << 1;//数据左移一位,把次高位放在最高位,为写入次高位做准备
		}
		IIC_SDA = 0;		//应答处理前拉低,跳过应答

}
/****************************************************************
//从IIC总线读取一个字节的数据函数
*****************************************************************/

uint8_t ADS1115_IIC_read_byte(void)
{

		uint8_t i;
		uint8_t Data = 0;       //定义一个缓冲寄存器。
		IIC_SCL = 0;	//先拉低时钟线
		IIC_SDA = 1;	//再拉高数据线
		for(i = 0;i < 8;i++)
		{
				Data = Data<<1;		//将缓冲字节的数据左移一位,准备读取数据。
				IIC_SCL = 1;				//拉高时钟线,开始读取下一位数据
				if(IIC_SDA == 1)		//如果数据线为高平电平。
				{
						Data = Data|0x01;	//则给缓冲字节的最低位写1。
				}
				IIC_SCL = 0;				//拉低时钟线,一位读取完成
		}
		return Data;					//返回读取的一个字节数据。



}


/***************************************************************************************************************
* I2C write data
****************************************************************************************************************/
void IIC_WriteReg(uint8_t i2c_addr, uint8_t reg_addr, uint8_t reg_dat)
{
    ADS1115_IIC_start();
    ADS1115_IIC_write_byte((i2c_addr<<1)|0x00);
    ADS1115_IIC_Get_ack(); 
    ADS1115_IIC_write_byte(reg_addr);
    ADS1115_IIC_Get_ack();
    ADS1115_IIC_write_byte(reg_dat);
    ADS1115_IIC_Get_ack();
    ADS1115_IIC_stop();
}
/***************************************************************************************************************
* I2C write data
****************************************************************************************************************/

void IIC_Write_addr(uint8_t i2c_addr, uint8_t reg_addr)
{
    ADS1115_IIC_start();
    ADS1115_IIC_write_byte((i2c_addr<<1)|0x00);
    ADS1115_IIC_Get_ack(); 
    ADS1115_IIC_write_byte(reg_addr);
    ADS1115_IIC_Get_ack();
    
    ADS1115_IIC_stop();
}
/***************************************************************************************************************
* I2C write data
****************************************************************************************************************/

void IIC_WriteBuf(uint8_t i2c_addr, uint8_t reg_addr, uint8_t *Pdat, uint8_t len)
{
	uint8_t i;
    ADS1115_IIC_start();
    ADS1115_IIC_write_byte((i2c_addr<<1)|0x00);
    ADS1115_IIC_Get_ack(); 
	
	  ADS1115_IIC_write_byte(reg_addr);
    ADS1115_IIC_Get_ack();
	
		for(i=0;i<len;i++)
		{
				ADS1115_IIC_write_byte(*(Pdat+i));
				ADS1115_IIC_Get_ack();
			
		}
    ADS1115_IIC_stop();
}
/***************************************************************************************************************
*receive one bytes to 'pdata'
****************************************************************************************************************/

void IIC_ReadData(uint8_t i2c_addr, uint8_t reg_addr, uint8_t *pdat, uint8_t len)
{
		uint8_t j;
    ADS1115_IIC_start();
    ADS1115_IIC_write_byte((i2c_addr<<1)|0x00);
    ADS1115_IIC_Get_ack();
    ADS1115_IIC_write_byte(reg_addr);
    ADS1115_IIC_Get_ack();
    ADS1115_IIC_start();
    ADS1115_IIC_write_byte((i2c_addr<<1)|0x01);
    ADS1115_IIC_Get_ack();
	
	    for(j = 0; j <len; j++)
    {
				*pdat=ADS1115_IIC_read_byte();
        if(len==(j+1))
             ADS1115_IIC_NACK();
        else
           
						ADS1115_IIC_ACK();
        pdat++;
    }


    ADS1115_IIC_stop();
}


int16_t ADS1115_ReadAdsReg(uint8_t i2cAddress, uint8_t reg)
{
    uint8_t buf[2] = {0};
    
    IIC_ReadData(i2cAddress, reg, buf, sizeof(buf));
    return (buf[0] << 8) | buf[1];
}

void ADS1115_WriteAdsReg(uint8_t i2cAddress, uint8_t reg, uint16_t value)
{
		uint8_t buffer[2]={0};
     buffer[0] = (value >> 8); 
		 buffer[1] = value & 0xff;
    IIC_WriteBuf(i2cAddress, reg, buffer, 2);
}

四、部分代码说明

1、接线引脚定义

需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改

1.1、STC89C52RC+ADS1115 ADC模块

//ADS1115 ADC模块引脚定义
sbit IIC_SDA = P1^0;      //数据线
sbit IIC_SCL = P1^1;      //时钟线

//OLED0.96模块引脚定义
sbit SCL=P1^3; //串行时钟
sbit SDA=P1^2; //串行数据

1.2、STM32F103C8T6+ADS1115 ADC模块

//GPIOB
#define ADS1115_IIC_SCL     PBout(4) //SCL
#define ADS1115_IIC_SDA     PBout(3) //SDA	

//OLED0.96模块引脚定义					
#define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_8)//SCL
#define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_8)

#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_9)//SDA
#define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_9)

五、基础知识学习与相关资料下载

1、STC89C52RC程序下载 直戳跳转

2、STM32F103C8T6程序下载
(1)串口下载 直戳跳转
(2)ST-LINK下载 直戳跳转
(3)J-LINK下载 直戳跳转
(4)DAP-LINK下载 直戳跳转

3、OLED0.96程序说明 直戳跳转

4、串口助手下载与使用
(1)安信可调试助手使用 直戳跳转
(2) sscom33串口调试助手使用 直戳跳转
(3)STC-ISP串口调试助手使用 直戳跳转

六、视频效果展示与程序资料获取

视频连接 直戳跳转
资料获取 ( 滑到最后添加个人号)

七、注意事项

1、VCC GND请勿接反,接反易烧
2、OLED显示异常时,排除接线接触不良文章来源地址https://www.toymoban.com/news/detail-601505.html

八、接线说明

STC89C52RC


/************************************************************************************
//  功能描述   : ADS1115块测试程序
//  测试条件   : STC89C52RC   晶振11.0592
接线
ADS1115 -------------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
SCL------------------------------------P1^1
SDA------------------------------------P1^0

OLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
SCL------------------------------------P1^3
SDA------------------------------------P1^2
*************************************************************************************/

STM32F103C8T6

  
/************************************************************************************
//  功能描述   : ADS1115块测试程序
//  测试条件   : STM32F103C8T6   晶振8M  系统时钟72M
接线
ADS1115--------------------------------STM32F103C8T6
VCC-- ---------------------------------5V
GND- ----------------------------------GND
SCL- ----------------------------------PB_4 //SCL
SDA- ----------------------------------PB_3 //SDA	

OLED0.96
VCC-- ---------------------------------3.3V
GND- ----------------------------------GND
SCL- ----------------------------------PB_8 //SCL
SDA- ----------------------------------PB_9 //SDA	
*************************************************************************************/

到了这里,关于K_A37_005 基于STM32等单片机驱动ADS1115 ADC模块 串口与OLED0.96双显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K_A23_001 基于STM32等单片机AT指令驱动ESP-01/ESP-01S实现手机遥控点灯

    其他资料目录 直戳跳转 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M ESP-01/ESP-01S模块 STC89C52RC驱动ESP-01/ESP-01S模块 实现手机遥控点灯 STM32F103C8T6(标准库) 晶振8M/系统时钟72M ESP-01/ESP-01S模块 STM32F103C8T6驱动ESP-01/ESP-01S模块 实现手机遥控点灯 ESP-01/ESP-01S模块 引脚

    2024年01月21日
    浏览(41)
  • K_A08_009 基于 STM32等单片机驱动TB6612模块按键控制直流电机正反转加减速启停

    目录 一、资源说明 二、基本参数         1、参数         2、引脚说明 三、驱动说明         TB6612模块驱动说明         对应程序:         ENA ENB输出PWM 四、部分代码说明         接线说明                 1、STC89C52RC+TB6612模块                 2、STM32F

    2024年02月15日
    浏览(38)
  • K_A08_013 基于 STM32等单片机驱动大功率MOS管模块按键控制直流电机加减速启停

    目录 一、资源说明 二、基本参数         参数         引脚说明 三、驱动说明         大功率MOS模块驱动         对应程序: 四、部分代码说明         接线说明                 STC89C52RC+大功率MOS模块                 STM32F103C8T6+大功率MO

    2023年04月26日
    浏览(52)
  • K_A18_008 基于STM32等单片机驱动SGP30气体传感器串口与OLED0.96双显示

    其他资料目录 直戳跳转 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M SGP30气体传感器 模块 STC89C52RC驱动SGP30气体传感器模块串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M SGP30气体传感器模块 STM32F103C8T6驱动SGP30气体传感器模块串口与OLED0.96双显示 SGP30气体传

    2024年02月04日
    浏览(57)
  • K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示

    注:偏差校准步骤(均十六进制发送) 1、偏差校准命令 A5 21 0A D0(此处是在10CM处校准) 2、加载数据命令 A5 43 04 EC(断电重启后加载偏差补偿) 3、保存设置命令 A5 87 01 2D(保存设置后生效) 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M VL53L0X模块 STC89C52RC驱动VL53L0X模

    2024年02月13日
    浏览(38)
  • K_A35_017 基于STM32等单片机驱动TTP229矩阵触摸传感器 串口与OLED0.96双显示

    其他资料目录 直戳跳转 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M TTP229矩阵触摸模块 STC89C52RC驱动TTP229矩阵触摸模块 串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M TTP229矩阵触摸模块 STM32F103C8T6驱动TTP229矩阵触摸模块 串口与OLED0.96双显示 TTP229矩阵触摸传

    2024年02月02日
    浏览(46)
  • K_A12_014 基于STM32等单片机驱动S12SD紫外线传感器模块 串口与OLED0.96双显示

    注:PCF8591为8位ADC通过计算后分辨率会相对不是很理想 建议用10位及其以上ADC模块或者用STM32 具体计算公式可参考文档手册中CJMCU-S12D-test-arduino.txt文件 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M S12SD紫外线传感器模块 STC89C52RC采集S12SD紫外线传感器模块参数

    2024年02月05日
    浏览(51)
  • K_A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示

    单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M 水位检测传感模块 STC89C52RC驱动水位检测传感模块 串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M 水位检测传感模块 STM32F103C8T6驱动水位检测传感模块参数 串口与OLED0.96双显示 其他资料目录 直戳跳转 工作电压:

    2024年02月07日
    浏览(52)
  • K_A18_001 基于STM32等单片机采集MQ2传感参数串口与OLED0.96双显示

    单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M MQ2传感模块 STC89C52RC采集MQ2传感模块参数 串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M MQ2传感模块 STM32F103C8T6采集MQ2传感模块参数 串口与OLED0.96双显示 其他资料目录 直戳跳转 可以用于家庭和工厂的气体泄漏监

    2024年02月01日
    浏览(88)
  • K_A16_003 基于STM32等单片机采集薄膜压力传感器参数串口与OLED0.96双显示

    单片机型号 测试条件 模块名称 代码功能 STM32F103C8T6 晶振8M/系统时钟72M 薄膜压力传感器模块 STM32F103C8T6驱动薄膜压力传感器模块 串口与OLED0.96双显示 其他资料目录 直戳跳转 厚度 :0.4mm 样式 :薄片状,柔性 触发力 :20g,默认电阻值小于 200kΩ 时触发 压力感应范围 :20g~6kg

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包