Pirozeda-HAT: Unterschied zwischen den Versionen

Aus Hobbyelektronik.org
Wechseln zu: Navigation, Suche
(Bestücken der Leiterkarte: typo)
(Download)
Zeile 643: Zeile 643:
 
=Download=
 
=Download=
 
[[Datei:Pirozeda_hat.zip]] enthält:
 
[[Datei:Pirozeda_hat.zip]] enthält:
* Designdaten im EAGLE-Format '''Achtung: Bisher nicht verifiziert!'''
+
* Designdaten im EAGLE-Format
 
+
* Quellen des Bootloaders von Peter Dannegger
[[Kategorie:AVR]]
+
* Quellen der Firmware + flashbare Images
[[Kategorie:Protokoll]]
+
* Scripts für die Einrichtung der Optionen
[[Kategorie:Reverse Engineering]]
 
[[Kategorie:Raspberry Pi]]
 
[[Kategorie:Solar-Anlage]]
 
[[Kategorie:Pirozeda]]
 
  
 
[[Kategorie:AVR]]
 
[[Kategorie:AVR]]

Version vom 21. März 2019, 23:07 Uhr

Wie bereits im Hauptartikel und im Blog erwähnt, sind bei der ersten Leiterkarte ein paar Dinge unschön.

Deshalb habe ich mich noch einmal hingesetzt und ein Design mit anderen Kompromissen erstellt:

  • Entspricht (größtenteils) den Raspberry Pi HAT-Spezifikationen (inkl. EEProm)
  • Neben dem Optokoppler kann man nun auch einen ADUM1301 verwenden
  • ...oder einfach Widerstände, wenn man sich der Sache sicher ist
  • Mit ADMUM1301 oder Direktverbindung können nun hardwareseitig einfach Firmware-Updates aufgespielt und der µC resettet werden
  • Am Mikrocontroller gibt es nun die Option für zwei, vom Raspi für eine Status-LED
  • Es gibt nun eine RTC (DS1307Z), um direkt nach einem Neustart oder bei fehlendem Netzwerk loggen zu können
  • Der I2C des Raspberry ist auf eine Stiftleiste herausgeführt, ideal für eines dieser kleinen OLED-Displays.
  • Ein GPIO des Raspberry ist auf einen Taster herausgeführt

Ein großer Kompromiss ist, dass das Layout (wieder) nicht so richtig für den Raspberry Pi B passt. Die Buchse für den Bus kann bei "normalem" Boardabstand (in der Höhe) nicht bestückt werden. Zwar kann ein Flachbandkabel direkt an die Kontaktflächen gelötet werden, so richtig schön ist das allerdings auch nicht.

Ich habe die verschiedenen Platzierungsmöglichkeiten durchprobiert aber mit dem Featureset ist es mir nicht gelungen, die Buchse an eine andere Stelle zu packen.

Die Mini-DIN-Buchse ist übrigens rausgeflogen, weil sie - neben dem großen Platzbedarf - keinen wirklichen Mehrwert hat. Konfektionierte Kabel konnte ich bis jetzt nicht finden und selber bauen ist eher fummelig. Da reicht es schon, einen Mini-DIN-Stecker zu löten. die Stiftwanne seitlich an die Leiterkarte zu Löten ist zwar Geschmackssache aber in Hinblick auf Platz das Beste, was mir eingefallen ist. Es steht natürlich jedem frei, das Design zu verbessern.

Bestückungsvarianten

Durch die verschiedenen Möglichkeiten für das Interface gibt es einige Bestückungsoptionen. Drei für das eigentliche Interface und je nachdem, wie viele Zusatzfeatures aktiviert werden sollen, noch ein paar mehr:

Variante 1: Direkt

Noch nicht aufgebaut und getestet.

