Pi-Rex – Un HAT-ATX per RasperryPi4

Un HAT disegnato per RaspberryPi4 la cui funzione principale e’ di poter utilizzare un normale alimentatore ATX

Il RaspberryPi4 e’ una SBC (single board computer) con una discreta potenza che con una sua versione arriva ad avere ben 8GB di RAM. Processore e Ram sono in grado di svolgere compiti importanti. Il principale pregio del Pi4 e’ che consuma poco e fa’ molto e ci si puo’ collegare molta roba… che va’ alimentata!

Spesso mi trovavo con un alimentatore per il Pi4, uno per disco USB collegato (anche piu’ di uno alla volta) e quelli di eventuali aggeggi vari.

Ho pensato di creare una board da collegare al Pi4 e fargli gestire tutta l’alimentazione a lui collegato. L’ATX e’ un alimentatore pratico, ha tutte le tensioni che mi servivano, filtrate e belle. Tanta ma tanta disponibilita’ di potenza e,sopratutto, facilmente reperibili a basso costo! (Usati te li regalano praticamente).

Ecco quindi l’idea e come la ho sviluppata con Kicad.

Quella che trovate qui sotto e’ la versione di prova (0.1). Per la stampa del PCB mi sono affidato questa volta a www.pcbway.com che ha prezzi ottimi e spedizioni economiche. Inoltre KiCad ha un plugin di esportazione sul loro sito per me perfetto..

Sono possibili errori visto che non la ho ancora montata ne SCONSIGLIO per il momento la produzione.

Le caratteristiche che ho voluto sono le seguenti:

  • Alimentazione di tutti gli apparati (compreso il RaspberryPi4) connessi attraverso un alimentatore standard ATX da pc.
  • Accensione e spegnimento COMPLETO (no sospensioni) attraverso un unico pulsante. Funzione ottenuta per il momento con un integrato FlipFlop e un NAND Gate. In pratica:
    • RPI Spento: Pressione breve -> Accensione
    • RPI Acceso: Pressione breve -> Richiesta di reboot/spegnimento al sistema (pin dedicato)
    • RPI Acceso: Pressione lunga -> Spegnimento BRUTALE togliendo completamente l’alimentazione
  • Gestione di piu’ ventole in standard PWM (4pin) per poter gestire la temperatura al meglio all’interno delle realizzazione dove viene impiegata
  • Esposizione di tutte le possibili interfacce di comunicazione
    • SPI
    • UART
    • I2C ( 2 canali possibili per gestire piu’ sensori uguali)
    • Pin del RaspberryPi inutilizzati
  • Controllo di un carico importante (220V) per apparati subordinati al RPI
  • Gestione di una striscia a LED RGB 5050 di alemno 3metri (ho un piccolo rack da illuminare 🙂 )
  • Beep! A chi non piace una cosa che possa fare BEEP!

Il tutto completato con connessioni che si possano portare esternamente su di un case.

Alimentare cosi il mio RaspberryPi4 mi ha permesso di collegare una quantità infinita di apparati esterni, prima non mi era possibile se non con numerosi alimentatori dedicati.

L’esempio piu’ pratico e’ collegare 4 Hard Disk rotazionali di recupero utilizzando un bridge usb unico (tipo QUESTO).

Ok, me ne sono accorto pure io, il throughput non e’ il massimo ma funziona (con un piccolo escamotage software) e esistono ancora scenari in cui la velocità assoluta non e’ indispensabile (cavolo… stai usando un RPI, accontentati!)

Purtroppo, dopo aver ricevuto la prima stampa delle schede mi sono reso conto di alcuni errori che richiedono interventi di una certa rilevanza per far funzionare la scheda, appena posso cercherò di rimediare 🙂

DOWNLOAD dei file per la produzione

DOWNLOAD del software per il Pi4 per gestire al meglio la scheda (non ancora scritto ma si fara’!)

Intel 4004

Ho scoperto da poco il nome di chi, per primo, ha inventato un microprocessore. Il processore e’ il 4004 della Intel e la persona e’ un certo Federico Faggin.

Ne parlo perche’ in questo periodo sto leggendo il suo libro (Silicio) e sono rimasto affascinato dalla storia della nascita dell’oggetto che piu’ di tutti ha dato il via all’informatica come la conosciamo.

Giusto per riassumere due info che ho raccolto online:

  • Creato nel 1971 – Gennaio il primo prototipo funzionante
  • le lettere davanti al 4004 stanno per il tipo di package:
    • C – Ceramica bianca (il piu’ vecchio e ricercato)
    • P – Plastica
    • D – Ceramica scura
  • e’ stato pensato per funzionare in simbiosi con altri integrati che prendono il nome dalla serie 4000 quali:
    • 4001 – ROM a 2048 bit
    • 4002 – RAM a 320 bit
    • 4003 – Shift register
  • nato per creare una calcolatrice, la Busicom 141-PF

Goloso come sono di “roba vecchia” ho subito fatto alcune ricerche online e scopro, tra le altre cose, che un processore c4004 (la c sta’ per supporto ceramico) viene ora (10-11-2020) venduto su ebay a oltre 1300€

Altra cosa degna di nota e’ il design interno del microprocessore che potete trovare facilmente online, i siti piu’ carini che ho trovato sono:

http://www.intel4004.com/

https://www.4004.com/

Beh, forse una stampina in casa la metto 🙂

Arduino, il Watchdog

Giocando con Garagino ho scoperto che i carichi induttivi (leggi motori elettrici) o anche alimentatori Switching di dubbia qualità creano “spurie” che interferiscono con il corretto funzionamento di Arduino. Di fatto lo mandano in “tilt” anche se non ho ancora capito se il problema “entra” nel micro controllore dall’alimentazione (passando per 2 alimentatori switching con condensatori vari di livellamento e varistori) oppure dalla connessione i2c che uso per pilotare i relay.

Fatto sta che si inchioda e resta li, a far righette senza senso sul bel display rosso.

L’unica soluzione che sono riuscito a trovare per poterlo utilizzare un po più serenamente e’ il  Watchdog.

Questo “cane da guardia” non e’ altro che un timer che deve essere resettato ogni tot tempo dal programma in esecuzione, se questo non avviene il timer riavvia il micro controllore.

Questo meccanismo è solitamente implementato in hardware ed è presente sul microcontrollore ATMega328 cuore di arduino UNO e familia.

Per utilizzare il Watchdog bisogna inserire la libreria wdt.h

I tempi di reset del Watchdog sono:

Tempo reset Parola Chiave
15mS WDTO_15MS
30mS WDTO_30MS
60mS WDTO_60MS
120mS WDTO_120MS
250mS WDTO_250MS
500mS WDTO_500MS
1 Secondi WDTO_1S
2 Secondi WDTO_2S
4 Secondi WDTO_4S
8 Secondi WDTO_8S

Nel  setup() abilito il watchdog specificando il tempo di reset scrivendo:

In pratica se entro 8 secondi non resetto il time del watchdog questo riavvia il micro che probabilmente si e’ impallato.

Per resettarlo:

In pratica… se so’ che nessuna delle atività svolte dal programma dura 8Secondi… lo resetto ogni volta che ricomincia il loop e ciao, se si impalla si riavvia.

Beh, forse e’ meglio scegliere con piu’ cura dove posizionare il wdt reset() ma ci siamo capiti 🙂