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:
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 2560 | chipKIT MAX32 | |
---|---|---|
MCU | ATmega 2560 | PIC32MX795F512L |
Frequenza operativa | 16MHz | 80MHz |
Memoria programma | 256Kb | 512Kb |
Memoria RAM | 8Kb | 128Kb |
I/O Digitali | 54 | 83 |
Ingressi Analogici | 16 | 16 |
Uscite PWM | 14 (pin da 0 a 13) | 5 (pins 3,5,6,9 e 10) |
Interrupts esterni | 6 (pins 2,3,18,19,20 e 21) | 5 (pins 2,3,7,20 e 21) |
Periferiche avanzate | nessuna | RTCC 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 UNO32 | chipKIT MAX32 | |
---|---|---|
MCU | PIC32MX320F128H | PIC32MX795F512L |
Frequenza operativa | 80MHz | 80MHz |
Memoria programma | 128Kb | 512Kb |
Memoria RAM | 16Kb | 128Kb |
I/O Digitali | 42 | 83 |
Ingressi Analogici | 12 | 16 |
Uscite PWM | 5 (pins 3,5,6,9 e 10) | 5 (pins 3,5,6,9 e 10) |
Interrupts esterni | 5 (pins 2,7,8,35,38) | 5 (pins 2,3,7,20 e 21) |
UARTs | 2: 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 avanzate | RTCC 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.
Indice dei contenuti
“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.
The analog capable I/O pins are not 5V tolerant.
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
- Download MPIDE
- Schema elettrico chipKIT MAX32™
- Sorgenti Eagle per chipKIT MAX32™
- Settaggio dei Jumpers
- Corrispondenza pin
- Bootloader (già caricato sul pic)
- Manuale chipKIT MAX32™
- Wiki
- Forum
- Thread sul forum riguardo la compatibilità degli Shields
- Pagina Microchip sul PIC32MX95F512L
- Pagina Digilent sul chipKIT MAX32™
Galleria fotografica chipKIT MAX32™