I2C-Analog Input 8 Kanäle 0-10V 10 Bit

Unsere analoge Eingangskarte haben wir weiterentwickelt.
Folgende Verbesserungen haben wir in das neue Design einfließen lassen

  • Acht Eingangskanäle je 10 Bit
  • Abtastrate 250 Hz
  • Busanschluss-Stecker

Hardware

Gesteuert werden alle Vorgänge auf der Karte von einem Mikrokontroller (PIC 18F13K22). Dieser stellt die Verbindung zwischen dem I2C-Bus und den A/D-Wandlern her. Er sorgt dafür dass die Daten in den Registern mit einer Frequenz von 250 Hz aktualisiert werden..
Der minimale Wert eines Registers liegt bei 0x0000 (dec. 0) der Maximale 0x03FF (dec. 1023). Die A/D-Wandler messen gegen eine interne Referenzspannung von 2,048 Volt. Somit entspricht der maximale Wert einer messbaren Spannung von 2,048 Volt am Eingang. Mit entsprechenden Eingangswiderständen lässt sich der Messbereich der Karte erweitern.

Downloads

Datenblatt   Schaltplan

 

Allgemeines

Die neue Analog-In Karte verfügt über insgesamt 8 AD Wandler mit einer Auflösung von 10 Bit. Die Analog-In Karte ist komplett Register gesteuert. Alle Daten werden in lese- und schreibbaren Registern gespeichert.

Außerdem hat die Karte zwei Stecker für den Busverbinder bekmmen.

I2C-Adresse

Wie bei allen Karten kann man die I2C-Adresse innerhalb eines gewissen Rahmens wählen.

I2C-Adressen sind immer als 7+1 Bit Adressen aufgebaut. Das letzte Bit entscheidet darüber ob der Master lesen oder schreiben will.
Auf gerade I2C-Adressen wird immer geschrieben – von ungeraden Adressen wird immer gelesen.

Beim Raspberry muss die 7-Bit Adresse angegeben werden. Die Umschaltung des letzten Adress-Bits wird vom PI selbst gesteuert.

Analog IN 8-Bit dez 8-Bit hex 7-Bit dez 7-Bit hex
OFF OFF OFF OFF 16 10 8 08
OFF OFF OFF  ON 18 12 9 09
OFF OFF  ON  OFF 20 14 10 0A
OFF OFF  ON    ON 22 16 11 0B
OFF  ON  OFF OFF 24 18 12 0C
OFF  ON  OFF  ON 26 1A 13 0D
OFF  ON  ON  OFF 28 1C 14 0E
OFF  ON  ON  ON 30 1E 15 0F
 ON  OFF OFF OFF 48 30 24 18
 ON  OFF OFF  ON 50 32 25 19
 ON  OFF  ON  OFF 52 34 26 1A
 ON  OFF  ON  ON 54 36 27 1B
 ON  ON  OFF OFF 56 38 28 1C
 ON  ON  OFF  ON 58 3A 29 1D
 ON  ON  ON OFF 60 3C 30 1E
 ON  ON  ON  ON 62 3E 31 1F

Datenübertragung

Eigentlich ist die Karte zum Messen da und zum Auslesen der gemessenen Spannungen. Es gibt aber einen Wert den man schreiben kann, den Register-Zeiger. Mit ihm ist es möglich einen bestimmten Kanal auszulesen. er ist 1 Byte lang.

Nach Spannung ein ist das Register auf Null gestellt. Somit werden die Analogwerte ab Kanal 0 gelesen.

Bei der Datenübertragung können beliebig viele Bytes gelesen werden.
•die Anzahl der Bytes muss immer ungerade sein (1, 3, 5 usw.)
•alle Registerwerte werden mit dem LSB voran gelesen
•alle überflüssigen Leseoperationen werden ignoriert.

Im einfachsten Fall liest man immer 17 Bytes von der Analogeingabekarte und bekommt so alle Werte wie folgt in einem Datenarray abgelegt