Mit der Bestückungsvariante "direkt" kann ich nur abraten, habe sie aber der Vollständigkeit halber erstellt. Problem an ihr ist, dass neben der gemeinsamen Masse mit der Solaranlage Backfeed entstehen kann, wenn der Raspberry Pi keine Stromversorgung hat. Der Strom wird zwar über Widerstände begrenzt, Fehlfunktion kann aber nicht ausgeschlossen werden.

Diese Variante ist eher für diejenigen, die sich der Sache sicher sind.

Einen Vorteil gibt es natürlich auch: es ist die günstigste Variante und wenn ein UART-Bootloader geflasht wurde lässt sich der AVR darüber updaten.

Menge Referenz Wert Package Reichelt Bestellcode
1 SV2 MA03-2 SL 2X40G 2,54
1 SV1 ML6S WSL 6G
3 R22, R26, R27 0 R0805 RND 0805 1 0
3 R18, R19, R20 100 R0805 RND 0805 1 100
2 C1, C5 100n C0603 X7R-G0603 100N
1 R1 10k R0603 RND 0603 1 10K
2 C3, C4 10p C0603 X7R-G0603 10p
1 Q2 12M HC49UP 12,0000-HC49-SMD
3 R14, R15, R16 1k R0603 RND 0603 1 1,0K
1 C2 2u2 C0805 KEM X5R0805 2,2U
1 Q1 BSS138 SOT23 BSS 138 SMD
1 CL1 Datacable DUMMY LIYY 614-5,0
1 SV5 IDC-Conn 6 0.1in DUMMY PFL 6
1 IC3 MEGA48/88/168-AU TQFP32-08 ATMEGA 88PA-AU
1 SV4 Mini-DIN 8 plug DUMMY SE-DIO M08
1 X1 RPI_CONDENSEDZERO RPI_ZERO_THT BL 2X25G8 2,54

Variante 2: Optokoppler

Aufgebaut und erfolgreich getestet.

Dies entspricht weitestgehend dem Originaldesign.

Heißt: optische Isolation, Firmware-Updates gehen nur über SPI oder drei bzw. 4 Jumper (R18, R19, R27 und ggf. R22).


Menge Referenz Wert Package Reichelt Bestellcode
1 SV2 MA03-2 SL 2X40G 2,54
1 SV1 ML6S WSL 6G
1 R21 0 R0805 RND 0805 1 0
2 C1, C5 100n C0603 X7R-G0603 100N
1 R1 10k R0603 RND 0603 1 10K
2 C3, C4 10p C0603 X7R-G0603 10p
1 Q2 12M HC49UP 12,0000-HC49-SMD
4 R13, R14, R15, R16 1k R0603 RND 0603 1 1,0K
1 C15 1n C0603 X7R-G0603 1,0N
1 R17 2k2 R0603 RND 0603 1 2,2K
1 C2 2u2 C0805 KEM X5R0805 2,2U
1 OK2 6N137 DIL08 6N 137
1 Q1 BSS138 SOT23 BSS 138 SMD
1 CL1 Datacable DUMMY LIYY 614-5,0
1 SV5 IDC-Conn 6 0.1in DUMMY PFL 6
1 IC3 MEGA48/88/168-AU TQFP32-08 ATMEGA 88PA-AU
1 SV4 Mini-DIN 8 plug DUMMY SE-DIO M08
1 X1 RPI_CONDENSEDZERO RPI_ZERO_THT BL 2X25G8 2,54

Variante 3: ADUM-Isolator

Aufgebaut und weitestgehend erfolgreich getestet.

Die "zukunftssichere" aber gleichzeitig auch die teuerste Variante.

Unterstützt Bootloader und gewährleistet die Isolation zwischen Solaranlage und Raspberry Pi.

