HAT Brick

Features

  • Raspberry Pi HAT im Standard-HAT-Formfaktor
  • Acht Anschlüsse für Bricklets
  • Integrierte 5,2V Stromversorgung (6V-36V Eingang, bis zu 4A)
  • Misst USB- und DC-Spannungsversorgung
  • Bietet eine Real-Time Clock für den Raspberry Pi
  • Bietet Schlafmodus (Low Power) und Watchdog

Beschreibung

Der HAT Brick ist ein Raspberry Pi HAT im Standard-HAT-Formfaktor. Der Brick ist zur HAT-Spezifikation konform und funktioniert automatisch und ohne Änderungen mit Raspbian.

Mit dem HAT Brick können bis zu acht Bricklets an ein Raspberry Pi angeschlossen werden.

Bemerkung

Der HAT Brick besitzt 7-Pol-Bricklet-Anschlüsse. Über ein 7-Pol- <-> 7-Pol-Kabel können Bricklets an den Brick angeschlossen werden. Es werden nur Bricklets unterstützt, die über einen 7-poligen Anschluss verfügen.

Der Raspberry Pi kann über den HAT Brick mit einer externen 6V-28V DC Stromversorgung betrieben werden. Die integrierte Stromversorgung liefert auch unter großer Last stabile 5V für den Raspberry Pi. Somit können auch angeschlossene Bricklets und verbundene USB-Geräte versorgt werden. Das HAT Brick liefert hierfür eine etwas erhöhte Spannung von 5,2V.

Alternativ können HAT Brick und Raspberry Pi auch über USB-C versorgt werden. In diesem Fall muss allerdings sichergestellt werden, dass die Stromversorgung stabile 5V bietet. Dies ist zum Beispiel mit dem offiziellen Raspberry Pi Universal-Netzteil möglich. Die USB/DC Versorgungsspannungen werden vom HAT gemessen und sind über die API zugänglich.

Der HAT Brick bietet eine Real-Time Clock mit Super-Cap Backup, die direkt mit dem Raspberry Pi verbunden ist. Mit dieser kann der Raspberry Pi für eine angegebene Zeit ausgeschaltet werden. Somit kann der Raspberry Pi auch in batteriebetriebenen Anwendungen eingesetzt werden, zum Beispiel in einer Anwendung, in der Sensorinformationen jede Stunde in die Cloud geschickt werden sollen.

Mit dem HAT Brick kann ein Watchdog implementiert werden, der den Raspberry Pi neustartet, wenn sich dieser aufhängt oder das eigene Programm steckenbleibt.

Der HAT Brick ist elektronisch kompatibel zu den Raspberry Pis 2B, 3B, 3B+, 4B, 5, Zero und Zero W. Die Befestigungslöcher sind kompatibel zum Raspberry Pi 2/3/4/5. Zusätzlich bieten wir mit dem HAT Zero Brick eine kleinere Version, deren Befestigungslöcher zum Raspberry Pi Zero kompatibel sind.

Beispielprojekt: Nutze HAT Brick + Raspberry PI 4 mit Thermal Imaging Bricklet und LCD 128x64 Bricklet um eine 1-Bit Repräsentation des Wärmebildes auf dem LCD 128x64 zu zeigen. Der Quellcode kann hier gefunden werden.

Technische Spezifikation

Eigenschaft Wert
Stromverbrauch 100mW (20mA bei 5V)
   
Bricklet-Anschlüsse 8
DC Eingangsspannungsbereich 6V-36V
DC Ausgang 5,2V, max. 4A
Stromverbrauch im Sleepmodus (≤1.4)* 70mW (14mA bei 5V) + 1.5mW wenn die Sleep-LED aktiv ist
   
