目的
在使用ADS1015传感器时出现了一些问题,记录下,方便未来查看使用。
ADS1015介绍如下
硬件部分
ADS1015引脚功能,以及电路图如图所示。我使用的是右边那个。
ADS1015也可以同时使用多片,接线方式如图,地址为下方讲到。
软件部分
地址位的选择
在数据手册中可以看到,由管脚ADDR进行选择,默认悬空时由内部下拉电阻控制,即地址位1001000,但是实际上我们通常会后面加一位0。(后面会讲到)至于其他地址类似与此。
读写数据时序图
读写数据介绍
读数据时序图
写数据时序图
程序结构
由于在实际使用中,ADS1015常切换通道,所以常在配置寄存器和数据寄存器中切换,所以分成两种方式,一种是需要切换的,每次需要写入要读取的寄存器才能读取到数据寄存器,一种是固定的配置后,一直是读取数据寄存器,则无需写入,少去步骤1,2。
- ADS1015在读取数据时主要步骤为:
- 向传感器发送 寄存器地址+读写控制位 。(这就是为什么上方说到实际上 地址位 加上一位,也可以理解网上的一写程序将地址设置为 90H)
- 向寄存器 Address Pointer Register 寄存器写入要读取的寄存器.
- 重复步骤一,但是注意!步骤一针对步骤二,是写入!!!但是步骤三针对步骤四,是读取。故此步骤一发送(90H|00H),步骤三发送(90H|01H)也可以见逻辑仪采集的图。
- 读取数据高字节。
- 读取数据低字节。
实际运行,读取数据如上图所示,其中00代表数据寄存器。1160是读取的数据寄存器的值。注意其中数据寄存器最后4位为无效位。
- ADS1015在写数据时主要步骤为:
- 向传感器发送 寄存器地址+读写控制位 。
- 向寄存器 Address Pointer Register 寄存器写入要写入的寄存器.
- 写入数据高字节。
- 写入数据低字节。
具体写入数据波形如上图, 其中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;
}
修改程序后,波形正常,数据正常。