Byte 1 Zeiger
Byte 2 Analogwert 1 Low Byte
Byte 3 Analogwert 1 High Byte
Byte 4 Analogwert 2 Low Byte
Byte 5 Analogwert 2 High Byte
Byte 6 Analogwert 3 Low Byte
Byte 7 Analogwert 3 High Byte
Byte 8 Analogwert 4 Low Byte
Byte 9 Analogwert 4 High Byte
Byte 10 Analogwert 5 Low Byte
Byte 11 Analogwert 5 High Byte
Byte 12 Analogwert 6 Low Byte
Byte 13 Analogwert 6 High Byte
Byte 14 Analogwert 7 Low Byte
Byte 15 Analogwert 7 High Byte
Byte 16 Analogwert 8 Low Byte
Byte 17 Analogwert 8 High Byte

 

Beispiel für I2C-RS232-Modem 2 oder I2C-USB-Modem

Im Beispiel wird mit dem Befehl 51 das Auslesen der 17 Bytes von der Analogkarte angest0ßen. Die empfangenen Daten werden in das Array D(x) abgelegt.

Aus dem Byte D(2) und D(3) wird dann der erste Analogwert berechnet indem man das High-Byte mit 255 multipliziert und das Low-Byte einfach hinzuaddiert. Eine Multiplikation mit 255 entspricht ein links schieben um 8 Bitstellen.

Option Explicit
'Globale Variablen anlegen, die in der Funktion "Modem_Antwort"
'beschrieben werden

Dim FB           'Frame Befehl
Dim FA           'Frame Anzahl
Dim FE           'Frame Ende
Dim D(1 To 128)  'Daten
Private Sub Command_LESEN_Click()
'Der Befehl I2C-Data 33 hex = 51 dez.
'liest oder schreibt bis zu 128 Bytes vom I2C-Slave
Dim Adr
Adr = Combo_AIN_Adresse   'Adresse aus Cobo-Box

SENDBYTE (51)       'Befehl 51 = I2C-DATA
SENDBYTE (3)        'Frame Anzahl = 3
SENDBYTE (Adr + 1)  'Bus-Adresse des I2C-ADC zum Lesen
SENDBYTE (0)        'Adresse MSB
SENDBYTE (17)       '17 Byte lesen
SENDBYTE (4)        'Endekennung

If Modem_Antwort = True Then
         'Analogwerte eintragen
    TextBox_AIN1.Text = D(3) * 256 + D(2)
    TextBox_AIN2.Text = D(5) * 256 + D(4)
    TextBox_AIN3.Text = D(7) * 256 + D(6)
    TextBox_AIN4.Text = D(9) * 256 + D(8)
    TextBox_AIN5.Text = D(11) * 256 + D(10)
    TextBox_AIN6.Text = D(13) * 256 + D(12)
    TextBox_AIN7.Text = D(15) * 256 + D(14)
    TextBox_AIN8.Text = D(17) * 256 + D(16)
Else
    MsgBox ("Fehler bei I2C-AIN")
End If

End Sub

 

 

 

 

Speichere in deinen Favoriten diesen permalink.

