I2C-Module am Raspberry PI

Mit dem I2C-Repeater können 5V I2C-Slaves direkt am Raspberry PI angeschlossen werden. Der abgebildete Testaufbau zeigt in der unteren Reihe neben dem Raspberry PI unser

  • I2C Digital-Input-Modul (8 Bit 5-24V)
  • I2C Digital-Output Modul (8 Bit 5-24V)
  • I2C Analog-Input Modul (5 Kanäle 10 Bit Auflösung)
  • I2C Analog-Output Modul (4 Kanäle 10 Bit Auflösung)

In der oberen Reihe sind die neuen Simulationsbaugruppen abgebildet. Mit Ihnen kann man die digitalen Eingänge simulieren, fünf Analogwerte zwischen 0-10V vorgeben und mit dem Messgerät die Spannungen sehen, die das analoge Output-Modul ausgibt.

Raspberry-PI mit I2C-Modulen

Raspberry-PI mit I2C-Modulen

 

I2C-Adressen der Baugruppen am Raspberry PI herausfinden

Am Raspberry-können die Baugruppen dann mit folgendem Befehl am Bus detektiert werden:

i2cdetect -y 1

Als Antwort vom PI bekommt man diese Tabelle aufgelistet:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- 38 -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- 58 -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Daraus ergeben sich folgende Adressen der Module:

  • 20hex ist das digitale Ausgabemodul (PCF 8574)
  • 38hex ist das digitale Eingabemodul (PCF 8574A)
  • 08hex ist das analoge Eingabemodul
  • 58 hex ist das analoge Ausgabemodul

Bei allen Modulen sind die Jumper auf Low (unten).

Digitale Ausgänge schalten

Zum Schalten der Ausgänge am Output-Modul muss die I2C-Adresse des Slaves und der Wert als Bitmuster  gesendet werden.

Alle Ausgänge EIN-schalten

i2cset -y 1 0x20 0x00

Alle Ausgänge AUS-schalten

i2cset -y 1 0x20 0xFF

Alle unsere digitalen Module haben eine negative Logik. Das liegt an den PCF8574 Bausteinen, die bei Spannung EIN immer high-Signale ausgeben. Damit keine unbeabsichtigten Handlungen der Steuerung ausgeführt werden haben wir die Logik gedreht. Im Programm müssen die Ein- und Ausgänge invertiert werden.

 

Digitale Eingänge einlesen

Um die Eingänge der digitalen 8bit Karte einzulesen geben Sie folgenden Befehl ein:

i2cget -y 1 0x38
0xFF

0xFF zeigt Ihnen, dass alle LEDs der Eingabekarte AUS sind.

Schalte ich alle Schalter meiner Simulationsbaugruppe EIN leuchten die Eingänge des Input-Moduls.  Frage ich die Karte erneut ab bekomme ich oxoo zurück.

i2cget -y 1 0x38
0x00

Auch hier bitte die negative Logik der Module beachten.

 

Analoge Ausgänge schreiben

Um einen Analogwert auszugeben müssen drei Bytes zum I2C-Slave geschrieben werden.

Byte 1    Kanal-Nummer
Byte 2    Analogwert Low Byte
Byte 3    Analogwert High Byte

Im mit i2cset mehrere Bytes zu senden muss der Befehl i2cset mit der Option i aufgerufen werden.
Andere begriffe sind i2cset multiple bytes oder i2cset write I2C Block Data

Spannung Dezimalwert Hexadezimalwert High-Byte Low-Byte
0 V 0 0x0000 0x00 0x00
5 V 500 0x01F4 0x01 0xF4
10 V 1000 0x03E8 0x03 0xE8

um z.B. 5 Volt auf Kanal 0 auszugeben muss folgender Befehl eingegeben werden:

i2cset -y 1 0x58 0x00 0xF4 0x01 i

Dieser Befehl stellt den Kanal 2 auf 10V ein

i2cset -y 1 0x58 0x02 0xE8 0x03 i

und damit wieder zurück auf 0V

i2cset -y 1 0x58 0x02 0x00 0x00 i

 

 

 

10 Kommentare

    • Hallo,
      Sie brauchen nur die vier Klemmen miteinander Verbinden
      +5V GND SDA SCL.
      Wenn am Repater die Lötbrücke LB2 nicht gesetzt ist (Standard) müssen Sie 5V an einer SPS-Karte einspeisen.
      Diese 5V können auch von einem zweiten Netzteil kommen.

      Mit der Lötbrücke LB1 wird das INT-Signal auf den GPIO17 durchgeschaltet.
      Mit der Lötbrücke LB2 können Sie die 5V-Spannung des Raspberry für die SPS-Baugruppen verwenden.

      Hier noch ein Beispiel wie die SPS-Baugruppen über den I2C-Repeater an den Raspberry-Pi angeschlossen werden.
      die graue INT-Leitung endet an der Eingabekarte. Die 5V-Versorgung, GND, SDA und SCL wird parallel durchverdrahtet.

  1. Hallo,
    ich verwende 2x AI-Karten, 2x DO-Karten, 1x AO-Karte und 1xDI-Karte die alle sehr ähnlich geschaltet sind wie oben auf dem Bild. Ebenfalls hat durch nutzen der Jumper jede Karte seine eigene Adresse. Nun zum Problem. Solbald man mit dem Finger über den PCF8574-Chip eine Digitalen Karte streicht oder auch nur in der nähe ist, wechselt diese im Millisekundentakt ihre Adresse. Sollte man sich wieder entferne braucht diese dann ca. 2 Sekunden um zu ihrer Ursprungsadresse zurückzukehren. Die Analogen Karten haben dieses Problem nicht. Allerdings wechseln alle Analogen Karten nach aus und einschalten des Netzteils dauerhaft ihre Adresse bis zum nächsten aus und einschalten. Ich vermute irgendeine Störung, allerdings habe ich keine Idee wo ich anfangen sollte zu suchen. Vielleicht haben sie ja eine Idee.

    • Hallo,

      bitte mal die Versorgungsspannung nachmessen. Die 5V sollten stabil anliegen.
      Dann ev. die Adress-Pins mal mit dem Voltmeter nachmessen und auf kalte Lötstellen prüfen.
      Wichtig auch dass die Massen der einzelnen Karten gut verbunden sind.
      I2C-Busleitungen so kurz wie möglich halten.
      Haben Sie den Repeater verwendet?
      im Ruhezustand muss zwischen SDA und GND sowie SCL und GND 5V anliegen.
      Gruß, JH

      • Danke für die schnelle Antwort.

        Versorgungspannung liegt konstant bei 5V.
        Masse ist überall verbunden und funktioniert auch.
        Die Busleitung ist maximal 5cm zwischen jeder Karte.
        Repeater wird verwendet und auch die 5V liegen zwischen SDA – GND und SCL – GND an.
        Was genau meinen Sie mit Adress Pins?
        Grundsätzlich funktioniert auch jede Karte ordnungsgemäß, außer das die Adresse nicht gleich bleiben.

  2. Hallo,
    ich habe folgendes Problem. Wenn ich i2cdetect -y 1 ausführe kommen wie oben genannt die selben Adressen. Wenn ich i2cget -y 1 0x20 ausführe spricht es bei mir die digitale Eingabekarte an. Dies ist auch bei Codesys das selbe Problem wähle ich die digitale Ausgabekarte wird über den Test die Eingabekarte geschaltet. Was mache ich falsch?

Schreibe einen Kommentar

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