Abmessungen (B x T x H) 65 x 56 x 25mm (2,56 x 2,20 x 0,98")
Gewicht 30g

*: Dieser Wert ist für den HAT Brick in Hardware-Version 1.4 oder kleiner.

Ressourcen

Erste Schritte

HAT Brick mit Funktionsblöcken

Um den HAT Brick verwenden zu können, muss zuerst der Brick Daemon auf dem Raspberry Pi installiert werden. Der Brick Daemon agiert als Proxy zwischen den Brickletanschlüssen des HAT Brickss und den API Bindings. Er kümmert sich auch um die Real-Time Clock.

Nachdem der Brick Daemon installiert wurde, kann der HAT Brick auf den Raspberry Pi gesteckt und dieser neugestartet werden.

Anschließend kann der Brick Viewer genutzt werden, um sich mit dem HAT Brick und den angeschlossenen Bricklets zu verbinden. Der Brick Viewer kann entweder direkt auf dem Raspberry Pi oder auf einem externen PC, der über Ethernet oder WLAN Zugriff auf den Raspberry Pi besitzt, installiert werden. Von einem externen PC aus muss sich auf den Hostnamen oder die IP des Raspberry Pis verbunden werden, vom Raspberry Pi aus auf localhost.

Im Brick Viewer sollte ein Tab namens "HAT Brick" und für jedes angeschlossene Bricklet ein weiterer Tab angezeigt werden.

HAT Brick in Brick Viewer

Im HAT Brick Tab des Brick Viewers können der Schlafmodus getestet und die gemessenen Spannungen betrachtet werden.

Sollte unklar sein, ob der HAT Brick korrekt erkannt wurde, kann ein Blick in den Ordner /proc/device-tree/hat/ auf dem Raspberry Pi helfen:

cd /proc/device-tree/hat/
echo Name: "$(tr -d '\0'<name)", Product: "$(tr -d '\0'<product)",  Product ID: "$(tr -d '\0'<product_id)", Vendor: "$(tr -d '\0'<vendor)"

Dies sollte etwa das folgende ausgeben:

Name: hat, Product: HAT Brick, Product ID: 0x084e, Vendor: Tinkerforge GmbH

Falls der Order nicht exisitiert, oder die Ausgabe nicht korrekt ist, war die Installation nicht erfolgreich. Dann sollte geprüft werden, ob der HAT Brick korrekt verbunden wurde und ob der Raspberry Pi nach dem aufstecken neugestartet wurde.

Konfiguration für verbesserten Durchsatz

Ein HAT Brick sollte bis zu ca. 1000 SPITFP-Nachrichten (SPI Tinkerforge Protokoll) voller Größe (64 Byte Nutzlast) pro Sekunde übertragen können, vergleichbar mit einem Master Brick. Die Nachrichten werden über einen SPI-Bus welcher Bricklets auf dem HAT mit dem Raspberry Pi verbindet übertragen.

Mit Raspbian 2019-06-20 oder neuer hängt die SPI-Geschwidigkeit von der aktuellen CPU-Frequenz ab. Die CPU-Frequenz wird unter Raspbian vom so genannten Governor kontrolliert. Standardmäßig ist der Governor auf ondemand eingestellt. Dies bedeutet dass die CPU-Frequenz anhand der Last skaliert wird.

Daher ist Standardmäßig der Durchsatz höher desto höher die CPU-Auslastung ist. Die CPU-Frequenz-Skalierung kann ausgestellt werden in dem der Governor auf performance eingestellt wird.

Dies kann über das Kommandozeilentool cpufreq-set erfolgen:

sudo apt-get install cpufrequtils
sudo cpufreq-set -g performance

Um dies permanent zu machen kann die cpufrequtils-defaults-Datei genutzt werden:

sudo su
apt-get install cpufrequtils
echo 'GOVERNOR="performance"' > /etc/default/cpufrequtils
reboot

Dadurch wird der Governor während des Bootvorgangs automatisch in den Performande-Modus gebracht.

Low Power Sleep Modus

Der HAT Brick kann den Raspberry Pi mit einer konfigurierbaren Ausschaltzeit aus- und einschalten.

Es kann auch konfiguriert werden, dass die Bricklets ebenfalls abgeschaltet werden sollen. Zusätzlich kann die blaue Status-LED deaktiviert, oder, um den Sleep-Modus anzuzeigen, auf ein Blink-Intervall von einer Sekunde konfiguriert werden.

Während der Raspberry Pi ausgeschaltet ist, läuft die Real-Time Clock weiter. Die Uhrzeit wird beim Neustart wieder korrekt gesetzt.

Die Sleep-Modi werden in der API-Beschreibung der Funktion SetSleepMode genauer beschrieben.

Watchdog

Der HAT Brick kann als Watchdog für den Raspberry Pi genutzt werden. Er kann den Raspberry Pi neustarten, falls sich dieser oder ein eigenes Programm aufhängt.

Um einen Watchdog zu implementieren können die Sleep Delay und Sleep Duration Parameter der SetSleepMode Funktion genutzt werden, wie im folgenden Beispiel (in Python) gezeigt wird:

while True:
        hat.set_sleep_mode(10, 2, True, False, False)
        time.sleep(1)

Der Beispielcode teilt dem HAT Brick in jedem Schleifendurchlauf mit, den Raspberry Pi in 10 Sekunden neuzustarten. Dies erfolgt einmal pro Sekunde, in jedem Schleifendurchlauf wird der Neustart somit auf in 10 Sekunden zurückgesetzt. Falls der Raspberry Pi sich aufhängt, erfolgt dieser Reset nicht mehr und der Raspberry Pi wird nach 10 Sekunden neugestartet.

Die Schleife kann als eigenständiges Programm implementiert werden. Alternativ kann der SetSleepMode Aufruf in der Hauptschleife einer eigenen Anwendung, die auf dem Raspberry Pi läuft, eingebaut werden, um diese gegenüber Abstürzen robust zu machen.

Real-Time Clock

Der HAT Brick bietet eine I2C Real-Time Clock (Echtzeituhr), welche direkt mit dem Raspberry Pi verbunden ist. Die Uhr wird automatisch vom Raspberry Pi erkannt. Mit dmesg kann überprüft werden ob die Uhr korrekt erkannt wurde. Es sollte ein Eintrag wie der folgende existieren:

[    3.850299] rtc-pcf8523 1-0068: rtc core: registered rtc-pcf8523 as rtc0

Falls NTP nicht zur Verfügung steht, muss das Datum und Uhrzeit einmal gesetzt werden. Anschließend kann mit folgenden Kommando:

hwclock --systohc

die Uhrzeit des Raspberry Pi auf die Real-Time Clock übertragen werden. Dies ist nur einmal notwendig.

Steht NTP zur Verfügung, so wird die Real-Time Clock automatisch aktualisiert.

Der Brick Daemon stellt sicher, dass Datum und Uhrzeit automatisch nach einem Neustart von der Real-Time Clock übernommen werden.

Ohne Brick Daemon kann dies mit dem folgenden Kommando durchgeführt werden:

hwclock --hctosys

Kompatibilität zu anderen Boards und Images

Wird Raspbian genutzt, wird der HAT Brick automatisch erkannt und kann verwendet werden. Die Pins werden automatisch für eine Kommunikation mit Bricklets konfiguriert, indem die gespeicherte HAT-Konfiguration aus dem EEPROM des HAT Brick gelesen wird.

Wird ein Linux-Image, welches das raspi-config-Framework nicht bietet, oder ein anderes Board mit Raspberry Pi kompatiblen GPIO-Pinheadern, aber anderem Prozessor genutzt, funktioniert das nicht automatisch.

In diesem Fall kann der Brick Daemon die notwendige SPI- und GPIO-Pinkonfiguration vornehmen, falls sie in der Datei /etc/brickd.conf angegeben wird.

Für ein Standard-Raspberry Pi beispielsweise:

bricklet.group0.spidev = /dev/spidev0.0

bricklet.group0.cs0.driver = gpio
bricklet.group0.cs0.name = gpio23
bricklet.group0.cs0.num = 23

bricklet.group0.cs1.driver = gpio
bricklet.group0.cs1.name = gpio22
bricklet.group0.cs1.num = 22

bricklet.group0.cs2.driver = gpio
bricklet.group0.cs2.name = gpio25
bricklet.group0.cs2.num = 25

bricklet.group0.cs3.driver = gpio
bricklet.group0.cs3.name = gpio26
bricklet.group0.cs3.num = 26

bricklet.group0.cs4.driver = gpio
bricklet.group0.cs4.name = gpio27
bricklet.group0.cs4.num = 27

bricklet.group0.cs5.driver = gpio
bricklet.group0.cs5.name = gpio24
bricklet.group0.cs5.num = 24

bricklet.group0.cs6.driver = gpio
bricklet.group0.cs6.name = gpio7
bricklet.group0.cs6.num = 7

bricklet.group0.cs7.driver = gpio
bricklet.group0.cs7.name = gpio6
bricklet.group0.cs7.num = 6

bricklet.group0.cs8.driver = gpio
bricklet.group0.cs8.name = gpio5
bricklet.group0.cs8.num = 5

Als erstes muss das SPI-Device, das genutzt werden soll, konfiguriert werden (/dev/spidev0.0 für den Raspberry Pi). Anschließend müssen ein GPIO-Treiber, sowie Name und Nummer des GPIOs für jeden Chip Select Pin definiert werden. Es gibt acht Chip Selects für die acht Bricklet-Anschlüsse und ein Chip Select für den HAT Brick selbst.

Wird ein komplett anderes Board genutzt, so kann der Schaltplan des Boards Aufschlüsse darüber bieten, wie die Konfiguration angepasst werden muss. tinkerunity.org bietet eine Möglichkeit, Hilfe zu finden.

Errata Hardware Version 1.5

Peinlicherweise haben sich in HAT Brick hardware version 1.5 zwei Bugs eingeschlichen.

Diese Bugs wurden erst nach der ersten Produktion gefunden und wir hatten zu der Zeit bereits keinen Lagerbestand mehr. Daher haben wir uns dazu entschieden die Fehler nach der Produktion zu beheben.

HAT Brick mit Bug fixes

Wie in dem Foto zu sehen ist gibt es zwei "Mod Wire" auf der Unterseite des Bricks.

Ohne diese Fixes

  • Funktionieren USB-C- nach USB-C-Kabel nicht (USB-C nach USB-A funktionieren immer).
  • Schlägt dar Batteriepuffer der Echtzeituhr sporadisch fehl wenn das Brick vom Strom getrennt wird.

Wenn bei einem HAT Brick 1.5 eines dieser Feature genutzt werden soll die "Mod Wires" auf der Unterseite fehlen, bitte einfach bei uns melden, wir ersetzen das HAT Brick dann.

Seit dem 24. September 2020 haben alle verschickten HAT Bricks beide Fixes!

Programmierschnittstelle

Siehe Programmierschnittstelle für eine detaillierte Beschreibung.

Sprache API Beispiele Installation
C/C++ API Beispiele Installation
C/C++ für Mikrocontroller API Beispiele Installation
C# API Beispiele Installation
Delphi/Lazarus API Beispiele Installation
Go API Beispiele Installation
Java API Beispiele Installation
JavaScript API Beispiele Installation
LabVIEW API   Installation
Mathematica API Beispiele Installation
MATLAB/Octave API Beispiele Installation
MQTT API Beispiele Installation
openHAB API Beispiele Installation
Perl API Beispiele Installation
PHP API Beispiele Installation
Python API Beispiele Installation
Ruby API Beispiele Installation
Rust API Beispiele Installation
Shell API Beispiele Installation
Visual Basic .NET API Beispiele Installation
TCP/IP API    
Modbus API