Arduino I2C Analog OUT Karte

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

 

Arduino-analog-out

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.

 

 

Die Analogwerte für die Kanäle 0 bis 3 können über die serielle Schnittstelle mit dem Tool „Serieller Monitor“ übergeben werden.

Im Programm werden die eingegebenen Zahlen von der seriellen Schnittstelle empfangen und auf die Analogkarte übertragen.

Demnächst mache ich ein Beispiel für die analoge Eingangskarte.

 

/* 
 ==============================================
             Test I2C-Analog OUT
 ==============================================
 
 Die Werte für die Analogkanäle können über die serielle Schnittstelle
 vorgegeben werden
 
 Kanal, Analogwert
 
 Kanal 0..3
 Wert  0.. 1023 = 10,23V
 
 */

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

int  SEL=32;         // serielle Datenlänge
char Empfang[32];  // Epfangsdaten der seriellen Schnittstelle
byte HBy;
byte LBy;
int WERT;
int KANAL;


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

void loop() { 
  int i=0;
  while (Serial.available() > 0) {
    KANAL =Serial.parseInt();  
    WERT = Serial.parseInt();  
    
    Serial.println(KANAL);  
    Serial.println(WERT); 

    
    HBy = WERT / 256;        //HIGH-Byte berechnen
    LBy = WERT - HBy * 256;  //LOW-Byte berechnen
  
    Wire.beginTransmission(I2C_OUT_ADDR); // Start Übertragung zur ANALOG-OUT Karte
    Wire.write(KANAL);                    // Kanal schreiben
    Wire.write(LBy);                      // LOW-Byte schreiben
    Wire.write(HBy);                      // HIGH-Byte schreiben
    Wire.endTransmission();               // Ende
  }
}

Speichere in deinen Favoriten diesen permalink.

5 Kommentare

  1. Hallo Herr Horter,

    ich habe vor ein paar Tagen ihre Analog Output Karte gekauft und gelötet. Ich möchte damit ein Drosselventil EFC 11 PPSU von AVS Römer ansteuern. Das Modul von Ihnen sollte hierfür geeignet sein. Ich habe das ganze mit Arduino Uno angegangen, doch momentan hänge ich daran, dass kein Signal am Ventil ankommt.

    Ich habe die SDA UND SCL mit den analogen PINS A4 und A5 verbunden. 5V und GND mit den 5V und GND vom Uno verbunden. Als Betriebsspannung sind 24V an dem 12V Zugang angeschlossen. GND des 12V Eingangs geht auf das GND des Netzteils. Steuersignal soll über A1 rausgehen. Dieses ist mit dem 0-10V Eingang des Ventils verbunden. GND von A1 ist mit GND des Netzteils verbunden. Adresse ist über die JP Stecker auf 176d gestellt. Ventil bekommt ebenfalls 24V und die GND sind mit dem GND des Netzteil verbunden.

    Ich bin gerade etwas ratlos, warum es nicht funktioniert. Haben Sie eine Idee?

    • Hallo,
      haben die Adresse des Moduls in Ihrem Arduino-Programm als 7-Bit Adresse angegeben?

      #include
      #define I2C_FS_ADDR 176 >> 1 // I2C-Funksender Adresse als 7 Bit
      ...

      Gruß, JH

  2. Hallo,

    klasse, danke Dir vielmals – mit so einer schnellen Antwort habe ich gar nicht gerechnet. Ich habe den Code soeben übertragen: alles gut. Damit habe ich jetzt schon mal eine gute Basis für mein Projekt.

    Dir einen schönen Abend,
    Christian

  3. Hallo,

    vielen Dank für das gute Beispiel. Ich habe mir das analog input Modul gekauft und würde mich wirklich sehr freuen, wenn hierzu ähnlich wie oben ein kurzes Beispiel veröffentlicht wird. Gibt es hierzu schon etwas – bin über jeden Schnipsel dankbar.

    Vielen Dank und ein schönes Wochenende,
    Christian

Schreibe einen Kommentar

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