Schaltung
Hier die Schaltung als PDF.
Serielle Schnittstelle

Zur seriellen Schnittstelle gibt es eigentlich nicht viel zu sagen, der RS232-Treiber (MAX3232) hängt direkt am UART5. Zu Messzwecken sind die TTL-Signale an J6 verfügbar. Soll eine andere Schnittstelle benutzt werden, können die Leitungen zwischen J6 und J2 aufgetrennt und ausgehend von J6 nach Wunsch verdrahtet werden. Verwendet werden neben TxD und RxD auch die Handshake-Leitungen RTS und CTS. Über einen 9-poligen Sub-D-Stecker stehen die Signale dann zur Verfügung.
Seltsamerweise haben alle käuflichen Erweiterungs-Platinen, die ich kenne, hier immer eine Buchse, also bspw. wie ein Modem, und keinen Stecker wie beim PC.
Ein Wort zu den Kondensatoren: ich habe sie für eine Versorgung von 3..5 V ausgelegt. Da tatsächlich nur 3,3 V anstehen würden auch 4×100 nF ausreichen. Größere Kondensatoren schaden aber auch nicht.
Der Stützkondensator CX3 ist optional. Ich habe jedoch die Erfahrung gemacht, dass er bei den RS232-Treibern vorteilhaft sein kann.
Relais-Treiber
Die Relaistreiber sind auch keine Hexerei. Der Basiswiderstand ist auf rund 2 mA dimensioniert und garantiert damit eine Treiberleistung des Transistors bis 200 mA. Der 10 kΩ Pulldown sorgt dafür, dass die Relais nicht flattern bis die Ports nach einem Reset als Ausgang programmiert sind.
Die Spannungsspitzen beim Abschalten der Relais werden über Dioden auf eine 33 V-Zenerdiode geleitet. Durch die hohe Zenerspannung wird zum einen die Energie der Spule sehr schnell abgebaut (das Relais schaltet schneller ab, was der Lebensdauer der Kontakte zugute kommt), zusätzlich wird das Signal Tpulse erzeugt.
Hier könnte die dafür nötige Zeit softwaremäßig gemessen werden. Es können dann kurze Messimpulse erzeugt werden (die zu kurz sind um das Relais zu schalten) und mit der gemessenen Zeit der Schaltzustand ermittelt werden. Wie?
Die Snubber-Kombinationen (10 kΩ+100 nF) sind zwar nicht unbedingt erforderlich, sorgen jedoch für ein sanftes, EMV-gerechtes Abklingen der Energie der Spule.
Die Relaistreiber sind Open Collector, d.h. es ist theoretisch möglich, andere als 5 V-Relais bis zu 24 V anzusteuern, sofern eine entsprechende Versorgung zur Verfügung steht. Dessen Masse muss natürlich mit der des Pi verbunden sein. Die vorgesehene Zeitmessung über Tpulse ist jedoch bei höheren Spannungen u.U. nicht mehr möglich.
Die Transistoren werden durch die 33 V-Zenerdiode gegen Spannungsspitzen geschützt, sie sind jedoch nicht Kurzschlussfest.
Relais-Versorgung
Bei der Verwendung von 5 V-Relais steht die entsprechende Versorgung am Stecker J4 zur Verfügung.
Die Pin-Belegung von J4 ist verpolungstolerant, d.h. bei verdreht gestecktem J4 schalten zwar die Relais nicht wie gedacht, aber es geht nichts kaputt.
Um die Pi-Versorgung sauber und die Belastung des evtl. schwachen Steckernetzteils gering zu halten wurde hier der Speicherkondensator C2 (2200 µF) eingefügt, der lediglich über 330 Ω geladen wird.
Dessen Energie reicht aus, um ein bipolares Relais zu schalten, er benötigt jedoch ca. zwei Sekunden um danach wieder ausreichend geladen zu sein, was für unseren Zweck aber mehr als ausreicht.
Falls monostabile Relais verwendet werden funktioniert dieser Trick nicht und R14 ist dann durch 0 Ω zu ersetzen, wobei C2 entfallen kann.
Das Netzteil muss dann den zusätzlichen Strom stemmen können.
EEPROM
Zur Konformität mit der HAT-Spezifikation wurde ein EEPROM 27C32 hinzugefügt. So können die I/O-Pins bereits beim Booten konfiguriert werden.
Es herrscht eine gewisse Unsicherheit, welche Typen hier verwendet werden können, ich habe den Microchip 24LC32A eingesetzt, der auch gut funktionierte.