PiFace Digital 2 am Raspberry PI
Auf den ersten Blick macht das PiFace einen tollen Eindruck: ein Print der genau auf den Raspberry passt, mit 8 digitalen Eingängen, 8 Open Collector-Ausgängen, und sogar zwei Relais. Die Anschlüsse sind mit Schraubklemmen ausgerüstet, so dass auch jemand ohne vertiefte Elektronikkenntnisse dieses Modul einsetzen könnte.
Vier der Eingänge sind mit einem Taster auf dem Print verbunden. Der Zustand aller Ausgänge wird durch eine LED angezeigt, so dass man ohne externe Beschaltung sofort loslegen kann.
Eigentlich erstaunlich, dass dieses Modul nicht bekannter ist. Ich wollte es genauer wissen und habe eins gekauft.
In der Verpackung: ein Print im Antistatik-Beutel, und sonst gar nichts, auch nicht der allerkleinste Zettel. Auf der Schachtel steht etwas ausführlicher was im ersten Satz dieses Posts steht, und ein Link zu element14.com.
Dort findet man tatsächlich ein getting-started.pdf mit Informationen zum Produkt.
Erste Ueberraschung: auf den Relais steht 250V 10A, aber das Dokument erlaubt maximal 20V und 5A. Vermutlich liegt das am Layout denn die Pins sind recht nahe zusammen und die Schraubklemmen sind eher klein. 20V sind aber schon sehr wenig, das reicht ja nicht mal für die gebräuchlichen 24V-Anlagen.
Ein Uebersichtsbild zeigt wie die Schraubklemmen belegt sind, und welche Jumper wo zu finden sind. Fast alle Jumper sind klar beschrieben, bis auf Jumper 7 der mit der Stromversorgung der Ausgänge zu tun hat.
Beim weiterlesen fällt auf, dass die Open-Collector Ausgänge nur eingeschränkt nutzbar sind: wenn mehr als 5V ansteht sollen die Relais und die Schutzdiode per Jumper deaktiviert werden.
Sowohl zu den Eingängen als auch zu den Ausgängen gibt es Beispiele wie sie beschaltet werden sollen. Das ist gut gemacht.
Dokumentation
Ausser dem erwähnten PDF habe ich keine offizielle Dokumentation gefunden.
Mit etwas Grübeln findet man heraus dass das Board auf dem MCP23S17 basiert. Das ist ein Port-Expander mit SPI-Anschluss. Bei microchip.com gibt es das Datenblatt dazu.
Ein Schema gibt es offiziell auch nicht, aber im Internet habe ich eines gefunden das recht glaubwürdig aussieht. Es sind allerdings nur vier LEDs eingezeichnet, es ist also möglicherweise das Schema der älteren Version.
Ansteuerung
Das Modul wird vom PI über den SPI-Bus angesteuert. Das getting-startet.pdf beschreibt wie der Raspberry konfiguriert werden muss um das Board zu bedienen. An dieser Stelle ist das Dokument eher zu ausführlich, denn bei meinem Raspbian war die zugehörige Software bereits installiert. In den meisten Fällen wird es also nur nötig sein den SPI-Bus zu aktivieren.
Prinzipiell könnte ein PI mehrere dieser Boards ansteuern, denn sie haben eine einstellbare Adresse. Wie das mechanisch aussehen würde, weiss ich allerdings nicht, denn auf dem Board gibt es keine Kontakte um ein zweites Modul aufzustecken.
Wie gesagt, pifacedigitalio war bereits installiert. Die wichtigsten Funktionen davon sind im PDF dokumentiert. Dank Schaltern und LEDs auf dem Modul kann man es tatsächlich innerhalb von Minuten installieren und ausprobieren.
Selbstverständlich wollte ich genauer wissen wie das Interface angesteuert wird, und hier wird es wirklich schwach: keine Angabe.
Ein Programm zum Auslesen der Register war schnell geschrieben und gab mir den aktuellen Zustand des Chips aus. Anhand der Ausgaben fand ich heraus, dass pifacedigitalio den Chip so initialisiert dass GPA ein Ausgang ist, und GPB ein Eingang mit aktiven Pullups. Zudem ist die Interrupt-Erkennung auf dem Eingangsport aktiviert.
Weil die Taster den Eingang mit der Masse verbinden, steht eine 1 im Register wenn sie nicht gedrückt sind.
Nach dem Powerup, ohne Initialisierung durch die Software, sind beide Ports als Eingang konfiguriert und die Pullups sind inaktiv. Deshalb können die Taster nicht gelesen werden.
Die Beschaltung der Eingänge
Weil ich vor allem die Eingänge nutzen will, habe ich die genauer unter die Lupe genommen.
Sie sind nicht galvanisch getrennt, was bei der Beschaltung berücksichtigt werden muss. Ohne Pullups kann man eine Spannung von 3.3V anlegen und bekommt die erwartete 1 im Register. Der Eingang ist offensichtlich sehr hochohmig und hat eine gewisse Speicherkapazität, denn auch wenn die Spannung wegfällt zeigt das Register noch sekundenlang eine 1 an. Es ist also nicht ratsam, den Eingang floaten zu lassen.
Mehr als 3.3V würde ich nicht riskieren, nach dem inoffiziellen Schema sind die Eingänge direkt mit dem Chip verbunden, und der läuft mit 3.3V.
Leider gibt es keine Schraubklemme für diese Spannung. Es ist also nicht so einfach, den Eingang korrekt zu versorgen. Alle Pins des Raspberry werden durch den Print belegt, deshalb kann man die Spannung nicht vom Raspberry nehmen. Die einzige Möglichkeit die ich gefunden habe: an den Addressjumpern gibt es in der Default-Einstellung einen offenen Pin mit der Betriebsspannung. Hässlich aber noch knapp besser als etwas anzulöten.
Die Variante mit den Pullups überzeugt ebenfalls nicht: der Pullup hat einen Wert von 100MΩ! Das PDF behauptet zwar, dass es nur 10 sind, aber das Datenblatt von Microchip gibt 100 an. Mit einem Multimeter kam ich auf 3.3V bei offenem Eingang, und 0.03mA wenn der Pin über das Messgerät mit der Masse verbunden ist.
So lange ein Schalter direkt auf dem Print oder sehr sehr nahe dran ist, wird es sauber funktionieren. Längere Verbindungen vom Modul zu den Schaltern sind wahrscheinlich sehr störungsempfindlich.
Wenn kein mechanischer Schalter verwendet wird, muss auf jeden Fall sichergestellt sein dass der Off-Widerstand deutlich grösser als diese 100MΩ ist.
Fazit
Eigentlich eine ausgezeichnete Idee, allerdings mit sehr schwacher Dokumentation und fragwürdiger Praxistauglichkeit.