14 Kommentare

  1. Hans Günter S.

    Hallo Herr Horter,
    Ich arbeite mit einen RaspberryB Python3 und smBus Modul
    Die Eingangsbaugruppen mit dem PCF8574 kann abfragen und das klappt sehr gut
    Probleme habe ich bei der abfrage de Analogeingänge der 8kanal 10bit Baugr.
    hardware scheint in ordnung zu sein (wird als adr hex08 erkannt und die geteilte spannung liet am IC(I2C-AE8-PIC) an

    Mit welchen kommandos kann ich den PIC in PHYTON3/SMbus füttern/abfragen
    Gibt es Programmbeispiele in PHyton3 zum „abkupfern“

    Vielen Dank für Ihre Mühe
    Hans Günter

    • Hallo Hans Günter,
      hier finden Sie Beispiele für Phyton I2C-Analog-Input-Modul mit Python und TkInter
      Die 8-Kanal Input Baugruppe läuft prinzipiell genau wie die 5 kanalige.
      Sie müssen anstatt 11 Bytes nur 17 Bytes lesen und entsprechend aus multiplizieren.
      Leider kann es bei Phyton vorkommen, dass der erste Kanal nicht richtig eingelesen wird. Wir hatten erst Clock-Stretching in Verdacht aber der Analogbaustein macht kein Clock-Stretching mehr, sondern stellt die Analogwerte eigentlich sofort zur Verfügung.
      Unter C scheint es keine Probleme zu geben. Nur die smBus-lib hat hier Probleme. Wir suchen noch nach der Ursache.

  2. Funktioniert die 8*12 bit Karte identisch zur 8*10 bit Karte (evtl. abgesehen von der Skalierung)?
    Funktioniert mit der Karte das C Programm „I2C-Analog Input am PI mit C einlesen“?
    Momentan bricht das Programm bei mir immer ab mit
    (program exited with code: 1)

    Die Karte selbst finde ich mit i2cdetect unter der Adresse 16#8

    • Die Datenstruktur ist bei der 12-Bit Analog-IN Karte (I2AE8C) die gleiche wie bei der 10-Bit (I2AE8)

      Können Sie mal versuchen die Register mit dem Befehl
      i2cdump -y 1 0x08
      zu lesen

  3. Hallo Herr Horter,
    Wir haben die Analogbaugruppe auf einer Autarken Hütte in Betrieb um sämtliche Daten zu erfassen. Nun würde gerne an einem Analogeingang 0-60V messen. Was für Eingangswiderständen müsste ich einbauen?

    Mit freundlichen Grüßen
    Dominik

    • Hallo Dominik,
      Die Spannung am Eingang des PICs mus 0-2,048V Betragen.
      Du brauchst theoretisch einen Spannungsteiler 60:2.
      In der Widerstandsreiche E24 gibt es aber keine exakt passenden Werte
      Mit 300k und 10k kommt man auf einen Spannungsbereich von 0..2000 = 0-62V
      Du kannst aber auch die Widerstände 0-10V drin lassen und einen Spannungsteiler 1:6 von den Eingang machen.
      Das wären dann 100k und 20k
      Bei 60V am Spannungsteiler fallen genau 10V am 20k Widerstand ab.

      Spannungsteiler 6:1
      Gruß, JH

  4. Hallo Herr Horter,
    auch ich bin stolzer Besitzer eines I2AE8 mit 8 analogen EIngängen und würde mich freuen, wenn Sie mir einen FB schicken würden, mit dem ich in Codesys die Karte auslesen kann.
    Mit freundlichen Grüßen
    Achim Kern

  5. Hallo Herr Horter,

    Würde mich ebenfalls sehr über den Baustein FB_I2AE8 für codesys freuen.
    Können Sie mir ihn zuschicken?
    Danke im voraus.

    Grüße
    Rolf

  6. Hallo Herr Horter,
    gibt es für die I2C-Analog Input 8 Kanäle 0-10V 10 Bit eine Codesys Unterstützung oder wie kann man das Device I2HAE für codesys von 5 auf 8 Kanäle ändern?

    Viele Grüße
    Volker

    • Hallo Volker,
      einen Funktionsbaustein für die Analoge Eingangskarte schicke ich Ihnen per Mail.
      Den können Sie dann ganz einfach in Ihr Programm einbauen und parametrieren.
      Codesys-FB für Analoge EIngangskarte 8-Kanal 10 Bit (I2AE8)

      • Sehr geehrter Herr Horter,
        ich hätte auch sehr gern den Funktionsbaustein. Ich bedanke mich schonmal im Voraus.

        Mit freundlichem Gruß
        Marcel

      • Hallo Herr Horter,
        ich habe auch das Problem das ich nur die ersten 5 Eingänge des Moduls auslesen kann.
        Könnten sie mir bitte auch den Funktionsbaustein zusenden.
        Vielen Dank im voraus.

Schreibe einen Kommentar zu Marcel Antworten abbrechen

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