chipKIT™ MAX32 – Il rivale di Arduino Mega 2560

Abbiamo già avuto modo di conoscere il Chipkit™ UNO32 qualche puntata fa, ora è giunto il momento di conoscere il fratello maggiore: il chipKIT™ MAX32, sempre ideato e realizzato dalla Digilent.

Il chipKIT™ MAX32 rappresenta l’antagonista di Arduino Mega 2560 (il successore di Arduino Mega). Anche qui, come nel caso del fratello minore, la MCU montata a bordo è un PIC32:

Chipkit MAX32 (sopra) Vs Arduino Mega2560 (sotto)

Sappiamo che Arduino Mega, rispetto all’Arduino UNO (e simili), ha un maggior numero di I/O e periferiche aggiuntive (ad esempio ci sono 4 UART e 14 PWM per dirne un paio). Il chipKIT™ MAX32 non  è da meno e mantiene le stesse promesse del fratello minore: rispetto al “rivale”, oltre ad avere maggiore potenza di calcolo e memoria, ha anche degli I/O addizionali oltre ad alcune periferiche non nativamente presenti su Arduino Mega.

La MCU a bordo del chipKIT™ MAX32 è un PIC32MX95F512L , il che vuol dire che abbiamo a disposizione innanzitutto una MCU a 32Bit che gira ad 80MHz, poi una periferica USB 2.0 OTG, una periferica Ethernet 10/100, 2 moduli CAN, 8 canali DMA … giusto per citare qualcosa che manca all’Arduino Mega, seguono ben 512Kb di memoria programma e 128Kb di Ram (rispettivamente il doppio e 16 volte di più rispetto ai quantitativi disponibili su Arduino Mega).

Gli I/O a disposizione sul chipKIT™ MAX32 sono addirittura 83 contro i 54 di Arduino Mega. Metto qui una tabella comparativa delle caratteristiche:

 Arduino Mega 2560chipKIT MAX32
MCUATmega 2560PIC32MX795F512L
Frequenza operativa16MHz80MHz
Memoria programma256Kb512Kb
Memoria RAM8Kb128Kb
I/O Digitali5483
Ingressi Analogici1616
Uscite PWM14 (pin da 0 a 13)5 (pins 3,5,6,9 e 10)
Interrupts esterni6 (pins 2,3,18,19,20 e 21)5 (pins 2,3,7,20 e 21)
Periferiche avanzatenessunaRTCC Hardware
USB 2.0 OTG
10/100 Ethernet MAC
CAN bus (2 moduli)

Come vedete eventuali problemi di compatibilità su qualche shield potrebbero esistere unicamente su qualche uscita PWM e sugli interrupt esterni, ma attualmente l’unico shield incompatibile risulta essere un particolare driver motori, fate riferimento al thread ufficiale sulla compatibilità degli shields. Al contrario su Arduino Mega non è assolutamente possibile utilizzare il chipKIT Network Shield (che analizzeremo in una prossima puntata) che è stato realizzato appositamente per sfruttare le caratteristiche avanzate disponibili unicamente sul chipKIT™ MAX32.

Le altre caratteristiche (UART, SPI, I2C ecc) sono uguali per entrambe le schede e non le ho riportate. L’unica differenza sta nell’ SPI: sugli Arduini il modulo SPI può essere utilizzato unicamente come master, sui chipKIT invece l’SPI può essere utilizzato anche in modalità Slave settando gli appositi Jumper: questo consente, ad esempio, di far comunicare tra loro due chipKIT (ma anche un chipKIT e un Arduino o un chipKIT e un altro dispositivo SPI master).

Dato che qualcuno me l’ha chiesto dovendo fare una scelta progettuale tra i due chipKIT, metto qui anche una tabella comparativa tra chipKIT UNO32 e chipKIT MAX32:

 chipKIT UNO32chipKIT MAX32
MCUPIC32MX320F128HPIC32MX795F512L
Frequenza operativa80MHz80MHz
Memoria programma128Kb512Kb
Memoria RAM16Kb128Kb
I/O Digitali4283
Ingressi Analogici1216
Uscite PWM5 (pins 3,5,6,9 e 10)5 (pins 3,5,6,9 e 10)
Interrupts esterni5 (pins 2,7,8,35,38)5 (pins 2,3,7,20 e 21)
UARTs2:
UART (RX:pin0, TX:pin1)
UART2 (RX:pin39, TX:pin40)
4:
UART0 (RX:pin0, TX:pin1)
UART1 (RX:pin19, TX:pin18)
UART2 (RX:pin17, TX:pin16)
UART3 (RX:pin15, TX:pin14)
Periferiche avanzateRTCC Hardware (dopo montaggio di X2)RTCC Hardware
USB 2.0 OTG
10/100 Ethernet MAC
CAN bus (2 moduli)

Il posizionamento del pulsante di reset risulta più intelligente sul chipKIT MAX32 che non su Arduino Mega: sul chipKIT MAX32 si trova in alto a sinistra in prossimità del bordo, facilmente accessibile anche con uno shield montato. Di fianco al pulsante di reset ci sono i led LD1 e LD2 che servono a monitorare le linee TX/RX della seriale collegata al convertitore FTDI232. Il led dell’alimentazione si trova invece vicino al jack, mentre il led utente, LD4, si trova di fianco ai jumper JP3/JP4.

“La questione dei 5V”

