Lug 102013
 

In questo articolo vediamo come sia possibile e facile costruirsi Arduino in casa, e perchè dovremmo farlo. L’utilizzo di Arduino per la costruzione di prototipi è davvero molto utile e comodo, ma quando volete passare ad un progetto definitivo può diventare troppo ingombrante o troppo costoso. Un  sistema semplice per ridurre l’occupazione di spazio è l’utilizzo di un’Arduino Pro Mini, ma per certi tipi di progetti il costo rimane troppo elevato. Ci sono alternative interessanti già pronte in rete, come questa o questa, alcune di esse di tipo hobbistico, altre acquistabili già pronte. L’intenzione di questo articolo non è certo creare un nuovo progetto visto che in rete ne troviamo già quanti ne vogliamo, ma comprendere qual’è il reale funzionamento di Arduino per poterne usare solamente i componenti più basilari per inserirli nei nostri progetti. Per farlo dobbiamo analizzare Arduino in maniera più approfondita di quanto fatto sinora.

ATMega328P e Arduino

Dopo tanti articoli spesi su Arduino, potremmo riproporci la primissima domanda fattaci nel primo articolo: Cos’è Arduino? Potremmo definire Arduino come una scheda che permette di interfacciare il suo cervello, l’ATMega, con il mondo esterno, permettendoci un facile accesso agli ingressi e alle uscite, fornendo un sistema di alimentazione stabilizzata, permettendo la programmazione e l’interfacciamento con la porta USB. All’hardware si aggiunge il software che svolge per noi tutta una serie di operazioni che ai più sono del tutto ignote e che sono ignorabili per i prototipi hobbystici ma che possono diventare importanti in progetti di più alto livello. Giusto per citare un esempio molto semplice, non tutti sanno che l’ATMega che equipaggia Arduino è programmato per funzionare a 16MHz, ma nella realtà è possibile farlo operare a 1 o 8Mhz nei casi non ci sia necessaria particolare potenza e si voglia ridurre il consumo energetico del progetto, come è possibile portarlo a 20MHz, innalzando il valore base a cui siamo abituati. I chip ATMega che equipaggiano le varie versioni di Arduino, sono preprogrammate con un cosi detto bootloader. Questo altro non è che un software che viene avviato non appena alimentiamo il nostro Arduino. Esso permette non solo di lanciare lo scketch precedentemente inviatogli, ma anche di ricevere nuovi sketch via porta seriale. In assenza di bootloader ciò non sarebbe possibile e per la programmazione sarebbe necessario un programmatore AVR. In questo primo articolo di approfondimento su Arduino non ci addentreremo in dettagli troppo tecnici, ci limitiamo perciò ad utilizzare il chip ATMega328 pre-programmato con il bootloader, che potete trovare sia nelle varie schede Arduino, sia acquistarlo nei vari store online. Come per tutti i chip sinora studiati, è indispensabile capire il pinout del chip stesso. Qui a lato trovate lo schema classico, a prima vista sembra molto complesso, ma se accostiamo la numerazione dei pin con le classiche uscite / ingressi di Arduino, vedrete che in realtà quel che sembra complesso è in realtà molto più semplice di quanto potreste aspettarvi.

  • 1: RESET: Questo pin serve a resettare l’ATMega.
  • 2-6: Uscite (o ingressi) digitali dalla 0 alla 4
  • 7: Vcc, +5V
  • 8: GND
  • 9 e 10: XTAL: Pin necessari alla connessione con il quarzo a 16MHz.
  • 11 – 19: Uscite (o ingressi) digitali dal 5 al 13.
  • 20: Avcc: Analogic reference, tensione di riferimento esterna per gli ingressi analogici
  • 21: Aref: Vcc +5V
  • 22: GND
  • 23-28: Ingressi Analogici

