Pirozeda-HAT: Unterschied zwischen den Versionen

Aus Hobbyelektronik.org
(Hinweise zur Verifikation hinzugefügt)
 
(9 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
[[Datei:Pirozeda_hat_rpizerow.jpg|300px|thumb|Pirozeda-HAT mit ADuM-Isolator auf Raspberry Pi Zero W]]
 
Wie bereits im [[Pirozeda|Hauptartikel]] und im Blog erwähnt, sind bei der ersten Leiterkarte ein paar Dinge unschön.
 
Wie bereits im [[Pirozeda|Hauptartikel]] und im Blog erwähnt, sind bei der ersten Leiterkarte ein paar Dinge unschön.
  
Zeile 6: Zeile 7:
 
* Neben dem Optokoppler kann man nun auch einen ADUM1301 verwenden
 
* Neben dem Optokoppler kann man nun auch einen ADUM1301 verwenden
 
* ...oder einfach Widerstände, wenn man sich der Sache sicher ist
 
* ...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
+
* Mit ADUM1301 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
 
* 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
 
* Es gibt nun eine RTC (DS1307Z), um direkt nach einem Neustart oder bei fehlendem Netzwerk loggen zu können
Zeile 16: Zeile 17:
 
Ich habe die verschiedenen Platzierungsmöglichkeiten durchprobiert aber mit dem Featureset ist es mir nicht gelungen, die Buchse an eine andere Stelle zu packen.
 
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.
+
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=
 
=Bestückungsvarianten=
Zeile 23: Zeile 24:
  
 
==Variante 1: Direkt==
 
==Variante 1: Direkt==
'''Noch nicht aufgebaut und getestet'''
+
'''Noch nicht aufgebaut und getestet.'''
 +
 
 
Mit der Bestückungsvariante "direkt" kann ich nur abraten, habe sie aber der Vollständigkeit halber erstellt.
 
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 Backfeeding entstehen kann, wenn der Raspberry Pi keine Stromversorgung hat. Der Strom wird zwar über Widerstände begrenzt, Fehlfunktion kann aber nicht ausgeschlossen werden.
+
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.
  
Die Variante ist eher für diejenigen, die sich der Sache sicher sind.
+
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.
 
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.
Zeile 37: Zeile 39:
  
 
{| class="wikitable"
 
{| class="wikitable"
! Menge|| Referenz            || Wert               || Package       || Reichelt Bestellcode
+
! Menge || Referenz            || Wert             || Package     || Reichelt Bestellcode
 
|-
 
|-
| 1   || SV2                ||                   || MA03-2       || SL 2X40G 2,54  
+
| 1     || SV2                ||                   || MA03-2       || SL 2X40G 2,54
 
|-
 
|-
| 1   || SV1                ||                   || ML6S         || WSL 6G        
+
| 1     || SV1                ||                   || ML6S         || WSL 6G
 
|-
 
|-
| 3   || R22, R26, R27      || 0                 || R0805         || RND 0805 1 0  
+
| 3     || R22, R26, R27      || 0                 || R0805       || RND 0805 1 0
 
|-
 
|-
| 3   || R18, R19, R20      || 100               || R0805         || RND 0805 1 100
+
| 3     || R18, R19, R20      || 100               || R0805       || RND 0805 1 100
 
|-
 
|-
| 4    || C1, C5, C9, C10    || 100n               || C0603         || X7R-G0603 100N
+
| 2    || C1, C5             || 100n             || C0603       || X7R-G0603 100N
 
|-
 
|-
| 1   || R1                  || 10k               || R0603         || RND 0603 1 10K
+
| 1     || R1                  || 10k               || R0603       || RND 0603 1 10K
 
|-
 
|-
| 2   || C3, C4              || 10p               || C0603         || X7R-G0603 10p  
+
| 2     || C3, C4              || 10p               || C0603       || X7R-G0603 10p
 
|-
 
|-
| 1   || Q2                  || 12M               || HC49UP       || 12,0000-HC49-SMD
+
| 1     || Q2                  || 12M               || HC49UP       || 12,0000-HC49-SMD
 
|-
 
|-
| 4    || R14, R15, R16, R23  || 1k                 || R0603         || RND 0603 1 1,0K  
+
| 3    || R14, R15, R16       || 1k               || R0603       || RND 0603 1 1,0K
 
|-
 
|-
| 1   || C2                  || 2u2               || C0805         || KEM X5R0805 2,2U
+
| 1     || C2                  || 2u2               || C0805       || KEM X5R0805 2,2U
 
|-
 
|-
| 1   || Q1                  || BSS138             || SOT23         || BSS 138 SMD    
+
| 1     || Q1                  || BSS138           || SOT23       || BSS 138 SMD
 
|-
 
|-
| 1   || IC1                 || DS1307Z            || SO08          || DS 1307Z       
+
| 1     || CL1                 || Datacable        || DUMMY        || LIYY 614-5,0
 
|-
 
|-
| 1   || S1                  || KMR2              || KMR231GLFS    || KMR 231 G LFS 
+
| 1     || SV5                || IDC-Conn 6 0.1in  || DUMMY        || PFL 6
 
|-
 
|-
| 1   || IC3                || MEGA48/88/168-AU   || TQFP32-08     || ATMEGA 88PA-AU
+
| 1     || IC3                || MEGA48/88/168-AU || TQFP32-08   || ATMEGA 88PA-AU
 
|-
 
|-
| 1   || X1                  || RPI_CONDENSEDZERO || RPI_ZERO_THT || BL 2X25G8 2,54
+
| 1     || SV4                || Mini-DIN 8 plug  || DUMMY        || SE-DIO M08
 +
|-
 +
| 1    || X1                  || RPI_CONDENSEDZERO || RPI_ZERO_THT || BL 2X25G8 2,54
 
|}
 
|}
  
 
==Variante 2: Optokoppler==
 
==Variante 2: Optokoppler==
'''Aufgebaut und erfolgreich getestet'''
+
'''Aufgebaut und erfolgreich getestet.'''
 +
 
 
Dies entspricht weitestgehend dem Originaldesign.
 
Dies entspricht weitestgehend dem Originaldesign.
  
Zeile 77: Zeile 82:
  
 
<gallery>
 
<gallery>
     pirozeda_hat_0.1_adum_sch.png|Schaltplan mit Optokoppler
+
     pirozeda_hat_0.1_opto_sch.png|Schaltplan mit Optokoppler
     pirozeda_hat_0.1_adum_assy.png|Bestückungsplan mit Optokoppler
+
     pirozeda_hat_0.1_opto_assy.png|Bestückungsplan mit Optokoppler
 +
    pirozeda_hat_0.1_opto.jpg|Aufgebauter HAT - es passt sogar ein MJ-Quarz
 
</gallery>
 
</gallery>
 +
  
 
{| class="wikitable"
 
{| class="wikitable"
! Menge|| Referenz            || Wert               || Package       || Reichelt Bestellcode
+
! Menge || Referenz            || Wert             || Package     || Reichelt Bestellcode
 
|-
 
|-
| 1   || SV2                ||                   || MA03-2       || SL 2X40G 2,54  
+
| 1     || SV2                ||                   || MA03-2       || SL 2X40G 2,54
 
|-
 
|-
| 1   || SV1                ||                   || ML6S         || WSL 6G        
+
| 1     || SV1                ||                   || ML6S         || WSL 6G
 
|-
 
|-
| 1   || R21                || 0                 || R0805         || RND 0805 1 0  
+
| 1     || R21                || 0                 || R0805       || RND 0805 1 0
 
|-
 
|-
| 4    || C1, C5, C9, C10    || 100n               || C0603         || X7R-G0603 100N
+
| 2    || C1, C5             || 100n             || C0603       || X7R-G0603 100N
 
|-
 
|-
| 1   || R1                  || 10k               || R0603         || RND 0603 1 10K
+
| 1     || R1                  || 10k               || R0603       || RND 0603 1 10K
 
|-
 
|-
| 2   || C3, C4              || 10p               || C0603         || X7R-G0603 10p  
+
| 2     || C3, C4              || 10p               || C0603       || X7R-G0603 10p
 
|-
 
|-
| 1   || Q2                  || 12M               || HC49UP       || 12,0000-HC49-SMD
+
| 1     || Q2                  || 12M               || HC49UP       || 12,0000-HC49-SMD
 
|-
 
|-
| 4   || R14, R15, R16, R23 || 1k                 || R0603         || RND 0603 1 1,0K  
+
| 4     || R13, R14, R15, R16  || 1k               || R0603       || RND 0603 1 1,0K
 
|-
 
|-
| 1   || R13                 || 1k                || R0603        || RND 0603 1 470 
+
| 1     || C15                 || 1n                || C0603        || X7R-G0603 1,0N
 
|-
 
|-
| 1   || C15                 || 1n                || C0603        || X7R-G0603 1,0N 
+
| 1     || R17                 || 2k2              || R0603        || RND 0603 1 2,2K
 
|-
 
|-
| 1   || R17                || 2k2                || R0603        || RND 0603 1 2,2K
+
| 1     || C2                  || 2u2              || C0805        || KEM X5R0805 2,2U
 
|-
 
|-
| 1   || C2                  || 2u2                || C0805        || KEM X5R0805 2,2U
+
| 1     || OK2                || 6N137            || DIL08        || 6N 137
 
|-
 
|-
| 1   || OK2                || 6N137              || DIL08        || 6N 137         
+
| 1     || Q1                  || BSS138            || SOT23        || BSS 138 SMD
 
|-
 
|-
| 1   || Q1                  || BSS138            || SOT23        || BSS 138 SMD   
+
| 1     || CL1                || Datacable        || DUMMY        || LIYY 614-5,0
 
|-
 
|-
| 1   || IC1                 || DS1307Z            || SO08          || DS 1307Z       
+
| 1     || SV5                 || IDC-Conn 6 0.1in  || DUMMY        || PFL 6
 
|-
 
|-
| 1   || S1                  || KMR2              || KMR231GLFS   || KMR 231 G LFS 
+
| 1     || IC3                || MEGA48/88/168-AU  || TQFP32-08   || ATMEGA 88PA-AU
 
|-
 
|-
| 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
+
| 1     || X1                  || RPI_CONDENSEDZERO || RPI_ZERO_THT || BL 2X25G8 2,54
 
|}
 
|}
  
 
==Variante 3: ADUM-Isolator==
 
==Variante 3: ADUM-Isolator==
'''Noch nicht aufgebaut und getestet'''
+
'''Aufgebaut und weitestgehend erfolgreich getestet.'''
 +
 
 
Die "zukunftssichere" aber gleichzeitig auch die teuerste Variante.
 
Die "zukunftssichere" aber gleichzeitig auch die teuerste Variante.
  
Zeile 130: Zeile 138:
 
     pirozeda_hat_0.1_adum_sch.png|Schaltplan mit ADUM-Isolator
 
     pirozeda_hat_0.1_adum_sch.png|Schaltplan mit ADUM-Isolator
 
     pirozeda_hat_0.1_adum_assy.png|Bestückungsplan mit ADUM-Isolator
 
     pirozeda_hat_0.1_adum_assy.png|Bestückungsplan mit ADUM-Isolator
 +
    pirozeda_hat_0.1_adum.jpg|Aufgebauter HAT mit Hotfix
 
</gallery>
 
</gallery>
  
 
{| class="wikitable"
 
{| class="wikitable"
! Menge|| Referenz            || Wert               || Package       || Reichelt Bestellcode
+
! Menge || Referenz            || Wert             || Package     || Reichelt Bestellcode
 
|-
 
|-
| 1   || SV2                ||                   || MA03-2       || SL 2X40G 2,54  
+
| 1     || SV2                ||                   || MA03-2       || SL 2X40G 2,54
 
|-
 
|-
| 1   || SV1                ||                   || ML6S         || WSL 6G        
+
| 1     || SV1                ||                   || ML6S         || WSL 6G
 
|-
 
|-
| 1   || R21                || 0                 || R0805         || RND 0805 1 0  
+
| 1     || R21                || 0                 || R0805       || RND 0805 1 0
 
|-
 
|-
| 2    || R9, R10            || 100               || R0603         || RND 0603 1 100
+
| 1    || R9                 || 100               || R0603       || RND 0603 1 100
 
|-
 
|-
| 4   || C1, C5, C9, C10    || 100n               || C0603         || X7R-G0603 100N
+
| 4     || C1, C5, C9, C10    || 100n             || C0603       || X7R-G0603 100N
 
|-
 
|-
| 1   || R1                  || 10k               || R0603         || RND 0603 1 10K
+
| 1     || R1                  || 10k               || R0603       || RND 0603 1 10K
 
|-
 
|-
| 2   || C3, C4              || 10p               || C0603         || X7R-G0603 10p  
+
| 2     || C3, C4              || 10p               || C0603       || X7R-G0603 10p
 
|-
 
|-
| 1   || Q2                  || 12M               || HC49UP       || 12,0000-HC49-SMD
+
| 1     || Q2                  || 12M               || HC49UP       || 12,0000-HC49-SMD
 
|-
 
|-
| 4    || R14, R15, R16, R23  || 1k                 || R0603         || RND 0603 1 1,0K  
+
| 3    || R14, R15, R16       || 1k               || R0603       || RND 0603 1 1,0K
 
|-
 
|-
| 1   || C2                  || 2u2               || C0805         || KEM X5R0805 2,2U
+
| 1     || C2                  || 2u2               || C0805       || KEM X5R0805 2,2U
 
|-
 
|-
| 1   || IC4                || ADUM1301ARW       || SO-16W       || ADUM 1301 ARW  
+
| 1     || IC4                || ADUM1301ARW       || SO-16W       || ADUM 1301 ARW
 
|-
 
|-
| 1   || Q1                  || BSS138             || SOT23         || BSS 138 SMD    
+
| 1     || Q1                  || BSS138           || SOT23       || BSS 138 SMD
 
|-
 
|-
| 1   || IC1                 || DS1307Z            || SO08          || DS 1307Z       
+
| 1     || CL1                 || Datacable        || DUMMY        || LIYY 614-5,0
 
|-
 
|-
| 1   || S1                  || KMR2              || KMR231GLFS    || KMR 231 G LFS 
+
| 1     || SV5                || IDC-Conn 6 0.1in  || DUMMY        || PFL 6
 
|-
 
|-
| 1   || IC3                || MEGA48/88/168-AU   || TQFP32-08     || ATMEGA 88PA-AU
+
| 1     || IC3                || MEGA48/88/168-AU || TQFP32-08   || ATMEGA 88PA-AU
 
|-
 
|-
| 1   || X1                  || RPI_CONDENSEDZERO || RPI_ZERO_THT || BL 2X25G8 2,54
+
| 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).
 +
 +
<gallery>
 +
  Pirozeda_hat_0.1_adum_hotfix.png
 +
  Pirozeda_hat_0.1_adum_hotfix.jpg
 +
</gallery>
 +
 +
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=
 
=Bestückungsoptionen=
Zeile 182: Zeile 211:
  
 
==HAT-ID==
 
==HAT-ID==
Die [https://github.com/raspberrypi/hats Raspberry Pi HAT Specification] schließt einen I²C-EEPRom ein. Dieser kann bei Bedarf bestückt werden:
+
'''Aufgebaut und erfolgreich getestet.'''
 +
 
 +
Die [https://github.com/raspberrypi/hats Raspberry Pi HAT Specification] schließt einen I²C-EEProm ein. Dieser kann bei Bedarf bestückt werden:
  
 
{| class="wikitable"
 
{| class="wikitable"
! Menge|| Referenz || Wert               || Package       || Reichelt Bestellcode
+
! Menge || Referenz || Wert     || Package || Reichelt Bestellcode
 +
|-
 +
| 1    || SJ1      ||          || SJ      ||
 +
|-
 +
| 1    || C6      || 100n    || C0603  || X7R-G0603 100N
 
|-
 
|-
| 1   || IC2       || 24C32ASN          || SO-08        || ST 24C32 MN6   
+
| 1     || R2       || 1k      || R0603  || RND 0603 1 1,0K
 
|-
 
|-
| 1   || R2        || 1k                || R0603        || RND 0603 1 1,0K
+
| 1     || IC2      || 24C32ASN || SO-08  || ST 24C32 MN6
 
|-
 
|-
| 6    || C6        || 100n              || C0603        || X7R-G0603 100N 
+
| 2    || R3, R4  || 3k3      || R0603  || RND 0603 1 3,3K
 
|}
 
|}
  
Aktuell gibt es noch keine weitere Unterstützung hierfür.
+
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==
 
==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:
 
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:
  
 
{| class="wikitable"
 
{| class="wikitable"
! Menge|| Referenz       || Wert     || Package   || Reichelt Bestellcode
+
! Menge || Referenz || Wert     || Package   || Reichelt Bestellcode
 
|-
 
|-
| 4    || R5, R6, R7, R8  || 3k3      || R0603     || RND 0603 1 3,3K
+
| 2    || R11, R12 || 0        || R0603     || RND 0603 1 0
 
|-
 
|-
| 2    || Q3, Q4          || BSS138    || SOT23      || BSS 138 SMD   
+
| 1    || C8      || 100n    || C0603    || X7R-G0603 100N
 
|-
 
|-
| 1   || B1             || 3003     || 3003       || KZH 20P        
+
| 1     || B1       || 3003     || 3003     || KZH 20P
 
|-
 
|-
| 1    || Q5              || TC38_SMD  || TC38H_SMD  || AUR Q-32.768000K
+
| 2    || R6, R8  || 3k3      || R0603    || RND 0603 1 3,3K
 
|-
 
|-
| 1   || C8              || 100n      || C0603     || X7R-G0603 100N 
+
| 1     || IC1      || DS1307Z  || SO08     || DS 1307Z
 
|-
 
|-
| 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.
 
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.
 +
 +
<gallery>
 +
    EBay-RTC-Module.jpg|RTC-Modul als Bauteilspender
 +
</gallery>
  
 
==Option: I²C(-OLED) + Taster==
 
==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:
 
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:
  
Zeile 225: Zeile 274:
  
 
{| class="wikitable"
 
{| class="wikitable"
! Menge|| Referenz       || Wert     || Package   || Reichelt Bestellcode
+
! Menge || Referenz || Wert   || Package || Reichelt Bestellcode
 
|-
 
|-
| 1    || SV3            || FE04-1R  || FE04-1R    || MPE 094-1-004 
+
| 2    || R29, R30 || 0      || R0603  || RND 0603 1 0
 
|-
 
|-
| 2    || R29, R30        || 0        || R0603      || RND 0603 1 0   
+
| 1    || SV3      || FE04-1R || FE04-1R || MPE 094-1-004
 
|}
 
|}
  
Zeile 235: Zeile 284:
  
 
{| class="wikitable"
 
{| class="wikitable"
! Menge|| Referenz       || Wert     || Package    || Reichelt Bestellcode
+
! Menge || Referenz || Wert || Package    || Reichelt Bestellcode
 
|-
 
|-
| 1   || S1              || KMR2      || KMR231GLFS || KMR 231 G LFS 
+
| 1     || R31      || 100  || R0603      || RND 0603 1 100
 
|-
 
|-
| 1   || R31            || 100      || R0603      || RND 0603 1 100 
+
| 1     || S1      || KMR2 || KMR231GLFS || KMR 231 G LFS
 
|}
 
|}
  
 
==Status-LEDs==
 
==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.
 
Macht einfach drauf was ihr wollt, solange es LEDs im 0603-Package sind und der Vorwiderstand (im 0603-Package) dazu passt.
  
==Firmware==
+
{| class="wikitable"
Grundsätzlich läuft die Firmware des original-Adapters auch mit der HAT-Hardware. Allerdings bleiben die LEDs dunkel.
+
! 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 <code>config.h</code> 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:
 +
 
 +
<gallery>
 +
    Pirozeda_hat_0.1_buchsenleiste_pins.png|benötigte Pins (blau markiert)
 +
</gallery>
 +
 
 +
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:
 +
 
 +
<gallery>
 +
    Pirozeda_hat_0.1_pfosten.jpg
 +
</gallery>
 +
 
 +
Ich habe mich für folgende Farbgebung entschieden, beim Pinmapping selbst gibt es keine Wahl:
 +
 
 +
{| class="wikitable"
 +
! 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:
 +
 
 +
<gallery>
 +
    Pirozeda_hat_0.1_minidin.jpg
 +
</gallery>
 +
 
 +
=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:
 +
 
 +
<code>config.h</code>
 +
* <code>PIROZEDA_KITTY_DEBUG</code>: Anzeigen der "Katzen-Pakete" (Vorgabe: inaktiv)
 +
* <code>PIROZEDA_TIMESTAMPS</code>: Anzeigen der Timestamps (Vorgabe: inaktiv)
 +
* <code>PIROZEDA_WDT_TIMEOUT</code>: Timeout des Watchdogs (Vorgabe: 4 s)
 +
* <code>PIROZEDA_UPTIME</code>: Führen der Uptime, abrufbar über den Befehl (Vorgabe: aktiv)
 +
* <code>PIROZEDA_SUPPLY_AVGCNT</code>: Anzahl der Messwerte für die Mittelwertbildung der Systemspannung (Vorgabe: 10, maximal: 32)
 +
* <code>PIROZEDA_HEADERCNT</code>: Anzahl der Kopfzeilen-Datensätze, die nach dem Start oder Befehl <code>header</code> angezeigt werden (Vorgabe: 200, maximal: 255)
 +
* <code>PIROZEDA_STATUS_LED_BOOT</code>: Leuchtdauer der Status-LED nach dem Start (Vorgabe: 100 -> 250 ms, maximal: 255)
 +
* <code>PIROZEDA_STATUS_LED_RXOK</code>: Leuchtdauer der Status-LED bei empfangenem Paket (Vorgabe: 4 -> 10 ms, maximal: 255)
 +
* <code>PIROZEDA_STATUS_LED_RXERR</code>: Leuchtdauer der Status-LED bei einem Fehler (Vorgabe: 80 -> 200 ms, maximal: 255)
 +
* <code>BOOTLOADER_PASSWORD</code>: "Passwort" zum Wechsel in den Bootloader (Vorgabe: "FwUp", maximal 4 Zeichen, darf keine Teilstrings von Befehlen enthalten)
 +
 
 +
<code>prozeda_cfg.h</code>
 +
* <code>PROZEDA_USE_COLUMN_NAMES</code>: Verwenden der Spaltennamen (irrelevant für Pirozeda)
 +
* <code>PROZEDA_SUPPORT_DISPLAY</code>: Aktiviert den Empfang von Displaydaten (Vorgabe: aktiv)
 +
* <code>PROZEDA_SUPPORT_HEADER</code>: Aktiviert den Empfang von Kopfzeilen-Datensätzen (Vorgabe: aktiv)
 +
* <code>PROZEDA_IGNORE_KITTY</code>: Ignorieren von Katzen-Paketen, andernfalls werden Fehler ausgegeben (Vorgabe: aktiv)
 +
* <code>PROZEDA_MSG_MAXTICKS</code>: 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:
 +
 
 +
* <code>reset</code>: Neustart
 +
* <code>uptime</code>: Anzeige der Laufzeit
 +
* <code>bootinfo</code>: Anzeigen der Infos, die auch beim (Neu-)Start angezeigt werden
 +
* <code>header</code>: Header werden gemäß <code>PIROZEDA_HEADERCNT</code> erneut ausgegeben
 +
* <code>stats</code>: 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 <code>sudo raspi-config</code> das SPI-Interface aktiviert (reboot nicht vergessen) und [https://www.mikrocontroller.net/articles/Raspberry_Pi_als_Universalprogrammer#Installation_der_Compiler 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.
 +
 
 +
{| class="wikitable"
 +
! 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====
 +
{{Infobox AVR
 +
| Typ  = ATmega88PA
 +
| Takt  = 12
 +
| FuseH = C5
 +
| FuseL = DE
 +
| FuseE = FC
 +
}}
 +
 
 +
Die empfohlene Variante (auch wenn man nicht beabsichtigt, den Bootloader zu nutzen).
 +
 
 +
Mit Bootloader sind das folgende Befehle:
 +
 
 +
<source lang="shell">
 +
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"
 +
</source>
 +
 
 +
====Ohne Bootloader====
 +
{{Infobox AVR
 +
| Typ  = ATmega88PA
 +
| Takt  = 12
 +
| FuseH = C5
 +
| FuseL = DE
 +
| FuseE = 07
 +
}}
 +
'cause I ain't gonna judge you
 +
 
 +
<source lang="shell">
 +
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"
 +
</source>
 +
 
 +
==Update der Firmware==
 +
In Sachen Bootloader bin ich ein großer Fan von [https://www.mikrocontroller.net/articles/AVR_Bootloader_FastBoot_von_Peter_Dannegger 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 [https://luani.de/projekte/updateloader/ 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 [https://www.mikrocontroller.net/topic/73196#1067153 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.
 +
 
 +
<source lang="shell">
 +
./bootloader -d /dev/serial0 -b 115200 -t 1024 -p pirozeda_0.2.hex -P aFwUp
 +
</source>
 +
 
 +
===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 [https://github.com/raspberrypi/hats/tree/master/eepromutils 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:
 +
 
 +
<source lang="bash">
 +
sudo ./eepflash.sh -w -f=pirozeda-hat_id.eep -t=24c32 -a=50
 +
</source>
 +
 
 +
Aktuell sind weder Product-ID noch Version-ID vergeben, ansonsten ist die Konfiguration wie folgt:
 +
<pre>
 +
# 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
 +
</pre>
 +
 
 +
==RTC==
 +
 
 +
Die [http://www.netzmafia.de/skripten/hardware/RasPi/Projekt-RTC/index.html Netzmafia] hat einen recht guten Artikel, wie man die hwclock bedient.
 +
 
 +
Wer sich nicht einlesen will, hier im Schnelldurchlauf:
 +
 
 +
Testen der RTC:
 +
 
 +
<source lang="shell">
 +
#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
 +
</source>
 +
 
 +
Dauerhaftes aktivieren der RTC:
 +
 
 +
<source lang="shell">
 +
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
 +
</source>
 +
 
 +
Laut Anleitung von Netzmafia muss die Datei <code>/etc/init.d/hwclock.sh</code> noch wie folgt angepasst werden:
 +
 
 +
<source lang="text">
 +
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
 +
</source>
 +
 
 +
Um das zu vereinfachen, habe ich eine SH-Datei vorbereitet, natürlich muss sich diese (<code>hwclock.new</code>) im gleichen Verzeichnis liegen, damit es funktioniert.
 +
 
 +
Im Ordner <code>options/rtc</code> befindet sich sowohl die <code>rtc-test.sh</code> als auch <code>rtc-enable.sh</code>.
 +
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 <code>/bin/bash</code> gestartet werden:
 +
 
 +
<source lang="shell">
 +
sudo /bin/bash rtc-test.sh
 +
</source>
 +
 
 +
==I²C + Taster==
 +
Für die Verwendung des I²C muss eigentlich nur in <code>raspi-config</code> 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.
 +
 
 +
=Mechanik=
 +
Im [[3D-Druck-Sammelsurium]] gibt es einen Spacer zwischen Raspberry Pi Zero und dem Hat.
 +
 
 +
=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
 +
* Korrektur des fehlerhaften Footprints für den Raspberry Pi Zero (untere Löcher um 0,5 mm nach unten versetzt)
  
Eine auf die neue Hardware angepasste Firmware ist aktuell in Arbeit.
+
=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
  
 
[[Kategorie:AVR]]
 
[[Kategorie:AVR]]

Aktuelle Version vom 15. Februar 2020, 21:22 Uhr

Pirozeda-HAT mit ADuM-Isolator auf Raspberry Pi Zero W

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 ADUM1301 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.

Mechanik

Im 3D-Druck-Sammelsurium gibt es einen Spacer zwischen Raspberry Pi Zero und dem Hat.

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
  • Korrektur des fehlerhaften Footprints für den Raspberry Pi Zero (untere Löcher um 0,5 mm nach unten versetzt)

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