MAD7991は4チャンネルのADコンバータ(AD7991)を搭載したモジュールです。 I2Cシリアルインターフェースでコントロールすることができます。 4チャンネルの入力として使うか、3チャンネル入力とリファレンス入力として使うかを選択できます。
ADコンバータAD7991のデータシートはアナログデバイスの こちらのページからダウンロードできます。
Arduinoとの接続は次の回路図の通りです。I2Cの信号線、SCL, SCAは2.2kΩの抵抗でプルアップしています。
setup()でI2Cの動作周波数は3.4MHz(ハイスピードモード)に設定します。 I2Cのアドレスはボードの取り扱い説明書右下の「仕様」にある通り0x28です。 A/D変換のデータを読み込むだめには、AD7991のレジスタ、上位4ビットで設定します。
#include <Wire.h> #define AD7991_ADDRESS 0x28 // AD7991のI2Cアドレス (データシート参照) #define MAX_CLOCK 3400000 // I2Cの動作周波数 340kHz #define REG_CH0 0x10 // チャンネル0 #define REG_CH1 0x20 // チャンネル1 #define REG_CH2 0x40 // チャンネル2 #define REG_CH3 0x80 // チャンネル3 void setup() { // put your setup code here, to run once: Wire.begin(); // 接続の初期化 Wire.setClock(MAX_CLOCK); // I2Cの動作周波数 Serial.begin(115200); } uint16_t readADC(uint8_t channel) { Wire.beginTransmission(AD7991_ADDRESS); Wire.write(channel); // チャンネル選択 Wire.endTransmission(); delay(10); // データ準備の待機 Wire.requestFrom(AD7991_ADDRESS, 2); // 2バイトのデータを要求 if (Wire.available() == 2) { uint8_t msb = Wire.read(); uint8_t lsb = Wire.read(); return ((uint16_t)(msb&0x07) << 8)+lsb; // 12ビットデータの取得 } return 0; // エラー時 } void loop() { char chr[256]; // put your main code here, to run repeatedly: uint16_t adcValue = readADC(REG_CH0);// チャンネル0からデータを取得 sprintf(chr,"%04x ",adcValue); Serial.print(chr); adcValue = readADC(REG_CH1); // チャンネル1からデータを取得 sprintf(chr,"%04x ",adcValue); Serial.print(chr); adcValue = readADC(REG_CH2); // チャンネル2からデータを取得 sprintf(chr,"%04x ",adcValue); Serial.print(chr); adcValue = readADC(REG_CH3); // チャンネル3からデータを取得 sprintf(chr,"%04x\n",adcValue); Serial.print(chr); delay(50); // 500ms待つ }