Ripeto questa cosa ancora una volta perchè noto che in molti non la arrivano a capire anche se non c’è niente di difficile da comprendere: anche se il PIC a bordo della scheda funziona a 3.3V, sono stati presi degli accorgimenti affinchè possano essere utilizzate periferiche a 5V senza alcun problema. Questo vuol dire che potete usare ancora i vostri  display a 5V (tanto per fare un esempio). L’unico problema potrebbe essere rappresentato da alcune periferiche CMOS che non potrebbero essere in grado di riconoscere 3.3V come livello logico alto (ma non c’è rischio di bruciare niente! Sia chiaro!). Anche per gli ingressi analogici sono stati presi provvedimenti. Sul manuale è scritto molto chiaramente (io prego sempre che la gente, prima di aprir bocca, si metta a leggere, ma pare che leggere, per alcuni, sia una cosa davvero difficile):

The digital I/O pins on the PIC32 microcontroller are 5V tolerant.

Quindi: nessun problema sui pin digitali: possono accettare 5V in ingresso in maniera “nativa”. E’ ovvio che se i pin digitali vengono settati come uscita non tireranno fuori 5V ma al massimo 3.3V dato che il PIC funziona a 3.3V, una precisazione inutile, no? Ma continuiamo a leggere:
The analog capable I/O pins are not 5V tolerant.
Questo vuol dire che il PIC, nativamente, non è in grado di accettare 5V sugli ingressi analogici, MA:
To provide 5V tolerance on those pins, the Max32 contains clamp diodes and current limiting resistors to protect them from 5V input voltages

Quindi anche gli ingressi analogici possono accettare 5Vperchè sono state prese delle precauzioni. Ma attenzione: dice che gli ingressi sono protetti dai 5V: il che significa che dovendo leggere una tensione analogica con una certa precisione, si evita di far arrivare i 5V correndo il rischio che i diodi di clamping ci privino della dinamica, quindi in questi casi va usato un partitore o si fa in modo che il sensore lavori a 3.3V se è possibile. Lo ripeto in maccheronico: i 5V sugli ingressi analogici ci possono arrivare, ma è ovvio che dopo i 3V viene “tagliato” tutto a 3V, quindi dopo i 3V leggete sempre 1024 sul convertitore AD e quindi far arrivare 5V non è una scelta intelligente anche se possibile. Ritengo che con questo sia stato abbastanza preciso, quindi spero di non leggere più super-fesserie sui forum. Ma non ci conto più ormai.

In aggiunta si leggono altre affermazioni piuttosto discutibili in cui si afferma che il mondo gira a 5V. Forse era vero qualche anno fa ma oggi non più o quantomeno la tendenza è cambiata per far fronte a miglioramenti: la maggioranza dei nuovi dispositivi vengono progettati per lavorare a tensioni sempre più basse per consentire processi di miniaturizzazione sempre più spinti. Un numero sempre maggiore di periferiche gira a 3.3V e lo step successivo sono gli 1.8V. Sarebbe anche ora di cominciare a pensare al futuro piuttosto che rimanere fossilizzati e sostenere tesi piuttosto bislacche solo per evitare di fare un briciolo di sforzo in più e stare al passo coi tempi.

Programmazione “classica”

Sul chipKIT MAX32 c’è un PICmicro, giusto? Quindi oltre che in modalità compatibile con Arduino, possiamo programmarlo anche in maniera classica utilizzando MPLAB IDE come ambiente di sviluppo e MPLAB C32 C Compiler come compilatore e caricare quindi i programmi con un bootloader o tramite il connettore ICSP. Anche sul MAX32 è stato fatto uso di un connettore ICSP con i pad sfalsati che consente l’innesto saldo di uno strip maschio a 6 pin senza dover necessariamente saldare:

A differenza del fratello minore UNO32, però, il pic montato a bordo del MAX32 non viene riconosciuto dal picKIT2 (viene restituito un errore relativo alla tensione VPP), per cui per poterlo programmare in questo modo è necessario almeno il picKIT3.

Settaggio dei Jumpers

Rispetto al fratello minore, il MAX32 ha dei jumper in meno:

  • JP1 : serve per selezionare la sorgente di alimentazione esterna/interna. In pratica spostando il jumper verso destra (in posizione “REG”) entra in funzione il regolatore a 5V, questa è la selezione da eseguire quando si fornisce alimentazione sul jack J2 o quando non si sa cosa fare. In posizione “BYP”, il regolatore viene bypassato, questa selezione è da eseguire quando si alimenta la scheda con l’USB o con una sorgente a 5V. In entrambi i casi il regolatore a 3V è sempre abilitato.
  • JP3+JP4 :  servono a selezionare la modalità di funzionamento del bus SPI (master/slave).

Per maggiori informazioni fate riferimento al documento che illustra il settaggio dei jumper.

Altro

Per il resto vale tutto ciò che ho già detto nell’articolo precedente : Il chipKIT™ MAX32 si programma utilizzando MPIDE allo stesso modo di come si fa con Arduino, basta che ricordarsi di selezionare la scheda corretta dal menù Tools->Board:

Come vedete per il MAX32 ci sono due selezioni: la selezione chipKIT MAX32 è quella standard, che utilizza il convertitore FTDI232 come su Arduino, l’altra selezione (chipKIT MAX32-USB for Serial) serve ad utilizzare l’USB OTG integrata nel PIC32 come ponte seriale. Non mi è ancora chiaro come funziona questa seconda opzione e ho posto una domanda nel forum per avere delucidazioni in merito.

In Italia i prodotti della Digilent vengono distribuiti da Mirifica, e il mio consiglio è di andare sul loro sito per l’acquisto del chipKIT™ MAX32.

Documentazione e Downloads

Galleria fotografica chipKIT MAX32™

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 :)