Нумерация аналоговых входов
?
Код: Выделить всё
#include <Wire.h>
uint16_t config_1115 = 0xC3E3; // первичная конфигурация, AI-0, 4,096 В
void setup(){
Wire.begin();
for(int16_t a=0; a<1; a++){ // Первичная инициализация, не обязательна. a<1 для х48
Wire.beginTransmission(0x48 | a);
Wire.write(0x01);
Wire.write((uint8_t)(config_1115 >> 8));
Wire.write((uint8_t)(config_1115 & 0xFF));
Wire.endTransmission();
}
Serial.begin(38400);
}
void loop(){
int16_t data_array[16]; // данные без конверсии, чистые данные АЦП
int16_t adr1115;
int16_t chanel1115;
// цикл для 100k
for (int16_t i=0; i<16; i+4){ // первые два бита, младшие, адрес мс, след. два - номер канала.
adr1115 = 0x0048 | (i & 0x0003); // готовим адрес
// читаем данные из предыдущего запроса
Wire.beginTransmission(adr1115);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(adr1115, 2);
data_array[i] = (Wire.read() << 8) | Wire.read(); // данные без конверсии!!!
// даём команду на следующее преобразование, изменив номер канала в конф. регистре
chanel1115 = ((i>>2) + 1) & 0x0003;
config_1115 = 0xC3E3 | chanel1115 << 12;
Wire.beginTransmission(adr1115);
Wire.write(0x01);
Wire.write((uint8_t)(config_1115 >> 8));
Wire.write((uint8_t)(config_1115 & 0xFF));
Wire.endTransmission();
delay(1); // т.к. нет других мс, 3 шт
Serial.println("Chanel " + String(i/4) + " = " + String(float(data_array[i] * 0.000125),6)); // *4 для данных из 1 мс
}
// delay(500); // реже опрос
}
Понял, попробую