Связь с чипом АЦП MCP3426 с использованием I2C и Arduino - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь связаться с микросхемой АЦП MCP3426, подключенной к экрану Arduino, используя последовательный протокол I2C и с небольшим опытом в ... ну, во всем, что у меня есть куча вопросов.Сначала позвольте мне объяснить систему.

В настоящее время у меня есть микросхема MCP3426A1-ES / N (таблица данных находится здесь: https://ww1.microchip.com/downloads/en/DeviceDoc/22226a.pdf), подключенная к печатной плате, которая подключена к Arduino UNO с помощью выводов заголовка. Vdd и Vss подключены к5V Arduino питания и GND соответственно. только один канал используется с положительным входом, соединенным с MCP4725 ЦАП и отрицательный вход которого соединен с опорным 2,5В напряжения. Прямо сейчас, я просто пытаюсь увидеть, если я могу читать сигналс АЦП без обязательной отправки сигнала через ЦАП. Вот код, который я написал:

#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 является правильным регистром конфигурации для того, что я хочу. Соответствующие части таблицы данных, которые я считаю, можно найти здесь:

адрес байта (таблица данных на стр. 20) и регистр конфигурации (таблица данных pг.18)

Теперь, если я правильно интерпретирую таблицу данных, после преобразования мне следует ожидать три 8-битных байта, причем первые два - это значение напряжения в 16 битах, а третий - конфигурациярегистр.Поэтому, зная это, я ожидаю, что моя программа вернет

ADC Value 128 0 136

Причина, по которой я считаю, это потому, что разница напряжения между двумя входами должна составлять 2,5 В (так как я не посылаю ничего через ЦАП)который, будучи половиной 5 В, должен соответствовать 16-битному байту 1000000000000000, а третий байт должен быть тем же регистром конфигурации, который я отправил изначально.Это, конечно, не то, что я получил, и я не уверен, почему.

Как вы, вероятно, можете сказать, есть некоторые довольно базовые фундаментальные вещи, которые я не очень понимаю, и я просто пытаюсь интерпретироватьТаблица данных так правильно, как я могу.Таким образом, правильна ли моя интерпретация системы и есть ли что-то не так с моим кодом / соединениями, или моя интерпретация системы неверна, и на самом деле я должен ожидать "0 21 16" в качестве значений моего АЦП.Пожалуйста, дайте мне знать, если есть какая-либо другая информация, которую нужно знать, но любая помощь в объяснении моей системы будет принята с благодарностью.

...