Se togliamo tutti gli ingressi ed uscite gran parte dei pin sono già mappati. Poi abbiamo i pin 22 e 8 posti a massa e 7,20 e 21 che possiamo connettere direttamente ai +5V. Come vedete restano solamente il pin di reset e quelli da collegare al quarzo oscillatore, per cui a pensarci bene il pinout dell’ATMega è quasi una banalità. Pensateci bene. Possiamo tranquillamente connettere le uscite / ingressi digitali ed analogici a delle strip uguali a quelle di Arduino o a dei morsetti o quel che più vi aggrada, poi connettiamo le masse e i 5V ed abbiamo quasi pronto un Arduino minimalista. Ora dobbiamo solamente collegare il quarzo ai pin 9 e 10 e, su ognuno dei due pin, un condensatore ceramico da 22pF connesso a massa. Aggiungiamo una resistenza da 10K fra il pin di reset e la linea a 5V ed il nostro Arduino “fatto in casa” è pronto. Lo schema qui a lato chiarisce quanto descritto, in più c’è il pulsante di reset, la presenza di un led con relativa resistenza sulla linea di alimentazione e un condensatore da 100nF fra +5Ve massa  (condensatore di disaccoppiamento, ne riparleremo in futuro), tutti componenti non indispensabili. Si noti che rispetto al “vero” Arduino, si presume l’uso di una linea di alimentazione a 5V per cui non è presente alcun regolatore di tensione. Se riassumiamo il tutto, noteremo che abbiamo usato un quarzo da 16Mhz, una resistenza da 10k e due condensatori ceramici da 22pF oltre, ovviamente, all’ATMega328.

Programmare l’Arduino standalone

Una piccola riflessione. Normalmente con Arduino inviamo la sketch direttamente attraverso il cavo USB, ma in questo nostro piccolo Arduino non c’è alcun connettore o chip che permetta la comunicazione USB. Come facciamo ad inviare la sketch dentro l’ATMega328? Ci sono diverse tecniche per ottenere questo risultato, comunque, visto che il nostro chip è dotato di bootloader, sfruttiamo questo vantaggio per semplificarci la vita. Diamo inoltre per scontato che ci sia il quarzo esterno a 16Mhz e i due condensatori da 22pF.

Convertitore USB-Seriale (FTDI)

Il bootloader di Arduino, come molte altre schede elettroniche usa l’FTDI (di fatto un convertitore USB->Seriale) per effettuare questa comunicazione (FTDI è l’acronimo di una ditta scozzese che produce chip). Purtroppo però ci servirà una scheda di conversione USB-FTDI che è bene acquistare in quanto di estrema utilità per chi si dedica a questo tipo di progetti. Se cercate online troverete una miriade di piccoli convertitori USB-FTDI, io per esempio ho il 990 che potete vedere nella figura a lato. Quel che balza all’occhio è che sui vari lati dell’adattatore c sono numerosi pin disposti in maniera diversa sui vari lati, infatti non vi è uno standard ben definito sulla loro disposizione e dovrete di volta in volta valutare come utilizzare gli adattatori in vostro possesso. Ciò che ci interessa sapere è che da questi adattatori preleviamo Vcc e GND per alimentare la nostra scheda, poi ci servono RX e TX per la comunicazione seriale ed infine un pin da collegare al reset, infatti per caricare la sketch, l’ATMega deve essere resettato e questo pin permette di automatizzare tutta la procedura senza dover usare il reset manualmente, cosa che diventa un esercizio di acrobazia visto che deve essere premuto al “momento giusto”, non troppo presto, ne troppo tardi. Una cosa importante da notare è che l’RX dell’adattatore lo dovete collegare al TX di Arduino e viceversa non fate, come me a mio tempo, il collegamento RX con RX e TX con TX, perderete solo tempo inutilmente. Una volta collegata l’alimentazione, RX e TX, vi resta il RTS (o DTR a seconda dei modelli) che appunto deve essere connesso al pin 1 dell’ATMega con interposizione di un condensatore ceramico da 100nF. Fatto ciò potete programmare il vostro Arduino esattamente come facevate precedentemente con Arduino UNO, senza particolari accortezze. Nel caso di circuiti maggiormente complessi in cui alle linee RX-TX di Arduino abbiamo collegati altri chip, come ad esempio un convertitore seriale, è indicata l’interposizione di una resistenza da 1K fra il TX dell’FTDI e l’RX dell’ATMega. Nello schema qui sotto vi propongo un pezzo di uno schema in cui ho collegato un connettore a 6 poli, ho lasciato apposta uno spazio vuoto per poter creare una “polarità” del connettore ed impedire inversioni dello stesso. Si notino la resistenza sulla linea di trasmissione FTDI ed il condensatore  sulla linea di reset. Ovviamente finchè il circuito è su breadboard non ci sono problemi, ma il circuito definitivo dovrà prevedere la presenza di un connettore FTDI o quantomento avere dei punti facilmente accessibili per connettersi ai vari pin. In alternativa è possibile montare l’ATMega su uno zoccolo, esattamente come su Arduino, in modo da poter estrarre il chip e programmarlo separatamente. Tutto dipende dal livello del progetto, con un connettore onboard è infatti possibile andare sulle centraline con un semplice portatile e fare l’aggiornamento del software solo connettendo l’adattatore FTDI da una parte alla centralina e dall’altra al cavo USB.

