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