Ciao a tutti, ieri sera sono finalmente riuscito a riprendere in mano un vecchio (fallimentare) progetto: Arduino Serial. Mesi fa, facendo degli acquisti su un noto negozio online di ciarpame elettronico, mi aggiudicai una scheda Arduino Serial PCB, ossia la schedina stampata per montare Arduino con la porta seriale.
Il simpatico portale di ecommerce, analizzando la mia scelta della schedina, mi propose automaticamente un chip ATMEGA328, dotato di bootloader Arduino precaricato: vedendo questa simpatica associazione, non mi posi minimamente il problema ed aggiunsi all’ordine il suddetto chip. Dopo pochi giorni il tutto pervenne a casa e cominciai il montaggio dei vari componenti (racimolati dalle scorte o acquistati in vari negozi di Torino), giunto però alla fase di test, mi resi conto che l’IDE Arduino non prevedeva la possibilità di gestire una scheda Arduino Serial con a bordo un ATMEGA328:
Documentandomi (in ritardo) scoprii che impiegare l’ATMEGA328 è possibile, ma è necessario scrivere un’apposita sezione nella configurazione dell’IDE; il punto è che non volevo essere vincolato a troppi tricks, dovendo sempre cambiare file a mano perdendomi le modifiche con l’update dell’IDE, così regalai il 328 ad un amico (che aveva un Arduino Diecimila dotato di ATMEGA168) e mi procurai dalla Polonia un ATMEGA8 vergine.
Il problema a questo punto è stato di trovare un modo per programmare l’ATMEGA8 in modo tale che potesse accettare i segnali giunti attraverso l’interfaccia seriale.
Cercando su internet, mi imbattei in un howto, scritto direttamente dai creatori di Arduino, che spiega dettagliatamente la procedura per la programmazione del chip tramite ICSP. Non essendo io un elettronico, spendere diverse decine di euro per un programmatore di microchip Atmel mi è sembrato inopportuno, quindi, sempre seguendo la succitata guida, ho optato per costruire un programmatore parallelo, come spiegato qui.
Lo schema di funzionamento è piuttosto semplice.
Utilizzando un cavo riciclato da un vecchio computer, si è trattato di fare sei sole saldature a stagno, una bella colata di colla a caldo per proteggere il tutto dai cortocircuiti e una scocca di plastica, per far apparire il tutto un po’ più professionale :-).
Seguendo i passi descritti nei documenti di Arduino, ed utilizzando la comoda funzione di programmazione già pronta nell’IDE, l’intero procedimento è filato liscio. L’ultimo scoglio è stato quello di recuperare un cavo seriale adatto; Arduino Serial ha bisogno di un cavo DB9-DB9 dritto, non vanno quindi bene i cavi comunemente in dotazione ai modem (che in realtà sono cavi incrociati, chiamati null-modem). Scavando in vari scatoloni pieni di rottami sono riuscito a recuperare un cavo adatto e, mediante il tester, ho verificato che i piedini fossero connessi 1-1.
Purtroppo la mia mania di smanettamento mi ha fatto tralasciare un importante particolare: il cavo a mia disposizione è un femmina-femmina. Da una parte va bene perché le porte seriali (quelle che DOS\Windows chiama COM) sono di tipo maschio (quelle con i piedini, per intenderci), ma sull’Arduino saldai un connettore DB9 femmina! 😦 Fortunatamente in un cassetto dell’ufficio ho scovato un gender changer DB9; se vi doveste trovare nella stessa situazione, fate attenzione a non utilizzare un changer null modem, altrimenti la scheda e il computer saranno incapaci di comunicare.
Naturalmente tutti questi pasticci potevano essere evitati facendo un’oculata scelta dei componenti prima di mettersi al saldatore, ma, si sa, smanettone è sinonimo di pasticcione :-D. Comunque, ecco come appare il cavo alla fine.
Per finire un’indicazione importante: Arduino Serial non resetta la connessione via software, questo si traduce nel fatto che se volete uploadare il vostro codice dall’IDE alla schedina (mentre questa è accesa) dovete operare, manualmente, un piccolo trucco:
- Compilate il vostro codice sull’IDE e verificate che tutto sia a posto
- Controllate che Arduino Serial sia connesso, alimentato e che l’IDE selezioni la scheda corretta (Arduino NG or older w/ ATmega8)
- Tenete premuto il tasto reset sulla scheda Arduino
- Avviate la compilazione e l’upload del codice
- Quando l’IDE vi restituirà, nella finestra di output/debug, il messaggio: Binary sketch size: #### bytes (of a #### byte maximum)
rilasciate il tasto reset.
Se eseguirete tale procedura correttamente, la scheda Arduino effettuerà il reboot, il bootloader per qualche secondo ascolterà la porta RS323 in attesa di un nuovo codice, l’IDE spedirà correttamente il binario e tutto funzionerà perfettamente. Nelle nuove versioni di Arduino tutto questo pasticcio non esiste perché quando l’IDE vuole spedire il codice, chiede alla schedina di ripartire e il bootloader dell’ATMEGA si troverà il nuovo firmware in attesa di essere caricato.
Per concludere alcune piccole considerazioni (personali):
- Arduino Serial, soprattutto utilizzando un ATMEGA8, è molto più limitato e macchinoso da utilizzare di una più recente versione USB.
- Non costa molto di meno rispetto ad un Arduino USB bello e fatto, quindi se si vuole risparmiare questa è sicuramente la strada sbagliata.
- Sebbene la piedinatura del Serial sia compatibile con le nuove schede e, di conseguenza, anche con gli shield, il fatto che si vadano ad utilizzare componenti discreti rende lo spazio sopra la board inutilizzabile, meglio mettere eventuali espansioni sotto.
- Essendo la porta seriale non alimentata, Arduino Serial necessita di un’alimentazione esterna per funzionare (questo vale anche per la fase di programmazione).
Detto questo, se vi chiedete perché, avendo a disposizione dei comodi Arduino 2009 o (recentemente) l’Arduino UNO, mi sono lanciato in questa ennesima follia… beh:
- perché si poteva fare 😛
- perché voglio provare questo aggeggio su computer veramente vecchi, privi di porte USB 🙂
Alla prossima folle autocostruzione.
Simone