ADS1015+STM32F407传感器通讯

目的

在使用ADS1015传感器时出现了一些问题,记录下,方便未来查看使用。

ADS1015介绍如下

在这里插入图片描述

硬件部分

ADS1015引脚功能,以及电路图如图所示。我使用的是右边那个。
在这里插入图片描述
在这里插入图片描述
ADS1015也可以同时使用多片,接线方式如图,地址为下方讲到。
在这里插入图片描述

软件部分

地址位的选择

在数据手册中可以看到,由管脚ADDR进行选择,默认悬空时由内部下拉电阻控制,即地址位1001000,但是实际上我们通常会后面加一位0。(后面会讲到)至于其他地址类似与此。
在这里插入图片描述

读写数据时序图

读写数据介绍

在这里插入图片描述

读数据时序图

在这里插入图片描述

写数据时序图

在这里插入图片描述

程序结构

由于在实际使用中,ADS1015常切换通道,所以常在配置寄存器和数据寄存器中切换,所以分成两种方式,一种是需要切换的,每次需要写入要读取的寄存器才能读取到数据寄存器,一种是固定的配置后,一直是读取数据寄存器,则无需写入,少去步骤1,2。

  • ADS1015在读取数据时主要步骤为:
  1. 向传感器发送 寄存器地址+读写控制位 。(这就是为什么上方说到实际上 地址位 加上一位,也可以理解网上的一写程序将地址设置为 90H)
  2. 向寄存器 Address Pointer Register 寄存器写入要读取的寄存器.
  3. 重复步骤一,但是注意!步骤一针对步骤二,是写入!!!但是步骤三针对步骤四,是读取。故此步骤一发送(90H|00H),步骤三发送(90H|01H)也可以见逻辑仪采集的图。
  4. 读取数据高字节。
  5. 读取数据低字节。
    在这里插入图片描述
    实际运行,读取数据如上图所示,其中00代表数据寄存器。1160是读取的数据寄存器的值。注意其中数据寄存器最后4位为无效位。在这里插入图片描述
  • ADS1015在写数据时主要步骤为:
  1. 向传感器发送 寄存器地址+读写控制位
  2. 向寄存器 Address Pointer Register 寄存器写入要写入的寄存器.
  3. 写入数据高字节。
  4. 写入数据低字节。

在这里插入图片描述
具体写入数据波形如上图, 其中D393为配置寄存器值。
在这里插入图片描述
在这里插入图片描述

出现的异常问题

在调试过程中,起先不晓得为啥子,数据读出来的老是乱码那种,起先我的iic协议也是随便找的一个修改的。出现了如下问题,在读取数据时,90H00H91H时都很正常,芯片也正常应答了,但是到读取数据时莫名其妙的异常了。在查找一番后。修改了接收部分程序,加入一延时,在程序中的注释后加入那个延时,程序正常。
在这里插入图片描述

/**
  * @brief  IIC读取1byte数据
  * @param  None
  * @retval None
  * @note             
  */
uint8_t iic_readbyte(unsigned char ack)
{
    uint8_t i;
    uint8_t recv_value = 0;
    IIC1_SDA(GPIO_PIN_SET);		
    iic_delay(2);	  
	
	  SDA_IN();//SDA设置为输入
    for (i = 0; i < 8; i++)
    {
        IIC1_SCL(GPIO_PIN_SET);
        iic_delay(10);
        recv_value <<= 1;
        if (IIC1_SDA_IS_HIGH())
        {
            recv_value |= 0x01;
        }
        else
        {
            recv_value &= ~0x01;
        }
				iic_delay(2);
				IIC1_SCL(GPIO_PIN_RESET);
************************************************************************
				iic_delay(10);//后加入
************************************************************************

    }
	  SDA_OUT();     //sda线输出
		
		if (!ack)
        iic_nack();//发送nACK
    else
        iic_ack(); //发送ACK   
    return recv_value;
}

修改程序后,波形正常,数据正常。
在这里插入图片描述

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值