Menge Referenz Wert Package Reichelt Bestellcode
1 SV2 MA03-2 SL 2X40G 2,54
1 SV1 ML6S WSL 6G
1 R21 0 R0805 RND 0805 1 0
1 R9 100 R0603 RND 0603 1 100
4 C1, C5, C9, C10 100n C0603 X7R-G0603 100N
1 R1 10k R0603 RND 0603 1 10K
2 C3, C4 10p C0603 X7R-G0603 10p
1 Q2 12M HC49UP 12,0000-HC49-SMD
3 R14, R15, R16 1k R0603 RND 0603 1 1,0K
1 C2 2u2 C0805 KEM X5R0805 2,2U
1 IC4 ADUM1301ARW SO-16W ADUM 1301 ARW
1 Q1 BSS138 SOT23 BSS 138 SMD
1 CL1 Datacable DUMMY LIYY 614-5,0
1 SV5 IDC-Conn 6 0.1in DUMMY PFL 6
1 IC3 MEGA48/88/168-AU TQFP32-08 ATMEGA 88PA-AU
1 SV4 Mini-DIN 8 plug DUMMY SE-DIO M08
1 X1 RPI_CONDENSEDZERO RPI_ZERO_THT BL 2X25G8 2,54

Bei der Schaltungsentwicklung hat sich leider ein dummer Fehler eingeschlichen. Ich dachte nicht daran, dass der ADuM !RES treiben wird - und das v.a. nach GND. Kann man zwar halbwegs in Software umgehen, ist aber Mist.

Die einfachste Fehlerbeseitigung ist, R10 einfach nicht zu bestücken.

Der ADuM1301 ist trotz des fehlenden Features die günstigste Lösung.

Der Reset des Mikrocontrollers (und damit das Wechseln in den Bootloader) kann auch per Kommando ausgelöst werden.

Wer will, kann jedoch auch einen Hotfix implementieren: Dazu muss das obere Pad von R10 von der Leiterbahn getrennt werden (rot). Auf den Pads von R18 (rechts) und R10 kann nun ein BSS138 verdreht aufgesetzt werden. Das obere Pad muss dabei noch mit Masse verbunden werden (orange).

Achtung: Auch mit diesem Hotfix gibt es einen Fallstrick: Ist die "Raspberry Pi"-Seite Stromlos, geht der Ausgangspin des ADuM auf high, folglich hängt Reset bei low (aktiv). Kann seine Vorteile haben, zum Flashen des Mikrocontrollers aber eher unpraktisch.

Bestückungsoptionen

Da nicht jeder alle Funktionen braucht, hier noch die zusätzlichen Bestückungsoptionen:

  • HAT-ID (violett)
  • Real-Time-Clock (orange)
  • I²C(-OLED) (grün)
  • Taster (cyan)
  • Status-LEDs (blau)

HAT-ID

Aufgebaut und erfolgreich getestet.

Die Raspberry Pi HAT Specification schließt einen I²C-EEProm ein. Dieser kann bei Bedarf bestückt werden:

Menge Referenz Wert Package Reichelt Bestellcode
1 SJ1 SJ
1 C6 100n C0603 X7R-G0603 100N
1 R2 1k R0603 RND 0603 1 1,0K
1 IC2 24C32ASN SO-08 ST 24C32 MN6
2 R3, R4 3k3 R0603 RND 0603 1 3,3K

Aktuell gibt es noch keine weitere Unterstützung hierfür. Es handelt sich also eher um ein Gimmick.

Den EEProm kann man sich recht günstig von eBay-Modulen "abernten" - einfach im nächsten Abschnitt weiterlesen.

Real-Time-Clock

Aufgebaut und erfolgreich getestet.

Da die Pirozeda-Software für das Logging eine gültige Uhrzeit benötigt, und es nach einem Stromausfall nicht sichergestellt ist, dass sich der Pi sofort nach dessen Start synchronisieren kann, kann eine RTC bestückt werden:

Menge Referenz Wert Package Reichelt Bestellcode
2 R11, R12 0 R0603 RND 0603 1 0
1 C8 100n C0603 X7R-G0603 100N
1 B1 3003 3003 KZH 20P
2 R6, R8 3k3 R0603 RND 0603 1 3,3K
1 IC1 DS1307Z SO08 DS 1307Z
1 Q5 TC38_SMD TC38H_SMD AUR Q-32.768000K

