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