FTDI

Nella breadboard qui sotto ho eliminato sia il led con relativa resistenza che il pulsante di reset per semplificare il disegno e renderlo più chiaro e comprensibile. Naturalmente se usate questo tipo di collegamento solo per programmare il chip, senza che vi siano altri collegamenti, potete eliminare sia la resistenza R4 che il condensatore di disaccopiamento (fra Vcc e massa), semplificando ulteriormente il collegamento.arduinobreadftdi

Per farvi capire quanto sia semplice vi propongo qui sotto anche un esempio di pcb, peraltro vi ricordo nuovamente che facendo un circuito del genere in cui lo scopo è solo quello di programmare l’ATMega, potete togliere l’R4 ed il condensatore di disaccopiamento rendendo lo schema ancora più semplice e compatto.

pcb-ftdi

Usare una scheda Arduino

Una seconda possibilità è rappresentata dall’utilizzo di una scheda Arduino aggiuntiva. L’ATMega di questa scheda non deve essere saldato ma deve esssere connesso tramite l’interposizione FTDI-ARDUINOdi uno zoccolo in quanto deve essere rimosso. Questo perchè se non rimuoviamo l’ATMega dell’Arduino “programmatore” sarà questo ad essere programmato anzichè quello esterno da noi preparato. Quindi la prima fase è rappresentata dall’asportazione dell’ATMega dall’Arduino che vogliamo usare come programmatore. Se pensate di estrarre chip dal loro zoccolo numerose volte, vi consiglio di acquistare un apposito estrattore, una specie di pinzetta che si aggancia ai due estremi e permette di togliere l’IC senza piegare i piedini. Altrimenti potete usare un piccolo cacciavite per fare leva, in questo caso però fate con molta delicatezza, alzandolo un po’ per lato, senza sforzare in quanto è molto facile piegare i piedini del chip e, a lungo andare, si romperanno. Una volta eseguita questa operazione è sufficiente fare i medesimi collegamenti visti prima, colleghiamo RX,TX e Reset dell’Arduino programmatore (quello senza ATMega), al nostro nuovo Arduino su breadboard, attenzione però che il TX dell’inviante finisce nel TX del ricevente e viceversa (ATTENZIONE, nel disegno qui a lato sono invertiti). Non scordate la resistenza (R3 nello schema di prima) che collega la Vcc 5+ al pin di reset. Ora non dovete far altro che compilare la vostra sketch ed inviarla ad Arduino. Il chip su breadboard verrà programmato e potete poi lasciarlo in loco o spostarlo su un eventuale circuito definitivo. Anche se dalle spiegazioni non dovrebbero servire nuovi schemi, vi lascio con un’immagine in cui ho sostituito il connettore FTDI degli schemi precedenti con il collegamento diretto a Arduino. Ricordo che l’IC dell’Arduino DEVE essere rimosso, inoltre vi ricordo che se state creando un piccolo circuido “ad hoc” solamente per la programmazione dell’ATMega, potete eliminare il condensatore di decoupling (quello in alto a destra), inoltre, se pensate di usare sempre Arduino e mai un convertitore FTDI, potete togliere anche il condensatore sulla linea di reset. Anche se già detto, vorrei ricordare che queste tecniche funzionano solo ed esclusivamente se l’ATMega è dotato del bootloader Arduino. In caso contrario non riuscirete ad inviare nessuna sketch sul vostro IC. In puntate future vedremo come caricare il bootloader se non è presente e come utilizzzare l’ATMega a 8 o 1MHz per le applicazioni ad alto risparmio energetico oltre alla programmazione via ICSP e l’uso del programmatore. Spero di essere riuscito a mantenere il giusto equilibrio fra semplicità e chiarezza dell’argomento, se ci sono dubbi come sempre lasciate pure i vostri commenti. Vi ricordo a tal proposito che occorre essere registrati ed il primo commento deve essere autorizzato; tutte misure che ho dovuto adottare per bloccare lo spam.

  2 Responses to “Costruirsi Arduino in casa”

  1.  

    Ciao Stefano, complimenti per gli articoli ed il tuo lavoro, sicuramente utile a chi, come me, è alla scoperta di Arduino. Volevo chiederti, se possibile e se è possibile farlo, una dritta su come mettere un Atmega standalone, quindi ipotizzo una sua alimentazione 5volt indipendente, e la possibilità di interrogare l’atmega tramite la porta seriale (da PC intendo). Mi spiego meglio.
    Realizzo un pcb dove metto il classico 7805, condensatori elettrolitici, quarzo e condensatori a disco. Poi metto un pò di elettronica a contorno (relè, led, transistor, shift register sui pin di uscita dell’Atmega ecc.). Sulla PCB metto anche i 6 pin della icsp così con un programmatore posso caricare il programma direttamente sul PCB senza staccare l’atmega. Adesso, è possibile tramite un PC ed un convertitore USB-Seriale (predisponendo sul PCB apposita porta) interrogare il monitor seriale e visualizzare tramite l’IDE di Arduino i valori Seriali? Così come faccio con la board UNO durante le “prove” e prima di realizzare il PCB? La mia perplessità è solo sul voltaggio, quello proveniente dal 7805 (on board) e quello del convertitore usb-seriale proveniente dal PC. Sul sito di Arduino, nella lunga pagina con le fotografie delle varie fasi del montaggio di atmega standalone, sembra che le due tensioni possano cozzare insieme, ma chiedo a chi ne sa sicuramente più di me. Grazie anticipatamente. Michele

    •  

      Ciao Michele,
      ti chiedo scusa ma il tuo messaggio mi era sfuggito e lo vedo solo ora. Hai tre possibilità per fare quello che hai pensato:
      1) usi un semplice jumper ed in base al fatto che alimenti tramite ftdi o 7805 lo sposti per decidere da dove arriva la tensione di alimentazione. Semplice, poco costoso ma un po’ poco pratico.
      2) Se non assorbi troppa corrente con relè e simili, potresti lasciare a permanenza un adattatore usb-ftdi che puoi usare sia per la programmazione (collegato al pc) o la normale alimentazione (alimentatore con presa usb). Usare il convertitore ftdi è esattamente come usare il vero arduino via usb (che ha il convertitore onboad) per cui puoi vedere l’output seriale come supponevi.
      3) Copi da Arduino, quello vero che usa il mosfet fdn340p per passare in automatico da una fonte di alimentazione all’altra. Il problema è che è un componente smd per cui non è propriamente semplice da usare per progetti hobbistici. Probabilmente si possono usare altri tipi di mosfet montabili su breadboad / millefori, ma sinceramente la mia conoscenza sui mosfet per ora è vicino allo zero per cui dovrei fare qualche ricerca per risponderti.