Sommario:

Retro-CM3: una potente console di gioco gestita da RetroPie: 8 passaggi (con immagini)
Retro-CM3: una potente console di gioco gestita da RetroPie: 8 passaggi (con immagini)

Video: Retro-CM3: una potente console di gioco gestita da RetroPie: 8 passaggi (con immagini)

Video: Retro-CM3: una potente console di gioco gestita da RetroPie: 8 passaggi (con immagini)
Video: RETRO CM3! LA COLLABORAZIONE PERFETTA TRA CINESI E INGLESI! - RECENSIONE (SUB-ENG) 2024, Dicembre
Anonim
Retro-CM3: una potente console di GIOCO gestita da RetroPie
Retro-CM3: una potente console di GIOCO gestita da RetroPie
Retro-CM3: una potente console di GIOCO gestita da RetroPie
Retro-CM3: una potente console di GIOCO gestita da RetroPie
Retro-CM3: una potente console di GIOCO gestita da RetroPie
Retro-CM3: una potente console di GIOCO gestita da RetroPie

Questo tutorial è ispirato al PiGRRL Zero di adafruit, alla build originale di Gameboy Zero di Wermy e alla console di gioco gestita di GreatScottLab. Quelle console di gioco basate su RetroPie usano il raspberry pi zero (W) come nucleo. MA, dopo aver costruito diverse console Pi Zero, sono stati riscontrati due problemi principali.

1) Il Raspberry Pi Zero (W) ha solo Cortex-A7 single core e 512 MB di ram, il che va bene per cose di tipo NES/SNES/GB. Tuttavia, quando ho provato a eseguire l'Emus PS/N64, l'esperienza è stata del tutto inaccettabile. Anche alcuni dei giochi GBA non possono funzionare senza intoppi (alcuni ritardi audio, anche in alcuni giochi NEOGEO come Metal Slug quando si tratta di scene complicate); 2) La maggior parte delle build della console di gioco utilizza SPI o TV-out come interfaccia di visualizzazione. Il display SPI avrà bisogno della CPU per aiutare con il driver del frame buffer che peggiorerà l'esperienza di gioco e gli fps sono anche limitati dalla velocità del clock SPI. E la qualità di visualizzazione dell'uscita TV non è abbastanza buona.

In questo tutorial, utilizzeremo il RaspberryPi Compute Module 3 e un'interfaccia LCD DPI per costruire una console di gioco RetroPie definitiva. Dovrebbe essere in grado di eseguire tutti gli emulatori senza problemi e fornire un'alta risoluzione e un frame rate elevato.

La dimensione finale della console di gioco è 152x64x18mm con una batteria fino a 2000mAh. La build totale costa circa $ 65, incluso un PCB personalizzato, tutti i componenti, una scheda TF da 16 GB e un modulo di calcolo RaspberryPi 3 Lite. Poiché ho già una stampante 3D, la custodia mi costa solo 64 g di filamento PLA.

Cominciamo.

Nota: poiché l'inglese non è la mia prima lingua, se trovi errori o qualcosa non è chiaro, ti preghiamo gentilmente di farmelo sapere.

Questo è il mio primo post su instructable.com e ho davvero bisogno di tutti i tipi di suggerimenti da voi ragazzi.

Passaggio 1: ingredienti

ingredienti
ingredienti
ingredienti
ingredienti
ingredienti
ingredienti
ingredienti
ingredienti

Ecco gli ingredienti necessari per costruire la console di gioco. Alcune parti potrebbero non essere disponibili nella tua regione, prova alcune parti alternative.

1) Il modulo di calcolo RaspberryPi 3 Lite. Acquistalo dal negozio dove hai acquistato il tuo RaspberryPi 3B o provalo su ebay.

2) LCD da 3,2 pollici con interfaccia RGB/DPI. ASSICURARSI di avere un modulo LCD con interfaccia RGB/DPI perché è un MUST per costruire questa console. Ho ricevuto il mio LCD da un e-shop locale e lo stesso modulo può essere trovato ad alibaba. Se acquisti un modulo LCD alternativo, CHIEDI al fornitore di inviarti il parametro dettagliato e il codice di inizializzazione. È anche una scelta saggia acquistare i connettori corrispondenti dallo stesso negozio poiché ci sono così tanti diversi tipi di connettori.

