我正在尝试使用I2C串行协议与连接到arduino屏蔽板上的MCP3426 ADC芯片进行通信,并且在...方面经验不足,所以我有很多问题。首先让我解释一下系统。
当前,我将MCP3426A1-E-S / N芯片(数据表在这里:https://ww1.microchip.com/downloads/en/DeviceDoc/22226a.pdf)连接到PCB,该PCB使用插头引脚连接到arduino UNO。 Vdd和Vss分别连接到5V arduino电源和GND。仅使用一个通道,其正输入连接到MCP4725 DAC,负输入连接到2.5V参考电压。现在,我只是试图查看是否可以从ADC读取信号,而不必通过DAC发送信号。这是我编写的代码:
#include <Wire.h>
void setup(void) {
Serial.begin(9600);
Wire.begin();
}
void loop(void) {
int adcValueRead = 0;
int adcValueRead1 =0;
int adcValueRead2=0;
//address of MCP3426A1-E/SN corresponding to 0b1101010
Wire.beginTransmission(0x6A);
//configuration register corresponding to 0b10001000 which is a one-shot
//conversion in channel 1 and a 16 bit resolution
Wire.write(0x88);
delay(500);
//requestion 3 bytes from the MCP3426 address
Wire.requestFrom(0x6A, 3);
adcValueRead= Wire.read();
adcValueRead1=Wire.read();
adcValueRead2=Wire.read();
Serial.print("\tADC Value: ");
Serial.print(adcValueRead);
Serial.print(" ");
Serial.print(adcValueRead1);
Serial.print(" ");
Serial.print(adcValueRead2);
Serial.print('\n');
}
当我打开串行监视器时,得到的值是:
ADC Value 0 21 16
所以我有几个问题,首先是我是否正确解释了数据手册,而0x6A实际上是地址,而0x88是我想要的正确配置寄存器。我相信可以在这里找到数据表的相关部分:
address byte(datasheet pg. 20)和configuration resgister (datasheet pg. 18)
现在,如果我正确地解释了数据手册,那么在转换之后,我应该期待三个8位字节,前两个是16位的电压值,第三个字节是配置寄存器。因此,我知道我的程序会返回
ADC Value 128 0 136
我认为这是因为两个输入之间的电压差应为2.5V(因为我没有通过DAC发送任何东西),该电压差为5V的一半,应对应于1000000000000000的16位字节,第三个字节应与我最初发送的配置寄存器相同。当然,那不是我得到的,我不确定为什么。
您可能会说,有一些我不太了解的非常基本的基本知识,我只是想尽我所能正确地解释数据表。我对系统的解释是否正确,我的代码/连接是否存在问题,或者对系统的解释不正确,实际上我应该期望ADC值为“ 0 21 16”。请让我知道是否还有其他需要知道的信息,但是对帮助我了解我的系统的任何帮助将不胜感激。