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.

/*
==============================================
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.


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.
Hallo,
gibt es ein Beispiel für 4-20mA (Kit I2C analog input 4 channel 18 bit with MCP3424) für Arduino.
Danke,
Gruß
Gill
mit google findet man zahlreiche Beispielcode für den Arduino
Suchbegriff mcp3424 arduino example