3) ALPI SKPDACD010. Interruttore tattile con corsa di 1,75 mm. Cercalo nel tuo negozio di componenti elettronici locale.

4) Alcune altre chiavi. Usa qualsiasi altro tasto tattile che puoi ottenere per i pulsanti START/SELECT/VOL+/VOL-.

5) Altoparlante. Qualsiasi altoparlante da 8 ohm, 0,5-1,5 W.

6) Batteria. Ho scelto una batteria agli ioni di litio da 34 * 52 * 5,0 mm 1S 1000 mAh x2.

7) Alcuni circuiti integrati. STM32F103C8T6, IP5306, TDA2822, NC7WZ16, SY8113, PT4103 ed ecc.

8) Alcuni connettori. USB-Micro femmina, PJ-237 (jack per telefono), jack per schede TF, DDR2 SODIMM e così via.

9) Alcuni componenti passivi. Resistori, condensatori e induttori.

10) Un PCB personalizzato. I file schematico e PCB sono forniti alla fine. Ricordati di apportare modifiche se utilizzi parti alternative.

11) Una stampante 3D. Assicurati che sia in grado di stampare parti fino alla dimensione 152*66*10 mm.

12) Abbastanza filamento PLA.

Passaggio 2: il modulo di calcolo 3

Il modulo di calcolo 3
Il modulo di calcolo 3
Il modulo di calcolo 3
Il modulo di calcolo 3

Il Raspberry Pi Compute Module 3 è una scheda centrale molto potente per la prototipazione di alcuni gadget interessanti. L'introduzione dettagliata può essere trovata qui. E alcune informazioni utili possono essere trovate qui.

Il modulo utilizza un connettore di tipo DDR2 SODIMM, che è leggermente più difficile da usare. Inoltre, tutti i pin GPIO del core BCM2837 BANK1 e BANK0 sono in uscita.

Per iniziare a utilizzare il modulo di calcolo, dobbiamo fornire diversi voltaggi: 1,8 V, 3,3 V, 2,5 V e 5,0 V. Tra questi, 1,8 V e 3,3 V vengono utilizzati per alimentare alcune periferiche che richiedono circa 350 mA ciascuna. La linea di alimentazione da 2,5 V pilota il DAC di uscita TV e può essere collegata a 3,3 V poiché non è necessaria la funzione di uscita TV. Il 5.0V dovrebbe essere collegato ai pin VBAT e alimenta il Core. L'ingresso VBAT accetta tensioni comprese tra 2,5 V e 5,0 V e assicurati che l'alimentatore possa erogare fino a 3,5 W. I pin VCCIO (GPIO_XX-XX_VREF) possono essere collegati a 3,3 V poiché utilizziamo un livello CMOS da 3,3 V. Anche il pin SDX_VREF dovrebbe essere collegato a 3.3V.

Tutti i pin HDMI, DSI, CAM non vengono utilizzati qui, lasciali fluttuare. Ricorda di legare il pin EMMC_DISABLE_N a 3,3 V poiché utilizzeremo una scheda TF come disco rigido invece della funzione di avvio USB.

Quindi collegare i pin SDX_XXX ai pin corrispondenti sullo slot della scheda TF e non sono necessarie resistenze pull-up o pull-down. A questo punto, siamo pronti per avviare il modulo di calcolo Raspberry Pi 3. Accendere l'alimentatore in ordine decrescente: 5 V, 3,3 V e poi 1,8 V, il sistema dovrebbe essere in grado di avviarsi ma poiché non ci sono uscite dispositivo, non sappiamo se funziona correttamente. Quindi, dobbiamo aggiungere un display per verificarlo nel passaggio successivo.

Ma prima di procedere, dobbiamo prima dire al Pi qual è la funzione di ciascun GPIO. Qui fornisco alcuni file, metto "dt-blob.bin", "bcm2710-rpi-cm3.dtb" e "config.txt" nella cartella di avvio di una scheda TF appena installata. Metti "dcdpi.dtbo" nella cartella /boot/overlay. Il dt-blob.bin definisce la funzione predefinita di ogni GPIO. Cambio il GPIO14/15 in GPIO normale e sposto la funzione UART0 su GPIO32/33 poiché abbiamo bisogno di GPIO14/15 per interfacciarci con il modulo LCD. Dico anche al Pi di usare GPIO40/41 come funzione pwm e farli diventare l'uscita audio destra e sinistra. Il dcdpi.dtbo è un file di sovrapposizione dell'albero dei dispositivi e dice al Pi che useremo GPIO0-25 come funzione DPI. Infine, scriviamo "dtoverly=dcdpi" per informare il Pi di caricare il file di sovrapposizione che abbiamo fornito.

