使用I2C和Arduino与MCP3426 ADC芯片通信

时间:2018-11-24 20:25:08

标签: arduino i2c

我正在尝试使用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”。请让我知道是否还有其他需要知道的信息,但是对帮助我了解我的系统的任何帮助将不胜感激。

0 个答案:

没有答案