Es ist noch anzumerken, dass der DS1307Z laut Datenblatt auch 3,3 V als IO-Spannung unterstützt. Zur Sicherheit habe ich für jedoch einen Levelshifter eingebaut (R5, R6, R7, R8, Q3, Q4), der jedoch durch die 0R-Widerstände R11 und R12 ersetzt werden kann.

Der Levelshifter kann nach ersten Testes getrost weggelassen werden.

Wem der DS1307 bei Reichelt zu teuer ist, kann sich bei eBay ein Modul mit dem Chip, passendem Quarz (der zufällig dem verwendeten entspricht) und einem ebenfalls passenden EEProm besorgen. Der Batteriehalter passt im aktuellen Design leider nicht.

Option: I²C(-OLED) + Taster

Noch nicht aufgebaut und getestet.

Um noch weitere I²C-Devices anzuschließen, ist der Port auf eine Buchsenleiste herausgeführt. Diese ist so ausgerichtet, dass z. B. eines dieser 0,96" 128x64 Pixel OLEDs direkt angeschlossen werden kann. Da wohl teilweise VCC und GND vertauscht sind, kann durch Drehen von R29 und R30 die Polarität geändert werden:

Menge Referenz Wert Package Reichelt Bestellcode
2 R29, R30 0 R0603 RND 0603 1 0
1 SV3 FE04-1R FE04-1R MPE 094-1-004

Ferner gibt es Platz für einen Taster, der GPIO22 mit Masse verbinden kann. Damit es im Falle einer Fehlkonfiguration nicht zu einem harten Kurzschluss kommt, ist ein 100 Ohm-Widerstand vorgesehen:

Menge Referenz Wert Package Reichelt Bestellcode
1 R31 100 R0603 RND 0603 1 100
1 S1 KMR2 KMR231GLFS KMR 231 G LFS

Status-LEDs

Aufgebaut und erfolgreich getestet.

Macht einfach drauf was ihr wollt, solange es LEDs im 0603-Package sind und der Vorwiderstand (im 0603-Package) dazu passt.

Menge Referenz Wert Package Reichelt Bestellcode
3 R24, R25, R28 1k R0603 RND 0603 1 1,0K
1 LED1 gn CHIP-LED0603
2 LED2, LED3 or CHIP-LED0603

LED1 (mitte) zeigt Aktivität an, LED2 (unten) ist mehr oder weniger die Power-LED. Mehr oder weniger, da sie beim Start der Firmware aktiviert wird (nicht aber im Bootloader). Dadurch kann man sehr schnell erkennen, ob sich die Hardware in einem Bootloop befindet.

LED3 (oben) kann vom Raspberry Pi angesteuert werden.

Standardmäßig sind in der config.h folgende Zeiten für LED1 eingestellt:

  • Start der Anwendung: 250 ms
  • Korrekt empfangene Nachrichten: 10 ms
  • Fehlerhaft empfangene Nachrichten: 200 ms

Damit kann man auf den einen Blick erkennen, ob Daten vernünftig ankommen und verarbeitet werden können.

Aufbau der Hardware

Bestücken der Leiterkarte

Die Hardware kann im Prinzip in beliebiger Reihenfolge aufgebaut werden. Trotzdem ist es ratsam, die großen/hohen Bauteile zuletzt aufzulöten.

Die Steckkräfte einer 2x20 Buchsenleiste sind vergleichsweise groß. Diese können reduziert werden, indem nicht verwendete Pins aus der Buchsenleiste entfernt werden. Um diese nicht wieder (fragt nicht) zurückstecken zu müssen, hier eine Auflistung der benötigten Pins: 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 14, 15, 17, 20, 25, 27, 28, 30, 34, 37, 39.

Oder einfach als Bild:

Der Wannenstecker lässt sich am einfachsten auflöten, wenn man die Pads auf einer Seite (egal welche) der Leiterkarte bisschen stärker verzinnt. Dadurch kann man den Konnektor ein wenig verklemmen und vor dem Verlöten besser ausrichten.