In questo momento, i Raspberry Pi hanno compreso appieno quale funzione dovrebbe essere utilizzata per ogni GPIO e siamo pronti per andare avanti.

Passaggio 3: interfacciamento del modulo LCD

Interfacciamento del modulo LCD
Interfacciamento del modulo LCD
Interfacciamento del modulo LCD
Interfacciamento del modulo LCD
Interfacciamento del modulo LCD
Interfacciamento del modulo LCD

Poiché in questa console può essere utilizzato un modulo LCD con interfaccia DPI/RGB diverso, qui prendiamo come esempio il modulo utilizzato nella mia build. E se ne hai scelto uno diverso, controlla la definizione dei pin del tuo modulo e crea le connessioni in base ai nomi dei pin come mostrato nell'esempio.

Ci sono due interfacce sul modulo LCD: una SPI e una DPI. L'SPI viene utilizzato per configurare le impostazioni iniziali dell'IC del driver LCD e possiamo collegarle a qualsiasi GPIO inutilizzato. Collegare solo i pin Reset, CS, MOSI (SDA/SDI) e SCLK (SCL), il pin MISO (SDO) non viene utilizzato. Per inizializzare il driver LCD, qui utilizziamo la libreria C BCM2835 per pilotare i GPIO e emette una certa sequenza di inizializzazione fornita dal fornitore del modulo. Il file sorgente può essere trovato più avanti in questo istruzioni.

