Mehr I/O-Ports bereitstellen mit dem PCF8574

© Citadelle, 123RF

In Kontakt

Fehlen beim Messen ausreichend viele Ports, um die Daten zum RasPi zu führen, dann hilft ein kleiner Baustein weiter.

Dieser Teil unserer Artikelreihe beschäftigt sich mit dem PCF8574, einem 8-Bit-I/O-Baustein für den I2C-Bus. Sie betreiben ihn im Spannungsbereich von 2,6 bis 6 Volt. Der PCF8574 hat drei Adressleitungen, sodass man bis zu acht dieser Bausteine an einem Bus betreiben kann.

Es gibt noch eine Variante des PCF8574, den PCF8574/A. Er ist komplett baugleich, arbeitet aber mit einem anderen Adressbereich. Das ermöglicht es, acht weitere Bausteine am Bus zu betreiben. Der PCF8574 nutzt die Adressen 0x20h bis 0x27h; den PCF8574/A sprechen Sie über die Adressen 0x38h bis 0x3Fh an.

Den PCF8574 gibt es in verschiedenen Gehäuseformen; meist kommt das DIP16-Gehäuse zum Einsatz, das sich in Testaufbauten am einfachsten handhaben lässt. Abbildung 1 zeigt das Pinout des PCF8574/A.

Abbildung 1: Das Pinout des PCF8574/A.

Die I/O-Pins des PCF8574 weisen eine kleine Besonderheit auf, die einem schlaflose Nächte bereitet, wenn man sie nicht kennt: Er verwendet "quasi-bidirektionale I/O". Das bedeutet vorderhand, dass Sie einen I/O-Port sowohl für Eingabe als auch Ausgabe verwenden dürfen, ohne dies vorher auszuwählen. Anders als bei der GPIO-Schnittstelle des RasPi müssen Sie also vor dem Einsatz nicht definieren, ob Sie einen Port als In- oder Output verwenden wollen.

Beim PCF8574 verwenden Sie einen I/O-Pin als Input, indem Sie ihn einfach auf logisch 1 setzen. Lesen Sie diesen Port aus, erhalten Sie eine logische 1 oder 0 – je nachdem, wie Sie ihn beschaltet haben. Warum gibt es bei einem solchen Aufbau keinen Kurzschluss? Die Lösung findet sich im Datenblatt, genauer gesagt im Schemadiagramm der I/O-Ports (Abbildung 2).

Abbildung 2: Auszug aus dem Schemadiagramm der I/Os – wichtig ist hier die 0,1-mA-Konstantstromquelle.

Hier findet sich eine Konstantstromquelle, die den maximalen Ausgangsstrom bei einer logischen Eins auf maximal 0,1 Milliampere begrenzt. Um eine logische Null an dem Port zu erhalten, müssen Sie den Port also lediglich auf Masse legen. Die Konstantstromquelle sorgt dafür, dass es keine Kurzschlüsse gibt. Dabei handelt es sich um das reguläre Verhalten der I/O-Pins, sie stehen nach dem Einschalten alle auf logisch 1.

Wie verhält sich diese Schaltstufe nun als Output? Kurz gesagt wie ein Open-Drain-Output. Bei logisch 0 kann die Transistorstufe leicht 20 Milliampere gegen Masse fließen lassen, also in den Chip hinein. Das bringt eine LED zum Leuchten.

Bei logisch 1 gerät die Lage dann etwas anders: Der Strom aus dem Port heraus ist auf 0,1 Milliampere begrenzt. Das bedeutet, dass Sie damit nur relativ hochohmige Eingänge ansteuern können. In diesem Betriebsmodus lässt sich eine LED noch nicht einmal zum Glimmen bringen. Daher sind die Ports im Output-Betrieb so gut wie immer als Open Drain zu verwenden.

Eine letzte Anmerkung zur Ausgangsstufe: Die zwei in Sperrrichtung eingebauten Dioden sollen den Halbleiter vor negativen Spnnungsspitzen (induktiven Verbrauchern) und Verpolung schützen.

Damit ist aber auch schon alles gesagt, was Sie über den PCF8574 wissen müssen. Ansonsten benimmt sich der Baustein, wie Sie es von einem guten I/O-Chip erwarten dürfen. Im Datenblatt [1] finden sich noch viele zusätzliche Informationen, die helfen, den PCF8574 in einer Schaltung zu verbauen.

Aufbau

Zur Programmierung kommt auch hier wieder die in Teil 6 der Reihe vorgestellte Java-Umgebung zum Einsatz. Als Hardware für das Output-Beispiel fungieren dabei zwei 7-Segment-Anzeigen. Das zeigt sehr deutlich, dass die Ausgangsstufe des PCF8574 bei sehr hochohmigen Digitaleingängen des CD4543 saubere Spannungspegel erzeugt. Beim CD4543 handelt es sich um einen sehr flexiblen Decoder von BCD zum 7-Segment-Element, ein Blick in das Datenblatt [2] lohnt sich auf jeden Fall.