Zuleitung

Als Zuleitung habe ich für die ersten Muster den Artikel LIYY 614 (Steuerleitung 6x0,14mm², ungeschirmt) von Reichelt verwendet. Beim Bestellen habe ich leider mehr auf den Preis als die Schirmung geachtet. In Hinblick darauf, dass der Schirm der Buchse im Regler eh nicht mit Masse verbunden ist, ist es eine ziemliche Fummelarbeit, diese mit dem Massepin zu verbinden.

Erkenntnisse über die maximale Leitungslänge gibt es noch nicht.

Der Vorteil dieser Leitung ist: die Adern können direkt im Pfostenverbinder verpresst werden:

Ich habe mich für folgende Farbgebung entschieden, beim Pinmapping selbst gibt es keine Wahl:

Mini-DIN Signal Farbe Wannenstecker
3 MISO grau 1
4 GND braun 3
5 3V3 rosa 5
6 MOSI grün 2
7 SCK gelb 4
8  !CS weiß 6

Beim Mini-DIN-Stecker sollte darauf geachtet werden, die äußere Hülle nicht komplett über den Rest zu stülpen, da die Buchse beim Regler ziemlich weit nach innen versetzt ist:

Firmware

Grundsätzlich läuft die Firmware des Originaldesign auch mit der HAT-Hardware. Allerdings bleiben die LEDs dunkel und viele neue Features fehlen:

Ab 0.2:

  • Status-LEDs
  • Uptime-Counter
  • Messung der Versorgungsspannung
  • Anzeigen von Bootinformationen
    • Resetgrund
    • Anzahl der vorherigen Reboots
    • Dauer der vorherigen Uptime
    • Fusecheck
    • Watchdog-Info
    • Aktivierte Nachrichten
  • Neustart + Wechsel in den Bootloader per Kommando
  • Statistik über empfangene Nachrichten (optional)
  • Timestamps (optional, aktuell nicht kompatibel mit der Backend-Software)
  • Erneutes übertragen der Headerinformationen
  • Kann die Firmware bei einem "Katzen-Paket" miauen. Einfach nur weil.

Konfiguration

Einige der Features müssen vor dem Kompilieren aktiviert bzw. eingestellt werden. Die Schalter und Defines hierfür befinden sich in zwei Header-Dateien:

config.h

  • PIROZEDA_KITTY_DEBUG: Anzeigen der "Katzen-Pakete" (Vorgabe: inaktiv)
  • PIROZEDA_TIMESTAMPS: Anzeigen der Timestamps (Vorgabe: inaktiv)
  • PIROZEDA_WDT_TIMEOUT: Timeout des Watchdogs (Vorgabe: 4 s)
  • PIROZEDA_UPTIME: Führen der Uptime, abrufbar über den Befehl (Vorgabe: aktiv)
  • PIROZEDA_SUPPLY_AVGCNT: Anzahl der Messwerte für die Mittelwertbildung der Systemspannung (Vorgabe: 10, maximal: 32)
  • PIROZEDA_HEADERCNT: Anzahl der Kopfzeilen-Datensätze, die nach dem Start oder Befehl header angezeigt werden (Vorgabe: 200, maximal: 255)
  • PIROZEDA_STATUS_LED_BOOT: Leuchtdauer der Status-LED nach dem Start (Vorgabe: 100 -> 250 ms, maximal: 255)
  • PIROZEDA_STATUS_LED_RXOK: Leuchtdauer der Status-LED bei empfangenem Paket (Vorgabe: 4 -> 10 ms, maximal: 255)
  • PIROZEDA_STATUS_LED_RXERR: Leuchtdauer der Status-LED bei einem Fehler (Vorgabe: 80 -> 200 ms, maximal: 255)
  • BOOTLOADER_PASSWORD: "Passwort" zum Wechsel in den Bootloader (Vorgabe: "FwUp", maximal 4 Zeichen, darf keine Teilstrings von Befehlen enthalten)

prozeda_cfg.h

  • PROZEDA_USE_COLUMN_NAMES: Verwenden der Spaltennamen (irrelevant für Pirozeda)
  • PROZEDA_SUPPORT_DISPLAY: Aktiviert den Empfang von Displaydaten (Vorgabe: aktiv)
  • PROZEDA_SUPPORT_HEADER: Aktiviert den Empfang von Kopfzeilen-Datensätzen (Vorgabe: aktiv)
  • PROZEDA_IGNORE_KITTY: Ignorieren von Katzen-Paketen, andernfalls werden Fehler ausgegeben (Vorgabe: aktiv)
  • PROZEDA_MSG_MAXTICKS: Ticks, nach denen ein Paket als abgeschlossen erkannt wird, sollte nur bei Anpassung der CPU-Frequenz angepasst werden (Vorgabe: 3)

Befehle

Neu ist ab v0.2, dass Befehle an den Mikrocontroller gesendet werden können. Je nach Konfiguration sind dies:

  • reset: Neustart
  • uptime: Anzeige der Laufzeit
  • bootinfo: Anzeigen der Infos, die auch beim (Neu-)Start angezeigt werden
  • header: Header werden gemäß PIROZEDA_HEADERCNT erneut ausgegeben
  • stats: Anzeigen der Statistik über empfangene Nachrichten und Empfangsfehler

Alle Befehle sind Case-sensitive.

Flashen der Firmware

Mit den Möglichkeiten steigt die Komplexität.

Dadurch dass der die Hardware für die Verwendung mit und ohne Bootloader ausgelegt ist, gibt es mehrere "Pfade" für das Flashen. Wer auf Nummer sicher gehen will, lädt einfach Bootloader und Firmware auf den Mikrocontroller herunter. Selbst wenn man "nur" die Variante mit unidirektionalem UART hat - die Brücken Versorgung und für den UART zum Mikrocontroller ist schneller gelötet als die Stiftleiste für den ISP-Port.

Das Einlöten einer wahnsinnig hohen Stiftleiste kann übrigens umgangen werden, indem eine Stiftleiste in das Programmierkabel gesteckt und im Footprint der Buchse "verkeilt" wird. Wirklich keine Dauerlösung aber im Idealfall muss man es nur einmal machen.

Über Raspberry Pi

Zunächst muss, wenn nicht schon geschehen, über sudo raspi-config das SPI-Interface aktiviert (reboot nicht vergessen) und AVRDUDE installiert werden.

Den Regler vom HAT trennen, nicht vergessen, dass R10 oder der Hotfix entfernt werden muss, falls der ADuM-Isolator verwendet und einseitig versorgt (also nicht auf dem Raspi steckt) wird und anschließend den SPI-Port mit SV2 verbinden.

Signalname Adapter SV2 Pin Raspberry GPIO Raspberry Pin
MISO 1 BCM 9 21
3V3 2 3V3 17
SCK 3 BCM 11 23
MOSI 4 BCM 10 19
 !RES 5 BCM 25 22
GND 6 GND 20

Mit Bootloader

AVR
Typ ATmega88PA
Takt 12 MHz
Fuses
High 0xC5
Low 0xDE
Extended 0xFC
Engbedded com logo.png Details


Die empfohlene Variante (auch wenn man nicht beabsichtigt, den Bootloader zu nutzen).

Mit Bootloader sind das folgende Befehle:

sudo /usr/local/bin/avrdude -c linuxspi -p m88p -P /dev/spidev0.0 -U lfuse:w:0xDE:m -U hfuse:w:0xC5:m -U efuse:w:0xFC:m
sudo /usr/local/bin/avrdude -c linuxspi -p m88p -P /dev/spidev0.0 -U flash:w:"pirozeda_fboot_0.2.hex"

Ohne Bootloader

AVR
Typ ATmega88PA
Takt 12 MHz
Fuses
High 0xC5
Low 0xDE
Extended 0x07
Engbedded com logo.png Details

'cause I ain't gonna judge you

sudo /usr/local/bin/avrdude -c linuxspi -p m88p -P /dev/spidev0.0 -U lfuse:w:0xDE:m -U hfuse:w:0xC5:m -U efuse:w:0x07:m
sudo /usr/local/bin/avrdude -c linuxspi -p m88p -P /dev/spidev0.0 -U flash:w:"pirozeda_0.2.hex"

Update der Firmware

In Sachen Bootloader bin ich ein großer Fan von Peter Danneggers Fastboot. Er ist klein, schnell und zuverlässig.

Um einen kleinen Unterschied zu machen, lautet das Passwort zum Starten nicht "Peda" sondern "FwUp", was ein kleines Problem mit sich bringt. "Peda" ist nicht nur der Spitzname vom Autor, das "a" wird zur automatischen Baudratenerkennung verwendet. Das von mir gewählte Passwort hat das nicht zu bieten. Was mir bei der Verwendung von UpdateLoader aufgefallen ist: es funktioniert trotzdem. Ganz einfach, weil der Autor ein "a" voranstellt. Das funktioniert dann auch mit so gut wie allen anderen Download-Tools.

Mit Bootloader

Das Firmware-Update funktioniert nur bei bidirektionaler UART-Kommunikation mit dem Mikrocontroller, also bei der Variante Direkt und ADuM-Isolator. Wenn man mutig ist, kann man bei der Optokoppler-Variante R19 und R27 bestückt werden.

In jedem Fall muss die Mikrocontroller-Seite mit Strom versorgt werden, also am einfachsten am Solarregler angeschlossen lassen.

Berhard M. (boregard) hat das Programm lboot (auch im Download-Paket) geschrieben, das unter Linux mit dem schönen Fastboot von Peter Danegger spricht.

Damit der Download funktioniert, muss das Pirozeda-Backend (und andere Software, die auf das UART-Interface zugreift) beendet werden.

./bootloader -d /dev/serial0 -b 115200 -t 1024 -p pirozeda_0.2.hex -P aFwUp

Ohne Bootloader

siehe #Flashen_der_Firmware

Einrichten der Optionen

HAT-ID

Wie bereits weiter oben geschrieben, ist der HAT-EEProm momentan eher ein Gimmick als wirklich genutztes Feature.

Die Anwendung zur Generierung der Daten kann im GitHub-Repo vom Raspberry Pi heruntergeladen werden.

Da der EEProm im normalen Betrieb schreibgeschützt ist, muss SJ1 gebrückt werden - am besten mit einem guten Klecks Lötzinn.

Anschließend kann mit dem Script eepflash.sh (liegt dem Download-Paket bei) das EEProm-Image geschrieben werden:

sudo ./eepflash.sh -w -f=pirozeda-hat_id.eep -t=24c32 -a=50

Aktuell sind weder Product-ID noch Version-ID vergeben, ansonsten ist die Konfiguration wie folgt:

# Start of atom #0 of type 0x0001 and length 60
# Vendor info
product_uuid 9edc3aef-683c-4007-b2f2-3ea4969b1737
product_id 0x0000
product_ver 0x0000
vendor "hobbyelektronik.org"   # length=19
product "Pirozeda HAT v0.1"   # length=17
# End of atom. CRC16=0x9a75


# Start of atom #1 of type 0x0002 and length 32
# GPIO map info
gpio_drive 0
gpio_slew 0
gpio_hysteresis 0
back_power 0
#        GPIO  FUNCTION  PULL
#        ----  --------  ----
setgpio  22      INPUT     UP
setgpio  26      OUTPUT     NONE

RTC

Die Netzmafia hat einen recht guten Artikel, wie man die hwclock bedient.

Wer sich nicht einlesen will, hier im Schnelldurchlauf:

Testen der RTC:

#call bash as superuser, this is needed to get the echo working properly
sudo bash
modprobe rtc-ds1307
echo "ds1307 0x68" > /sys/class/i2c-adapter/i2c-1/new_device
#Auslesen der Uhr
hwclock --debug -r
exit

Dauerhaftes aktivieren der RTC:

sudo bash

# enable module
echo "# enable DS1307-RTC" >> /etc/modules
echo "rtc-ds1307" >> /etc/modules

# remove fake-hwclock
update-rc.d -f fake-hwclock disable
update-rc.d -f fake-hwclock remove
apt-get remove fake-hwclock


# overwrite prepared configuration of hwclock
cp /etc/init.d/hwclock.sh ./hwclock.old
cat ./hwclock.new > /etc/init.d/hwclock.sh

# enable start/stop script
update-rc.d hwclock.sh enable
exit

Laut Anleitung von Netzmafia muss die Datei /etc/init.d/hwclock.sh noch wie folgt angepasst werden:

Nun muss noch das Start/Stopp-Script für die RTC angepasst werden. Dazu wird (als root-User) die Datei /etc/init.d/hwclock.sh mit dem Editor bearbeitet. Zunächst tragen Sie am Anfang des Scripts die Default-Wert ein bzw. überprüfen diese:

# These defaults are user-overridable in /etc/default/hwclock
BADYEAR=no
HWCLOCKACCESS=yes
HWCLOCKPARS=' --noadjfile --utc'
HCTOSYS_DEVICE=rtc0

Nach der Zeile 'case "$1" in start)' werden die folgenden drei Zeilen auskommentieren ('#' davorsetzen):

  #if [ -d /run/udev ] || [ -d /dev/.udev ]; then
  #   return 0
  #fi

Um das zu vereinfachen, habe ich eine SH-Datei vorbereitet, natürlich muss sich diese (hwclock.new) im gleichen Verzeichnis liegen, damit es funktioniert.

Im Ordner options/rtc befindet sich sowohl die rtc-test.sh als auch rtc-enable.sh. Da diese über meinen Windows-PC gewandert sind und dadurch ihre Dateieigenschaften verloren haben, müssen sie entweder als ausführbar markiert werden oder mit /bin/bash gestartet werden:

sudo /bin/bash rtc-test.sh

I²C + Taster

Für die Verwendung des I²C muss eigentlich nur in raspi-config das I²C-Interface aktiviert werden.

Mit der Konfiguration im ID-EEPRom wird der Taster in den Device-Tree eingebunden, allerdings kann er prinzipiell auch ohne angesprochen werden.

Backend

Das Back- und Frontend aus Pirozeda kann prinzipiell weiterverwendet werden.

Es gibt allerdings noch keinen Support der neuen Features.

Leiterkarten

Es gibt noch unbestückte Leiterkarten. Wer eine will, kann sich gerne bei mir melden.

Verbesserungsmöglichkeiten

  • Korrektur der Reset-Beschaltung
  • ESD-Schutz hinzufügen. Aktuell können auf den Footprints von C7, C11 und C14 ESD-Schutzdioden wie B72500D50A60 von Reichelt bestückt werden. Allerdings ist die Positionierung nicht ideal
  • Stiftwanne für den SPI-Schnittstelle oben auf der Leiterkarte platzieren
  • Die Widerstände für die Direktverbindung so platzieren, dass sie für das Bootloader-Update einfacher bestückt werden können (oder gleich Jumper)
  • Hinzufügen der Batteriehalter der billigen RTC-Module (Recycling FTW!)
  • Entfernen des nicht benötigten I²C-Levelshifters
  • Vermeiden von Backfeed in der Direkt-Variante

Download

Datei:Pirozeda hat.zip enthält:

  • Designdaten im EAGLE-Format
  • Quellen des Bootloaders von Peter Dannegger
  • Quellen der Firmware + flashbare Images
  • Scripts für die Einrichtung der Optionen