Installa la libreria BCM2835 C su un altro Raspberry Pi 3 seguendo le istruzioni qui. Quindi utilizzare il comando "gcc -o lcd_init lcd_init.c -lbcm2835" per compilare il file sorgente. Quindi aggiungi una nuova riga nel file /etc/rc.local prima di "exit 0": "/home/pi/lcd_init" (supponiamo di aver inserito l'applicazione compilata nella cartella /home/pi). Va sottolineato che il file sorgente viene utilizzato solo per il determinato modulo che ho usato e per un diverso modulo LCD, basta chiedere al fornitore una sequenza di inizializzazione e modificare di conseguenza il file sorgente. Questo processo è piuttosto complicato perché a questo punto non si vede nulla dallo schermo, ecco perché ti consiglio caldamente di farlo su una scheda RPI-CMIO in quanto porta fuori tutti i GPIO in modo da poterlo eseguire il debug con uart o wlan.

La parte seguente è semplice, basta collegare i pin di sinistra del modulo LCD secondo qui. Dipende dal tipo di modulo LCD che hai, scegli saggiamente la modalità RGB. Per me, qui ho scelto DPI_OUTPUT_FORMAT_18BIT_666_CFG2 (modalità 6). Modifica la riga "dpi_output_format=0x078206" in base alla tua scelta. E se il tuo modulo LCD utilizza una risoluzione diversa, regola "hdmi_timings=480 0 41 60 20 800 0 5 10 10 0 0 0 60 0 32000000" fai riferimento al file qui.

Se tutte le impostazioni sono corrette, al prossimo avvio del tuo Pi, dovresti vedere il display sullo schermo dopo un nero di 30-40 secondi (dall'alimentazione al sistema carica lo script di inizializzazione SPI).

Passaggio 4: il tastierino e l'audio

Il tastierino e l'audio
Il tastierino e l'audio
Il tastierino e l'audio
Il tastierino e l'audio

Abbiamo finito con il Core e l'Output negli ultimi due passaggi. Passiamo ora alla parte Input.

Una console di gioco ha bisogno di tasti e pulsanti. Qui abbiamo bisogno di 10 interruttori ALPS SKPDACD010 come pulsanti su/giù/destra/sinistra, LR e A/B/X/Y. E i normali tasti a montaggio superficiale 6x6 vengono utilizzati per altri pulsanti come start/select e volume-up/down.

Esistono due modi per interfacciare i pulsanti con il Raspberry Pi. Un modo è collegare i pulsanti direttamente ai GPIO sul Pi e un altro modo è collegare i pulsanti a un MCU e interfacciarsi con il Pi tramite il protocollo USB HID. Qui ho scelto il secondo, perché abbiamo bisogno di un MCU per gestire comunque la sequenza di accensione ed è più sicuro tenere il Pi lontano dal contatto umano.

Quindi, collega le chiavi all'STM32F103C8T6 e quindi collega l'MCU al Pi con USB. Un esempio del programma MCU si trova alla fine di questo passaggio. Modificare le definizioni dei pin in hw_config.c e compilarlo con la libreria USB dell'MCU che si trova qui. Oppure puoi semplicemente scaricare il file esadecimale direttamente sull'MCU purché tu condivida le stesse definizioni dei pin nello schema alla fine di questo istruzioni.

Per quanto riguarda le uscite audio, lo schema ufficiale del Raspberry Pi 3 B offre un buon modo per filtrare l'onda pwm e lo stesso circuito dovrebbe funzionare perfettamente qui. Una cosa da sottolineare è che ricordarsi di aggiungere la riga "audio_pwm_mode=2" alla fine di config.txt per abbassare il rumore dell'uscita audio.

Per pilotare l'altoparlante, è necessario un driver dell'altoparlante. Qui ho scelto il TDA2822 e il circuito è il circuito ufficiale BTL. Notare che la presa telefonica PJ-327 ha un pin a distacco automatico sull'uscita destra. Quando non sono collegate le cuffie, il pin 3 è collegato al canale destro. E non appena la cuffia è collegata, questo pin viene staccato dal canale destro. Questo pin può essere utilizzato come pin di ingresso dell'altoparlante e l'altoparlante si disattiverà quando le cuffie sono collegate.

Passaggio 5: il potere

Il potere
Il potere
Il potere
Il potere
Il potere
Il potere

Torniamo alla sezione di potenza e controlliamo il progetto di potenza dettagliato.

Ci sono 3 sezioni di alimentazione: l'alimentazione MCU, il caricabatterie/amplificatore e i DC-DC Bucks.

L'alimentazione dell'MCU è divisa da tutti gli altri alimentatori perché ne abbiamo bisogno per eseguire la sequenza di pre-accensione. Quando il pulsante di accensione viene premuto, il PMOS collegherà il pin EN dell'LDO alla batteria per abilitare l'LDO. L'MCU viene quindi acceso (il pulsante è ancora premuto). All'avvio dell'MCU, controllerà se il pulsante di accensione viene premuto abbastanza a lungo. Dopo circa 2 secondi, se l'MCU rileva che il pulsante di accensione è ancora premuto, attiverà il pin "PWR_CTL" per mantenere acceso il PMOS. In questo momento, l'MCU assume il controllo dell'alimentatore dell'MCU.

Quando il pulsante di accensione viene premuto nuovamente per 2 secondi, l'MCU eseguirà la sequenza di spegnimento. Al termine della sequenza di spegnimento, l'MCU rilascerà il pin "PWR_CTL" per consentire lo spegnimento del PMOS e l'alimentazione dell'MCU viene quindi disabilitata.

La parte del caricatore / booster utilizza l'IC IP5306. Questo IC ha una carica di 2,4 A e una scarica di 2,1 A Soc altamente integrato per l'utilizzo di power bank ed è perfettamente adatto alle nostre esigenze. L'IC è in grado di caricare la batteria, fornire un'uscita a 5V e mostrare il livello della batteria con 4 LED contemporaneamente.

La parte DC-DC Buck utilizza due buck da 3A ad alta efficienza SY8113. La tensione di uscita può essere programmata da 2 resistori. Per garantire la sequenza di alimentazione, abbiamo bisogno che l'MCU abiliti prima il Booster. Il segnale KEY_IP simulerà la pressione di un tasto sul pin KEY di IP5306 e attiverà il booster 5V interno. Successivamente, l'MCU abiliterà il buck da 3,3 V tirando in alto il pin RASP_EN. E dopo aver fornito 3,3 V, il pin EN del buck da 1,8 V viene tirato in alto e abilita l'uscita da 1,8 V.

Per quanto riguarda la batteria, per la console sono sufficienti due batterie agli ioni di litio da 1000 mAh. La dimensione normale di questo tipo di batteria è di circa 50*34*5 mm.

Passaggio 6: configurazione del sistema

Configurazione del sistema
Configurazione del sistema

In questo passaggio, metteremo insieme tutte le impostazioni.

Innanzitutto, devi scaricare e flashare l'immagine RetroPie in una nuova scheda TF. Tutorial e download possono essere trovati qui. Scarica la versione Raspberrypi 2/3. Vedrai 2 partizioni dopo aver flashato l'immagine: una partizione "boot" del formato FAT16 e una partizione "Retropie" del formato EXT4.

Quando hai finito, non inserirlo subito nel Raspberry Pi perché dobbiamo aggiungere una partizione FAT32 per le rom. Usa strumenti di partizione come DiskGenius per regolare la partizione EXT4 a circa 5-6 GB e crea una nuova partizione FAT32 con tutto lo spazio libero rimasto sulla tua scheda TF. Fare riferimento all'immagine che ho caricato.

Assicurati che il tuo sistema sia in grado di identificare il lettore di schede TF come un dispositivo USB-HDD e vedrai 3 partizioni nel tuo explorer. Due di questi sono accessibili e Windows ti chiederà di formattare quello di sinistra. NON formattarlo!!

Per prima cosa apri la partizione "boot" e segui il passaggio 2 per impostare le configurazioni dei pin. Oppure puoi semplicemente decomprimere boot.zip in questo passaggio e copiare tutti i file e le cartelle nella partizione di avvio. Ricorda di copiare anche lo script lcd_init compilato nella partizione di avvio.

Eccoci pronti per eseguire il primo boot, ma non essendoci display vi consiglio caldamente di utilizzare una scheda RPI-CMIO con un dispositivo usb wlan. Quindi puoi configurare il file wpa_supplicant e abilitare ssh in questo passaggio. Tuttavia, se non si intende ottenerne uno, GPIO32/33 può essere utilizzato come terminale UART. Collega il pin TX (GPIO32) e RX (GPIO33) a una scheda da USB a uart e accedi al terminale con la velocità di trasmissione di 115200. In entrambi i casi, devi ottenere un accesso terminale al tuo Pi.

Al primo avvio, il sistema si bloccherà quando si tenta di espandere il file system. Ignoralo, premi start (tasto invio della tastiera USB HID) e riavvia. Sul terminale, copia lo script lcd_init nella cartella home dell'utente "pi" e segui il passaggio 3 per impostare l'avvio automatico. Dopo un altro riavvio, dovresti vedere lo schermo accendersi e mostrare qualcosa.

In questo momento, la tua console di gioco è pronta per giocare. Tuttavia, per caricare rom e BIOS nella scheda TF, è necessario accedere ogni volta a un terminale. Per semplificare, ti suggerisco di configurare la partizione FAT32.

Prima fai il backup della cartella RetroPie sotto /home/pi su RetroPie-bck: "cp -r RetroPie RetroPie-bck". Quindi aggiungi una nuova riga in /etc/fstab: "/dev/mmcblk0p3 /home/pi/RetroPie defaults, uid=1000, gid=1000 0 2" per montare automaticamente la partizione FAT32 nella cartella RetroPie impostando il proprietario su utente "pi". Dopo il riavvio, scoprirai che il contenuto della cartella RetroPie è sparito (se non lo è, riavvia di nuovo) e alcuni errori vengono visualizzati sullo schermo. Copia tutti i file in RetroPie-bck su RetroPie e riavvia di nuovo. Gli errori dovrebbero scomparire ed è possibile configurare il dispositivo di input seguendo le istruzioni sullo schermo.

Se vuoi aggiungere rom o BIOS, scollega la scheda TF quando è spenta e collegala al tuo computer. Apri la terza partizione (RICORDA di IGNORARE il suggerimento sul formato!!!) e copia i file nelle cartelle corrispondenti.

Passaggio 7: custodia e pulsanti stampati in 3D

La custodia e i pulsanti stampati in 3D
La custodia e i pulsanti stampati in 3D
La custodia e i pulsanti stampati in 3D
La custodia e i pulsanti stampati in 3D
La custodia e i pulsanti stampati in 3D
La custodia e i pulsanti stampati in 3D

Ho progettato la custodia in stile GameBoy Micro per la console di gioco.

Basta stampare

4x ABXY. STL

2x LR. STL (è necessario aggiungere supporto)

1x CROCE. STL

1x TOP. STL

1x BOTTOM. STL

Li stampo usando PLA con riempimento del 20%, strato di 0,2 mm ed è abbastanza forte.

Poiché la custodia è stretta, controlla l'accuratezza della stampante con un cubo di prova prima di stampare.

Per assemblarli insieme sono necessarie tre viti 3 mm lunghe 5 mm e quattro viti 3 mm lunghe 10 mm.

Passaggio 8: tutti insieme e risoluzione dei problemi

Tutti insieme e risoluzione dei problemi
Tutti insieme e risoluzione dei problemi
Tutti insieme e risoluzione dei problemi
Tutti insieme e risoluzione dei problemi
Tutti insieme e risoluzione dei problemi
Tutti insieme e risoluzione dei problemi
Tutti insieme e risoluzione dei problemi
Tutti insieme e risoluzione dei problemi

Poiché il circuito è un po' complicato, è una buona scelta fare un po' di lavoro sul PCB. L'intero schema e la mia versione PCB vengono caricati alla fine di questo passaggio. Se intendi utilizzare la mia versione PCB, ti preghiamo gentilmente di non rimuovere il mio logo sul livello Top_Solder. È meglio creare la tua personalizzazione e consegnare il tuo file PCB al produttore locale per farlo uscire perché è davvero difficile acquistare tutte le stesse parti che uso sul mio PCB.

Dopo aver saldato tutti i componenti sul PCB e testato, la prima cosa da fare è scaricare il file esadecimale sull'MCU. Successivamente, incolla il modulo LCD sul PCB. Il modulo LCD dovrebbe essere 3 mm sopra il PCB per adattarsi alla custodia. Usa del nastro biadesivo spesso per attaccarlo. Quindi collegare l'FPC al connettore e inserire la scheda CM3L e TF. NON saldare la batteria ora, collegare una fonte di alimentazione USB e avviarla!

Controllare tutti i pulsanti e il display. Misurare la tensione tra BAT+ e GND, verificare se la tensione è di circa 4.2V. Se la tensione è corretta, scollegare il cavo USB e saldare la batteria. Prova il pulsante di accensione.

Metti il pulsante CROSS e ABXY nel case TOP e metti il PCB nel case. Utilizzare 3 viti per fissare il PCB nella custodia. Aggiungi del nastro biadesivo spesso sul retro di tutti i pulsanti SKPDACD010 e attaccaci la batteria. UTILIZZARE nastro spesso per evitare che i pin di SKPDACD010 danneggino la batteria. Quindi attaccare l'altoparlante alla custodia INFERIORE. Prima di chiuderlo, potrebbe essere necessario provare tutti i pulsanti, verificare se funzionano e rimbalzano correttamente. Quindi chiudere la custodia con 4 viti.

Godere.

Alcuni suggerimenti per la risoluzione dei problemi:

1) Controllare tre volte la connessione dei pin del modulo LCD sullo schema e sul PCB.

2) Instradare i cavi del segnale LCD con un vincolo di lunghezza.

3) Quando non si è sicuri delle sezioni di alimentazione, saldare e testare ciascuna sezione seguendo la sequenza di alimentazione. 5V prima e poi 3.3V e 1.8V. Dopo aver testato tutte le sezioni di potenza, saldare gli altri componenti.

4) Se il display si sfoca frequentemente, provare a invertire la polarità del segnale PCLK impostando dpi_output_format.

5) Se il display è molto decentrato, prova a invertire la polarità del segnale HSYNC o VSYNC.

6) Se il display è leggermente decentrato, prova a regolare le impostazioni di overscan.

7) Se il display è nero, prova ad attendere che il sistema si avvii con lo script rc.local. Se hai bisogno di un display dall'inizio, prova a collegare l'interfaccia SPI all'MCU e usa l'MCU per inizializzare il modulo LCD.

8) Se il display è sempre nero, ricontrollare la sequenza di inizializzazione.

9) Sentiti libero di porre qualsiasi domanda qui o tramite e-mail: [email protected]

Consigliato: