Arduino I2C Analog IN Karte

Mit diesem Programmbeispiel für den Arduino wird die Funktion der I2C-AIN Karte gezeigt.

Unten im Bild die analog Eingabekarte und die analog Ausgabekarte.
Darüber ein Analogwertsimulator 0..10V und ein Messmodul mit dem sechs Analogsignale angezeigt werden können.

Im Beispielprogramm werden jede Sekunde die 4 Analogwerte von der I2C-Analog-Eingangskarte gelesen und über der seriellen Monitor ausgegeben.

unten im Bild die analog Eingabekarte und die analog Ausgabekarte. Darüber ein Analogwertsimulator 0..10V und ein Messmodul mit dem sechs Analogsignale angezeigt werden können.

 

 

/* 
 ==============================================
             Test I2C-Analog IN
==============================================

 Von der Analogwerte werden 11 Bytes gelesen und in 
 ein Array abgelegt. 
 
 Byte 0   Zeiger
 Byte 1   Analogwert 0 Low Byte
 Byte 2   Analogwert 0 High Byte
 Byte 3   Analogwert 1 Low Byte
 Byte 4   Analogwert 1 High Byte
 Byte 5   Analogwert 2 Low Byte
 Byte 6   Analogwert 2 High Byte
 Byte 7   Analogwert 3 Low Byte
 Byte 8   Analogwert 3 High Byte
 Byte 9   Analogwert 4 Low Byte
 Byte 10  Analogwert 4 High Byte

 Anschließend werden die die Analogwerte berechnet und
 an die serielle Schnittstelle geschrieben.
 */

#include <Wire.h>
#define I2C_IN_ADDR   16 >> 1 // I2C-INPUT-Addresse als 7 Bit

int AIN_1[11];         // Array mit 11 Werten anlegen
int i;
int Analogwert[4];     // Analogwerte Kanal 0-4


void setup() {
  // Serielle Schnittstelle konfigurieren
  Serial.begin(9600);       
  // I2C-Pins definieren
  Wire.begin();             
}

void loop() {

  // 11 Bytes von Analogkarte lesen
  Wire.requestFrom(I2C_IN_ADDR, 11); 

  //  Werte in Array kopieren
  for(i=0;i<11;i++)                  
  {
  int c = Wire.read();
  AIN_1[i]=c;
  }

  // Werte berechnen. Analogwert = Highbyte * 256 + Lowbyte 
  Analogwert[0] = AIN_1[2] * 256 + AIN_1[1];
  Analogwert[1] = AIN_1[4] * 256 + AIN_1[3];
  Analogwert[2] = AIN_1[6] * 256 + AIN_1[5];
  Analogwert[3] = AIN_1[8] * 256 + AIN_1[7];
  Analogwert[4] = AIN_1[10] * 256 + AIN_1[9];
 
 
  // Werte auf die serielle Schnittstelle ausgeben
  Serial.print ("Kanal 0 = ");  Serial.println(Analogwert[0]);
  Serial.print ("Kanal 1 = ");  Serial.println(Analogwert[1]);
  Serial.print ("Kanal 2 = ");  Serial.println(Analogwert[2]);
  Serial.print ("Kanal 3 = ");  Serial.println(Analogwert[3]);
  Serial.print ("Kanal 4 = ");  Serial.println(Analogwert[4]);
  Serial.println("=============");
  
  // 1 Sekunde warten
  delay(1000);              
}

 

So sieht es dann am „Serial Monitor“ aus.

Analogwerte am Serial Monitor

Analogwerte am Serial Monitor

 

Speichere in deinen Favoriten diesen permalink.

4 Kommentare

  1. Hallo,

    die Ausgabe bei dem Skript ist immer eine 3-stellige Zahl (wie auch im Bild oben). Wenn man die Zahl mit 10 multipliziert kriegt man ungefähr Millivolts die am Eingang anliegen. Gibt der Sensor also (Highbyte * 256 + Lowbyte= 10*mV)? Ist es so weil es bei 10Bit Auflösung nicht genauer geht?

    Grüße
    Konstantin

    • Hallo,
      die Karte kann 10 Bit also 1024 Digits.
      Ein Digit sin 10mV. Das ist richtig.

      Wir haben jetzt auch eine 8-Kanalige 12-Bit Analogkarte entwickelt.
      Die hat 4096 Digits und damit eine Auflösung von 2,5 mV

      Den Bausatz gibt es demnächst im Onlineshop
      I2AE8C-Bk „Bausatz I2C-Analog IN 8 Kanal 12-Bit“
      29,90€ mit festen Klemmen, 33,90€ mit steckbaren Klemmen.

      Wer schnell eine braucht bitte per Mail melden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert