Pmod Shield per chipKIT™ UNO32

In Italia molti hobbysti hanno conosciuto la Digilent grazie alle soluzioni Arduino-compatibili basate su PIC32MX : il chipKIT™UNO32 e il chipKIT™ MAX32. Come dicevo tempo addietro, la parte più interessante di tutto questo lavoro fatto dalla Digilent per me sta sicuramente nel software: non si sono difatti limitati a realizzare una scheda Arduino-compatibile solo a livello Hardware come stanno facendo in tanti (che realizzano schede xyz-duino, compatibili con Arduino solo per il fatto di poter utilizzare gli shields), ma hanno fatto in modo da utilizzare lo stesso linguaggio di programmazione e lo stesso IDE, rendendo facilissimo il passaggio dall’ una all’altra piattaforma (lo stesso programma di Arduino, scritto allo stesso modo, funziona anche sul chipKIT™).

Il sistema di sviluppo della famiglia chipKIT™, MPIDE, può difatti essere utilizzato tranquillamente anche con le schede Arduino, senza dover installare due diversi programmi e senza dover imparare un altro linguaggio di programmazione.

Il bello del chipKIT™, per me, è proprio questo: puoi scegliere di usare esempi e shield già esistenti per il mondo Arduino, con adattamenti minimi o nulli nella maggior parte dei casi, o puoi programmare il PIC32MX sfruttando il connettore ICSP con il pickit, alla vecchia maniera a cui sono abituati gli amanti dei picmicro, programmando con MPLAB C32 e usando MPLAB come IDE. Insomma si ha a disposizione una vasta scelta in termini di modalità di sviluppo e programmazione.

Perchè vi parlo ancora una volta di questo? Di recente la Digilent ha esteso l’utilizzo di MPIDE, e quindi del linguaggio di Arduino, anche alle schede Cerebot (quelle che hanno cK nella sigla). I Cerebot sono dei sistemi di sviluppo basati su PIC32MX, dsPIC o ATMega, destinati per la maggiore all’utilizzo in robotica (i kit robotici della Digilent, in forma completa, contengono anche una scheda Cerebot. Se siete interessati a questi Kit, o a qualsiasi prodotto Digilent in generale, in Italia sono distribuiti da Mirifica).

Una delle caratteristiche che salta subito all’occhio delle schede Cerebot, è l’utilizzo di numerosi header femmina orizzontali a 12 pin (6×2) disposti lungo i bordi della scheda, rivolti verso l’esterno. Questi header permettono di espandere le funzionalità delle schede mediante collegamento con altri sistemi. Con Arduino, chipKIT™ e sistemi simili siamo abituati ad avere i due header di espansione ai bordi, disposti in verticale, che permettono l’innesto di schede di espansione dall’alto, tipo “sandwich”.

Sui Cerebot è stato invece scelto questo altro sistema che permette, tra le altre cose, di avere sempre a vista il settaggio dei numerosi jumpers presenti, ma il vantaggio di tale scelta non è soltanto questo. Il vantaggio, per me, è soprattutto dell’utente che decide di acquistare le schede di espansione compatibili con questo sistema o che decide di crearsele da solo, cerco di farvi capire il perchè.

La Digilent non produce unicamente sistemi di sviluppo a microcontrollore ma anche numerose schede con FPGA e CPLD. Anche queste schede utilizzano gli stessi header di espansione. Le schede di espansione che vanno innestate in tali header (e quindi compatibili sia con i sistemi Cerebot che con le schede FPGA/CPLD) prendono il nome di Pmods.

PMod OLED con accessori

La cosa bella dei Pmods è che, a differenza di uno shield, possono essere utilizzati con qualsiasi scheda di sviluppo, e non soltanto con le schede Digilent. Perchè? Il connettore dei Pmods è un header maschio disposto in orizzontale (come siamo abituati su una qualsiasi Breakout Board generica) e vengono forniti anche con un kit completo di cavetti e adattatori a prezzi molto vantaggiosi. L’adozione di un connettore orizzontale fa in modo che i Pmods possono essere facilmente appoggiati sul banco e collegati alla nostra scheda di sviluppo preferita attraverso i cavetti in dotazione o con cavetti jumper o innestati anche in una breadboard (direttamente o attraverso il cavetto in dotazione). Uno shield, invece, avendo l’header di connessione in verticale, è piuttosto difficile da utilizzare su qualsiasi sistema di sviluppo. Gli shield per Arduino, poi, assolutamente non possono essere utilizzati in una breadboard dato che le 2 file di contatti sulla stessa linea sono separate tra loro con una spaziatura non standard.

Ci sono Pmods per tutti i gusti: accelerometro, giroscopio, joystick, led, pulsanti, lcd, wi-fi, ethernet ecc. E non li produce soltanto la Digilent: ci sono anche molti Pmods di terze parti (Mirifica, ad esempio, ha anche disponibili PMods con display a 7 segmenti, GPS e altri). Molti Pmods hanno anche disponibili esempi di programmazione.

I Pmods utilizzano tutti una piedinatura standard: l’alimentazione è presente sui pin a sinistra (sdoppiata, sia sopra che sotto), mentre i rimanenti pin (8) sono disponibili per le connessioni. Esistono schede di espansione Pmod a 12 pin (che sfruttano tutto il connettore 6×2) e Pmods a 6 pin (che sfruttano una sola fila, lasciando libera l’altra):

pinout connettore Pmod femmina, vista frontale. 6 e 12 = Vcc, 5 e 11 = GND

I Pmods che hanno due file di contatti vanno usati sulle breadboard utilizzando il cavetto “split” e l’header a 6 pin (gender changer) in dotazione. Non possono essere innestati direttamente altrimenti una fila di contatti, sulla breadboard, viene cortocircuitata con l’altra!

cavo split 2x6 to dual 6 pin

PMod shield UNO

Il PMod shield UNO, come fa capire il nome, è uno shield specifico per il chipKIT™ UNO32 che permette di avere gli header di espansione utilizzabili direttamente con i Pmods (oltre agli header di espansione classici). Questo shield è stato difatti progettato per “trasformare” il chipKIT™ UNO32 in una scheda Cerebot MX3ck, mantenendo comunque la compatibilità con gli shields di Arduino.

PMod shield-uno

Sul Pmod shield abbiamo 5 header Pmod, identificati da lettere anzichè numeri: JA, JB, JC, JD, JE. Ognuno di questi header ha un proprio jumper di selezione alimentazione, identificato come JPx (dove x è la lettera che identifica il connettore periferico), che permette di alimentare il Pmod connesso all’header a 5V o a 3.3V.

PMod shield-uno con alcuni Pmods innestati direttamente

Nel bordo in basso a sinistra sono presenti 4 led utilizzabili dall’utente, connessi alle porte 3,5,6 e 9 del chipKIT™ UNO32.

Importante: Le porte da utilizzare per controllare i led on-board sono 3, 5, 6 e 9 se la Board Variant selezionata è “ChipKIT UNO32”, altrimenti diventano 30, 31, 33 e 37 se la Board Variant è “ChipKIT UNO32 with Pmod Shield”.

Da notare che ogni header Pmod ha affianco una serigrafia che identifica i pin del chipKIT™ UNO32 al quale l’header è collegato. Possiamo quindi trovare lo stesso pin collegato sia su un connettore di espansione Pmod che sugli header di espansione classici.

Dovete fare caso a questa cosa della numerazione perchè l’identificazione dei pin è differente a seconda della modalità di utilizzo della scheda, come illustrerò tra poco.

Possiamo difatti utilizzare il Pmod shield come una semplice “prolunga”, che ci permette di utilizzare Pmods di terze parti, fatti in casa o espansioni varie, tenendo conto della numerazione dei pin così come esposta sulla serigrafia, oppure possiamo utilizzare il Pmod shield in quella che io chiamo modalità Cerebot compatibile. In questa modalità possiamo utilizzare le librerie per i Pmods disponibili sul sito Digilent, che però fanno uso di una numerazione differente dei pin. Cosa significa? La questione è piuttosto semplice e si capisce facilmente:

I Cerebot utilizzano una numerazione sequenziale dei pin sugli headers. MPIDE, in pratica, identifica i pin digitali presenti sul connettore JA con i numeri da 0 a 7, quelli del connettore JB con numeri da 8 a 15, JC da 16 a 23, JD da 24 a 31 e JE da 32 a 39. La stessa cosa viene fatta per i pin analogici.

L’una o l’altra modalità viene impostata cambiando il tipo di scheda in MPIDE (menù Tools -> Board). La modalità classica è quella che prevede la selezione della scheda “chipKIT UNO32”, la modalità compatibile con Cerebot prevede la selezione della scheda “chipKIT UNO32 with Pmod shield”, modalità ancora non presente di default e da inserire manualmente (vedremo tra poco come).

Questa cosa è importante da capire bene se volete utilizzare i Pmods da subito senza problemi. Ricapitolando:

  • Selezione board “chipKIT UNO32” : i pin digitali presenti sui connettori Pmods (JA, JB, JC, JD, JE), vengono visti da MPIDE con il numero riportato sulla serigrafia del Pmod shield (esempio: il pin 0 del connettore JA viene identificato da MPIDE come l’IO digitale 26 ecc). Sulla serigrafia per i pin con funzioni speciali viene riportata la funzione speciale piuttosto che il numero di IO, però è ovvio che “li sotto” c’è un pin che funziona sicuramente con IO digitale, qui ho quindi elencato come sono identificati i pin digitali:
Identificazione pin digitali sui connettori Pmods da parte di MPIDE quando è selezionata la board variant chipKIT UNO32
  • Selezione board “chipKIT UNO32 with Pmod shield” : i pin digitali presenti sui connettori Pmods vengono visti da MPIDE con numeri sequenziali a partire da 0, iniziando dal pin 1 del connettore JA:

Identificazione pin digitali sui connettori Pmods da parte di MPIDE quando è selezionata la board variant chipKIT UNO32 with Pmod shield

La disposizione dei pin analogici pure varia sui connettori a seconda della board-variant utilizzata:

Identificazione pin analogici sui connettori Pmods da parte di MPIDE quando è selezionata la board variant chipKIT UNO32 with Pmod Shield
Identificazione pin analogici sui connettori Pmods da parte di MPIDE quando è selezionata la board variant chipKIT UNO32

Si nota subito che sul connettore JD del Pmod shield mancano due ingressi analogici quando la board variant selezionata è  chipKIT UNO32. Questo accade perchè in realtà il PIC32 utilizzato ha più ingressi analogici di quanti realmente ne vengono usati sul chipKIT UNO32. In questa modalità mancano A3 (pin digitale 17, AN10 sul pic32) e A9 (pin digitale 23, AN11 sul pic32), che rimangono sempre disponibili sugli header di espansione standard. Con la board variant chipKIT UNO32 with Pmod Shield, in pratica vengono utilizzati 2 pin analogici del PIC32 che normalmente non sono utilizzati, e vengono mappati sul connettore JD.

Per quanto riguarda la disposizione dei pin relativi alle uscite PWM, invece, questi sono disposti negli stessi punti in entrambe le configurazioni:

Posizionamento moduli OC (usati per il PWM) sugli header, in entrambe le modalità

Per utilizzare la modalità Cerebot compatibile, che ci consente di utilizzare le librerie Digilent, bisogna installare in MPIDE una nuova Board-Variant.

L’unica differenza tra il Cerebot MX3ck e il chipKIT UNO32 con Pmod shield è che i connettori JC e JE sono invertiti sulle due schede (la funzione del connettore JC del Pmod shield è la stessa funzione del connettore JE sul Cerebot MX3ck e viceversa)

Installazione Board Variant “chipKIT UNO32 with Pmod Shield”

Assicuriamoci innanzitutto di avere installata l’ultima release disponibile di MPIDE. Assicurarsi quindi di avere MPIDE chiuso. Dal sito della digilent, nella pagina del chipKit UNO32, o in quella del chipKIT Pmod shield-uno, scaricare il file Pmod_Shield_Variant (documento DSD-0000367). Estrarre il file .zip (Importante: utilizzare la funzione “estrai qui” e no “estrai nella cartella…”), appare una cartella chiamata Uno32_Pmod_Shield. Trovare quindi la cartella in cui avete installato MPIDE (in realtà “scompattato”, dato che MPIDE non si installa ma viene soltanto copiato) , aprire la cartella:

hardware\pic32\variants

e incollare qui dentro la cartella Uno32_Pmod_Shield:

Aprire questa cartella ed assicurarsi che all’interno non ci sia un’altra sottocartella con lo stesso nome ma piuttosto ci siano i due files:

