Pirozeda-HAT: Unterschied zwischen den Versionen
Chris (Diskussion | Beiträge) (unnötige Überschriften entfernt) |
|||
(10 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | Wie bereits im [[Pirozeda|Hauptartikel] und im Blog erwähnt, sind bei der ersten Leiterkarte ein paar Dinge unschön. | + | [[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. | ||
Deshalb habe ich mich noch einmal hingesetzt und ein Design mit anderen Kompromissen erstellt: | Deshalb habe ich mich noch einmal hingesetzt und ein Design mit anderen Kompromissen erstellt: | ||
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 | + | * 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 | + | 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 25: | Zeile 24: | ||
==Variante 1: Direkt== | ==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. | 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 | + | 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. | 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 38: | Zeile 39: | ||
{| class="wikitable" | {| class="wikitable" | ||
− | ! Menge|| Referenz || Wert | + | ! Menge || Referenz || Wert || Package || Reichelt Bestellcode |
|- | |- | ||
− | | 1 | + | | 1 || SV2 || || MA03-2 || SL 2X40G 2,54 |
|- | |- | ||
− | | 1 | + | | 1 || SV1 || || ML6S || WSL 6G |
|- | |- | ||
− | | 3 | + | | 3 || R22, R26, R27 || 0 || R0805 || RND 0805 1 0 |
|- | |- | ||
− | | 3 | + | | 3 || R18, R19, R20 || 100 || R0805 || RND 0805 1 100 |
|- | |- | ||
− | | | + | | 2 || C1, C5 || 100n || C0603 || X7R-G0603 100N |
|- | |- | ||
− | | 1 | + | | 1 || R1 || 10k || R0603 || RND 0603 1 10K |
|- | |- | ||
− | | 2 | + | | 2 || C3, C4 || 10p || C0603 || X7R-G0603 10p |
|- | |- | ||
− | | 1 | + | | 1 || Q2 || 12M || HC49UP || 12,0000-HC49-SMD |
|- | |- | ||
− | | | + | | 3 || R14, R15, R16 || 1k || R0603 || RND 0603 1 1,0K |
|- | |- | ||
− | | 1 | + | | 1 || C2 || 2u2 || C0805 || KEM X5R0805 2,2U |
|- | |- | ||
− | | 1 | + | | 1 || Q1 || BSS138 || SOT23 || BSS 138 SMD |
|- | |- | ||
− | | 1 | + | | 1 || CL1 || Datacable || DUMMY || LIYY 614-5,0 |
|- | |- | ||
− | | 1 | + | | 1 || SV5 || IDC-Conn 6 0.1in || DUMMY || PFL 6 |
|- | |- | ||
− | | 1 | + | | 1 || IC3 || MEGA48/88/168-AU || TQFP32-08 || ATMEGA 88PA-AU |
|- | |- | ||
− | | 1 | + | | 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.''' | ||
+ | |||
Dies entspricht weitestgehend dem Originaldesign. | Dies entspricht weitestgehend dem Originaldesign. | ||
Zeile 77: | Zeile 82: | ||
<gallery> | <gallery> | ||
− | pirozeda_hat_0. | + | pirozeda_hat_0.1_opto_sch.png|Schaltplan mit Optokoppler |
− | pirozeda_hat_0. | + | 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 | + | ! Menge || Referenz || Wert || Package || Reichelt Bestellcode |
|- | |- | ||
− | | 1 | + | | 1 || SV2 || || MA03-2 || SL 2X40G 2,54 |
|- | |- | ||
− | | 1 | + | | 1 || SV1 || || ML6S || WSL 6G |
|- | |- | ||
− | | 1 | + | | 1 || R21 || 0 || R0805 || RND 0805 1 0 |
|- | |- | ||
− | | | + | | 2 || C1, C5 || 100n || C0603 || X7R-G0603 100N |
|- | |- | ||
− | | 1 | + | | 1 || R1 || 10k || R0603 || RND 0603 1 10K |
|- | |- | ||
− | | 2 | + | | 2 || C3, C4 || 10p || C0603 || X7R-G0603 10p |
|- | |- | ||
− | | 1 | + | | 1 || Q2 || 12M || HC49UP || 12,0000-HC49-SMD |
|- | |- | ||
− | | 4 | + | | 4 || R13, R14, R15, R16 || 1k || R0603 || RND 0603 1 1,0K |
|- | |- | ||
− | | 1 | + | | 1 || C15 || 1n || C0603 || X7R-G0603 1,0N |
|- | |- | ||
− | | 1 | + | | 1 || R17 || 2k2 || R0603 || RND 0603 1 2,2K |
|- | |- | ||
− | | 1 | + | | 1 || C2 || 2u2 || C0805 || KEM X5R0805 2,2U |
|- | |- | ||
− | | 1 | + | | 1 || OK2 || 6N137 || DIL08 || 6N 137 |
|- | |- | ||
− | | 1 | + | | 1 || Q1 || BSS138 || SOT23 || BSS 138 SMD |
|- | |- | ||
− | | 1 | + | | 1 || CL1 || Datacable || DUMMY || LIYY 614-5,0 |
|- | |- | ||
− | | 1 | + | | 1 || SV5 || IDC-Conn 6 0.1in || DUMMY || PFL 6 |
|- | |- | ||
− | | 1 | + | | 1 || IC3 || MEGA48/88/168-AU || TQFP32-08 || ATMEGA 88PA-AU |
|- | |- | ||
− | | 1 | + | | 1 || SV4 || Mini-DIN 8 plug || DUMMY || SE-DIO M08 |
|- | |- | ||
− | | 1 | + | | 1 || X1 || RPI_CONDENSEDZERO || RPI_ZERO_THT || BL 2X25G8 2,54 |
|} | |} | ||
==Variante 3: ADUM-Isolator== | ==Variante 3: ADUM-Isolator== | ||
+ | '''Aufgebaut und weitestgehend erfolgreich getestet.''' | ||
+ | |||
Die "zukunftssichere" aber gleichzeitig auch die teuerste Variante. | Die "zukunftssichere" aber gleichzeitig auch die teuerste Variante. | ||
Zeile 129: | 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 | + | ! Menge || Referenz || Wert || Package || Reichelt Bestellcode |
|- | |- | ||
− | | 1 | + | | 1 || SV2 || || MA03-2 || SL 2X40G 2,54 |
|- | |- | ||
− | | 1 | + | | 1 || SV1 || || ML6S || WSL 6G |
|- | |- | ||
− | | 1 | + | | 1 || R21 || 0 || R0805 || RND 0805 1 0 |
|- | |- | ||
− | | | + | | 1 || R9 || 100 || R0603 || RND 0603 1 100 |
|- | |- | ||
− | | 4 | + | | 4 || C1, C5, C9, C10 || 100n || C0603 || X7R-G0603 100N |
|- | |- | ||
− | | 1 | + | | 1 || R1 || 10k || R0603 || RND 0603 1 10K |
|- | |- | ||
− | | 2 | + | | 2 || C3, C4 || 10p || C0603 || X7R-G0603 10p |
|- | |- | ||
− | | 1 | + | | 1 || Q2 || 12M || HC49UP || 12,0000-HC49-SMD |
|- | |- | ||
− | | | + | | 3 || R14, R15, R16 || 1k || R0603 || RND 0603 1 1,0K |
|- | |- | ||
− | | 1 | + | | 1 || C2 || 2u2 || C0805 || KEM X5R0805 2,2U |
|- | |- | ||
− | | 1 | + | | 1 || IC4 || ADUM1301ARW || SO-16W || ADUM 1301 ARW |
|- | |- | ||
− | | 1 | + | | 1 || Q1 || BSS138 || SOT23 || BSS 138 SMD |
|- | |- | ||
− | | 1 | + | | 1 || CL1 || Datacable || DUMMY || LIYY 614-5,0 |
|- | |- | ||
− | | 1 | + | | 1 || SV5 || IDC-Conn 6 0.1in || DUMMY || PFL 6 |
|- | |- | ||
− | | 1 | + | | 1 || IC3 || MEGA48/88/168-AU || TQFP32-08 || ATMEGA 88PA-AU |
|- | |- | ||
− | | 1 | + | | 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 181: | Zeile 211: | ||
==HAT-ID== | ==HAT-ID== | ||
− | Die [https://github.com/raspberrypi/hats Raspberry Pi HAT Specification] schließt einen I²C- | + | '''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 | + | ! Menge || Referenz || Wert || Package || Reichelt Bestellcode |
+ | |- | ||
+ | | 1 || SJ1 || || SJ || | ||
|- | |- | ||
− | | 1 | + | | 1 || C6 || 100n || C0603 || X7R-G0603 100N |
|- | |- | ||
− | | 1 | + | | 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. | + | 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 | + | ! Menge || Referenz || Wert || Package || Reichelt Bestellcode |
|- | |- | ||
− | | | + | | 2 || R11, R12 || 0 || R0603 || RND 0603 1 0 |
|- | |- | ||
− | | | + | | 1 || C8 || 100n || C0603 || X7R-G0603 100N |
|- | |- | ||
− | | 1 | + | | 1 || B1 || 3003 || 3003 || KZH 20P |
|- | |- | ||
− | | | + | | 2 || R6, R8 || 3k3 || R0603 || RND 0603 1 3,3K |
|- | |- | ||
− | | 1 | + | | 1 || IC1 || DS1307Z || SO08 || DS 1307Z |
|- | |- | ||
− | | 1 | + | | 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 224: | Zeile 274: | ||
{| class="wikitable" | {| class="wikitable" | ||
− | ! Menge|| Referenz | + | ! 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 |
|} | |} | ||
Zeile 234: | Zeile 284: | ||
{| class="wikitable" | {| class="wikitable" | ||
− | ! Menge|| Referenz | + | ! Menge || Referenz || Wert || Package || Reichelt Bestellcode |
|- | |- | ||
− | | 1 | + | | 1 || R31 || 100 || R0603 || RND 0603 1 100 |
|- | |- | ||
− | | 1 | + | | 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 | + | ! 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) | ||
− | + | =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, 22:22 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 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.
Inhaltsverzeichnis
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 Befehlheader
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
: Neustartuptime
: Anzeige der Laufzeitbootinfo
: Anzeigen der Infos, die auch beim (Neu-)Start angezeigt werdenheader
: Header werden gemäßPIROZEDA_HEADERCNT
erneut ausgegebenstats
: 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 |
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 |
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