Im Input-Beispiel kommt ein Achtfach-"Mäuseklavier" zum Einsatz, mit dem Sie die I/O-Ports des zweiten PCF8574 auf Masse ziehen. Die acht Pullup-Widerstände sind bei den speziellen quasi-bidirektionalen I/Os des PCF8574 nicht unbedingt nötig, gehören aber zu einem guten Schaltplanlayout dazu, da Sie die I/Os sicher auf High-Pegel ziehen.

Die Abbildung 3 zeigt den fertigen Versuchsaufbau. Alle hier verbauten Komponenten erhalten Sie bei den bekannten Versandhändlern wie etwa Reichelt [3]. Abbildung 4 und Abbildung 5 zeigen die Schaltpläne für den Input- und den Output-Baustein. Die Schaltpläne liegen im gEDA-Format mit auf der Heft-DVD.

Abbildung 3: Der Versuchsaufbau.
Abbildung 4: Schaltplan für den Input.
Abbildung 5: Schaltplan für den Output.

Nachdem Sie alles zusammengebaut haben, testen Sie sicherheitshalber erst einmal mittels I2cdetect, ob alle Bausteine am I2C-Bus vorhanden sind. Mit den Werkzeugen I2cset und I2cget nehmen Sie gleich einen ersten Funktionstest vor (Listing 1).

Listing 1

 

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3f
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
$ i2cset -y 1 0x3f 0x99
$ i2cget -y 1 0x20
0x00

Falls dabei bereits sonderbare Fehler auftreten, ist vermutlich der I2C-Treiber nicht geladen. Das holen Sie mit gpio load i2c manuell nach, dann sollte alles wie gewünscht klappen.

Testprogramm

Das Testprogramm (Listing 2) fällt sehr einfach aus: Zuerst baut es die Verbindung zum Bus auf, danach erzeugt es die Geräte (Devices) für den In- und Output. Anschließend liest es einfach den Wert vom Mäuseklavier ein und gibt ihn auf der 7-Segment-Anzeige wieder aus – das war's.

Um das Programm zu bauen und zu starten, verwenden Sie das Tool J4pi (Listing 3). Sie starten das Programm testhalber über den Unix-Befehl Watch:

$ watch pi4j -r PCF8574

Das wirkt zwar etwas umständlich, lässt sich aber nicht vermeiden, da das Beispielprogramm auf eine Schleife verzichtet.

Listing 2

 

import com.pi4j.io.i2c.I2CBus;
import com.pi4j.io.i2c.I2CDevice;
import com.pi4j.io.i2c.I2CFactory;
public class PCF8574 {
  private static final int i2cBus = 1;
  private static final int addressIn  = 0x20;
  private static final int addressOut = 0x3f;
  public static void main(String[] args)  {
    try {
      I2CBus bus=I2CFactory.getInstance(I2CBus.BUS_1);
      I2CDevice devIn = bus.getDevice(addressIn);
      I2CDevice devOut = bus.getDevice(addressOut);
      devOut.write((byte)devIn.read());
    }
    catch(Exception e) {
      System.out.println(e.toString());
    }
  }
}

Listing 3

 

$ pi4j -c PCF8574.java
+ javac -classpath '.:classes:*:classes:/opt/pi4j/lib/*' -d . PCF8574.java
$ pi4j -r PCF8574
+ sudo java -classpath '.:classes:*:classes:/opt/pi4j/lib/*' PCF8574

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

12/2019
RasPi-Alternativen

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Grußbotschaften

    Mit Sonic Pi zaubern Sie komplexe Sounds, die Sie bei Bedarf sogar noch während des Abspielens modifizieren.

  • Das Runde und das Eckige

    Mit dem MCP4725 ergänzen Sie einen RasPi um einem D/A-Wandler, der bei Bedarf noch weitere Funktionen erfüllt.

  • Alles unter Kontrolle

    Schon ein einfaches Mikrocontrollerboard wie das CY8CKIT-049-42xx bietet erstaunlich viele Möglichkeiten beim Ansteuern von Hardware.

  • Viele Kerne

    Das Spresense Development Board von Sony lässt sich mit der Arduino IDE programmieren und bringt auch ein eigenes Entwickler-SDK mit.

  • Exotische Früchte

    Der aus China stammende Orange Pi positioniert sich mit einem guten Preis und interessanten Features gegen die RasPi-Truppe. Kann er sich auch behaupten?

  • Flexibler Surfer

    Mit dem neuen RasPi 4 setzen Sie einen öffentlichen Webkiosk schnell und kostengünstig auf.

  • Auskunftsfreudig

    Viele Devices, so auch der E.ON-Aura-Controller, verwenden eine Schnittstelle namens REST, um Zustandsdaten zu übermitteln. Mit ein wenig Bastelei lesen Sie diese auch über Ihr Smartphone aus.

  • Doppelt gemessen

    Mit wenig Aufwand und einem Pi Zero realisieren Sie einen mobilen Zweikanal-Spannungsprüfer.

  • Elegant zusammengeführt

    Tizonia streamt Musik von Online-Quellen und lokalen Sammlungen. Die schlanke Architektur macht den Player zur guten Wahl für den Einsatz auf dem RasPi.

  • Kommunikativ

    Nicht jeder traut sich zu, sein eigenes Smartphone zu bauen. Allerdings kann jeder Linux-Nutzer den Raspberry Pi im Handumdrehen zu einem VoIP-Telefon aufrüsten.