Board_Data.c
Board_Data.h

Salire quindi di 2 cartelle in modo da riportarsi nella cartella hardware\pic32\ e aprire il file boards.txt. Questo file contiene le definizioni per le schede con PIC32 supportate da MPIDE. Ogni set di definizioni è separato dagli altri da una serie di #.

Copiare alla fine del file il testo seguente:

############################################################
uno32_pmod.name=chipKIT Uno32 with Pmod Shield
 
# new items
uno32_pmod.platform=pic32
uno32_pmod.board=_BOARD_UNO_
uno32_pmod.compiler.define=-Danything_you_want::-Danything=1
uno32_pmod.ccflags=ffff
uno32_pmod.ldscript=chipKIT-UNO32-application-32MX320F128L.ld
# end of new items
 
# Use a high -Gnum for devices that have less than 64K of data memory
# For -G1024, objects 1024 bytes or smaller will be accessed by
# gp-relative addressing
uno32_pmod.compiler.c.flags=-O2::-c::-mno-smart-io::-w::-ffunction-sections::-fdata-sections::-G1024::-g::-mdebugger::-Wcast-align
uno32_pmod.compiler.cpp.flags=-O2::-c::-mno-smart-io::-w::-fno-exceptions::-ffunction-sections::-fdata-sections::-G1024::-g::-mdebugger::-Wcast-align
 
uno32_pmod.upload.protocol=stk500v2
uno32_pmod.upload.maximum_size=126976
uno32_pmod.upload.speed=115200
 
uno32_pmod.bootloader.low_fuses=0xff
uno32_pmod.bootloader.high_fuses=0xdd
uno32_pmod.bootloader.extended_fuses=0x00
uno32_pmod.bootloader.path=not-supported
uno32_pmod.bootloader.file=not-supported
uno32_pmod.bootloader.unlock_bits=0x3F
uno32_pmod.bootloader.lock_bits=0x0F
 
uno32_pmod.build.mcu=32MX320F128H
uno32_pmod.build.f_cpu=80000000L
uno32_pmod.build.core=pic32
uno32_pmod.build.variant=Uno32_Pmod_Shield
#uno32_pmod.upload.using=

salvare e chiudere il file. Avviare quindi MPIDE e andare nel menù Tools -> Board. Se tutto è stato eseguito correttamente, compare una nuova selezione dal nome chipKit UNO32 with Pmod shield:

selezionare quindi questa opzione quando andiamo ad utilizzare il chipKIT UNO32 con il Pmod shield. Ora siamo pronti ad usare il Pmod shield e le sue espansioni!

Queste istruzioni che ho riportato qui sono presenti, in inglese, all’interno del file readme.txt incluso nel file zip del board variant

Installazione librerie ed esempi Pmods

Ho detto prima che i Pmods sono spesso corredati anche da librerie ed esempi di utilizzo. Le librerie aggiuntive con gli esempi vanno copiate nella cartella “libraries” presente nella propria cartella degli sketch, NON nella cartella libraries di MPIDE!

La cartella degli sketch è visibile andando nel menù File -> Preferences, campo Sketchbook location. Da esplora risorse andiamo in questa cartella e, se non è già presente, creiamo una cartella “libraries”. All’interno di questa cartella vanno copiate le cartelle con le nuove librerie. Le nuove librerie, per poter essere visualizzate, necessitano che MPIDE sia chiuso e riavviato.

Ne approfitto per ringraziare la Mirifica (ing. De Riccardis) e la Digilent (ing. Alex Wong e ing. Gene Apperson) che hanno fornito a Settorezero.com le schede e il supporto tecnico per la realizzazione di questo dettagliato articolo.

In un prossimo articolo analizzeremo l’utilizzo di 3 Pmods molto interessanti: il Pmod GYRO (giroscopio digitale a 3 assi), il Pmod OLED (display LCD grafico oled) e il Pmod  8LD (semplice scheda con 8 led, utile in mille occasioni).

Links

Se questo articolo ti è piaciuto, condividilo su un social:
Se l'articolo ti è piaciuto o ti è stato utile, potresti dedicare un minuto a leggere questa pagina, dove ho elencato alcune cose che potrebbero farmi contento? Grazie :)