ORbit16™ Joystick BitPack™
Il Joystick Bitpack™ è una scheda di espansione per ORbit16™ che permette di implementare un Joystick USB HID + Seriale completo di 2 assi analogici e 8 pulsanti. La sua realizzazione è davvero molto semplice: è possibile realizzarla su una normale basetta a singola faccia in formato quarto di eurocard (50x75mm da ridurre poi eventualmente a 50×70).
Una delle altre caratteristiche che non avevo elencato per ORbit16™ è anche questa: la possibilità di utilizzare formati di basette standard quando andiamo ad utilizzare la fotoincisione. L’utilizzo del formato 1/4 di eurocard permette di utilizzare i pin di espansione più interni della scheda, lasciando liberi quelli esterni per eventuali connessioni parallele o collegamento di strumentazione (oscilloscopi/analizzatori logici/tester ecc).
Dicevo: ORbit16™ si trasforma in un Joystick USB HID: la scheda verrà difatti riconosciuta dal PC come un normale Gamepad ed è possibile utilizzarla con i nostri giochi preferiti. L’esempio è adattato da quello identificato “Device – HID – Joystick” presente nella MAL. In aggiunta a tale esempio (oltre all’adattamento e all’implementazione di tutte le funzionalità del joystick compresa la lettura degli assi analogici mediante il convertitore AD integrato) ho aggiunto una connessione UART, utile se si vuole, ad esempio, utilizzare il joystick per il controllo di un robot, magari attraverso un modulo XBee o altri tipi di interfacciamento.
Di default la UART è configurata per lavorare a 57600,n,8,1 e fornisce in uscita i dati nel seguente formato:
X:127 Y:127 B:128 |
Viene in pratica fornito il valore dei due assi X e Y in formato unsigned char, il valore 127 (o prossimo ad esso, dipende dalle tolleranze dei trimmer del joystick) indica la posizione centrale. Per l’asse X un valore superiore a 127 indica uno spostamento a destra, minore di 127 a sinistra. Per l’asse Y un valore superiore a 127 indica uno spostamento verso il basso, al contrario un valore inferiore a 127 indica spostamento verso il basso. Il valore che segue B: indica lo stato degli 8 pulsanti. Ogni pulsante imposta ad uno (pulsante premuto) o a zero il relativo bit in questo valore.
Sugli IO ai quali vengono collegati i pulsanti viene sfruttata la funzionalità delle resistenze di pullup integrate. Sappiamo che questa funzione è prevista sui pin Change Notification, indicati con CNx sul datasheet e aventi anche la caratteristica di generare un interrupt al cambio di stato. Questa funzione viene sfruttata su tutti gli IO dei pulsanti tranne su RB7 (CN23) per il quale è già prevista una resistenza di pullup su ORbit16™, essendo tale pulsante utilizzato anche dal bootloader; ad ogni modo questo pulsante è riportato per comodità anche sul Joystick Bitpack™, così come il led che segnala il funzionamento del joystick.
In questo video è mostrato il funzionamento del Joystick Bitpack™ collegato contemporaneamente tramite USB (dati letti dal mio programma Joytester) e tramite adattatore USB/Seriale a 3.3V (dati letti da Hyperterminal) :
Nella seguente tabella è riassunto il collegamento degli IO con gli utilizzatori presenti sul Joystick Bitpack™
I/O | Utilizzatore | Change Notification pin | Uso | Note |
---|---|---|---|---|
RB13 | S1 | CN13 | Pulsante 1 (quadrato) | |
RB2 | S2 | CN6 | Pulsante 2 (X) | |
RB1 | S3 | CN5 | Pulsante 3 (cerchio) | |
RB3 | S4 | CN7 | Pulsante 4 (triangolo) | |
RB9 | S5 | CN21 | Pulsante 9 (select) | |
RB8 | S6 | CN22 | Pulsante 10 (start) | |
RB7 | S7 | CN23 (non usato) | Pulsante 6 (R1) | In parallelo con SW2 su ORbit16, che ha già la resistenza di pullup |
RB0 | S8 | CN4 | Pulsante 5 (L1) | Attivato su pressione dello stick |
MCLR | S9 | Reset | In parallelo con SW1 su ORbit16 | |
RB5 | LED | In parallelo con DL2 su ORbit16 | ||
AN0 (RA0) | Asse X | |||
AN1 (RA1) | Asse Y | |||
RB14 | UART1 RX | |||
RB15 | UART1 TX |
Nei download (ricordo: riservati a coloro che hanno acquistato una ORbit16™), sono presenti il progetto MPLAB completo di sorgenti, lo schema elettrico e la documentazione per realizzare la scheda di espansione in casa mediante fotoincisione.
L’elenco dei componenti necessari per la realizzazione del Joystick Bitpack™ è il seguente:
- un mini-joystick analogico, tipo quello dei controller della PS2, acquistabile su Robot-Italy. Questo tipo di joystick ha anche un pulsante attivato dalla pressione dello stick.
- 4 pulsanti (tactile switch) in formato più grande del normale: 12×12 mm, muniti di cappucci colorati (Robot-Italy)
- 4 pulsanti da PCB in formato classico 6x6mm
- 1 led da 3mm
- 1 resistenza 330Ω ¼W
- 1 resistenza 560Ω ¼W
- due header maschio da 20pin, da montare sulla scheda allo stesso modo descritto qui
- un header da 4 pin (o connettore polarizzato come quello che ho usato io, visibile nelle foto) se volete utilizzare l’uscita UART
Come ottenere un Joystick BitPack™ per ORbit16™
Per questa scheda non ho previsto di farmi realizzare un PCB industriale dal momento che lo scopo di realizzare ORbit16™ nel modo che ho progettato è proprio quello di permettere a tutti di realizzarsi gli accessori in maniera facile. Ad ogni modo se non siete in grado di realizzare la basetta da soli, posso realizzarvela io e spedirla tramite posta ordinaria.
Chi richiede un PCB del Joystick BitPack™ per ORbit16™ contribuisce alle spese di gestione di settorezero.com. E’ richiesta una donazione minima di €10, comprensiva di spese di spedizione con posta ordinaria (viene fornito il solo PCB senza componenti). Il PCB è realizzato con il metodo della fotoincisione su basette Bungard FR4, singola faccia, e forato con punte in Widia su trapano a colonna. La qualità ottenuta è visibile nelle foto sotto. Se non volete inviare denaro sono disponibile anche ad eseguire scambio di materiali: seguite le istruzioni riportate nella pagina servizi.
Per quanto riguarda i componenti necessari per completare il PCB potete trovarli tutti su Robot-Italy.
Link alla pagina ufficiale del progetto
Galleria fotografica