ARDF – Radiocaccia

Arduino UNO stand-alone come programmatore ISP

Presentazione

Con Arduino UNO “stand-alone” si intende una disposizione di componenti minimale in un circuito compatibile che possa permettere di scrivere sul microcontrollore ATMEGA328P-PU (il cuore della scheda ufficiale Arduino UNO), il codice nel linguaggio di programmazione Arduino utilizzando l’ambiente di sviluppo Arduino.
Con un adattatore da USB a seriale FTDI, la programmazione e la messa a punto del microcontrollore si consegue con il solo uso del computer e di un software chiamato Arduino IDE. Come vedremo tutto questo è reso possibile perché la linea AVR dei microcontrollori prodotti da Atmel come la serie ATmega sono dispositivi che supportano ISP.
In questa configurazione i programmi sviluppati per Arduino denominati sketch, non potrebbero essere caricati sul microcontrollore se non vi fosse già scritto il bootloader Arduino UNO 16MHz. Il bootloader abilita l’uso del codice Arduino in un progetto integrato personalizzato senza la necessità di utilizzare una scheda ufficiale.
Il compito del microcontrollore è memorizzare ed eseguire le funzioni imposte dallo sketch le quali attivano, in un circuito asservito, le azioni prefissate. Questo sistema offre possibilità importanti che facilitano lo sviluppo di progetti elettronici attinenti alla tematica di questo sito. Per esempio, con un unico microcontrollore, abbinato ad un hardware minimale, si ha la possibilità di realizzare il controllo temporizzato del PTT di un trasmettitore FM (denominato in gergo “volpe”), modularne la portante con il codice morse e stabilire una tempistica di funzionamento sincronizzato con altre “volpi”.
La scelta di voler usare la piattaforma Arduino rispetto ad altri sistemi può essere spiegata per alcune ragioni di metodo. Il sistema hardware e software è open-source e non un sistema “privativo”, il software Arduino IDE è amichevole e corredato da una collezione di esempi progressivi di sketch, da una vasta raccolta di librerie di funzioni e variabili globali, di schemi hardware liberamente fruibili, ed infine, non meno importante, offre la possibilità di arrivare agli scopi prefissati anche se non si è degli esperti creatori di codice.
Senza un microcontrollore dove trasferire le funzioni idealizzate nell’IDE (IDE è l’acronimo di Integrated Development Environment che significa Ambiente di Sviluppo Integrato), queste non si potrebbero realizzare; viceversa il microcontrollore, che identifica nell’IDE il campo d’azione, senza programmazione sarebbe inutile. Il microcontrollore e Arduino sono dunque due componenti complementari, visti nell’insieme come fossero un tutt’uno.
Sul mercato possiamo trovare sia ATMEGA328P-PU vergini che dotati di bootloader. Acquistare microcontrollori vergini è la soluzione preferenziale perché costano circa la metà di quelli che ne sono invece già dotati; l’unico inconveniente è che dobbiamo poi scriverci il bootloader, ma non è un motivo di preoccupazione.
Per la soluzione qui presentata, sarà necessario utilizzare due ATmega328. Il primo, denominato “microcontrollore 1”, dovrà essere acquistato con il bootloader, servirà per caricarci mediante Arduino IDE lo sketch ArduinoISP, pertanto diventerà abilitato come programmatore ISP (si è già detto che gli ATmega supportano ISP e possono comunicare con il programmatore attraverso un protocollo seriale); l’altro invece, denominato “microcontrollore 2”, sarà uno dei numerosi altri ATmega328 vergini su cui dovrà essere scritto il bootloader.
Lo schema elettrico essenziale che permette tutto questo è stato realizzato su breadboard ed è completo in se, nel senso che svolgerà una doppia funzione, sia di programmatore ISP per scrivere il booloader, sia la funzione normale di caricare gli sketch Arduino.

Ecco lo schema:
(come vedasi il sistema di comunicazione previsto utilizza una porta seriale FTDI)

Questo è il relativo circuito su breadboard:

Come si collega la breadboard al computer:

L’adattatore da USB a seriale FTDI va inserito sulla connessione strip FTDI della breadboard e collegato ad una porta USB del computer(1), come nella foto seguente, rispettando sulla connessione strip la sequenza numerica dei 6 pin da sx verso dx: (1)GND, (2)CTS, (3)+5V, (4)TXD, (5)RXD, (6)DTR e la rispettiva marcatura. A tal proposito vedi la compatibilità con Arduino degli adattatori nella sezione “Equipaggiamento hardware utilizzato”.

(1)
Il nome al dispositivo verrà associato automaticamente dal s.o. Linux, in quanto il supporto agli adattatori da USB a Seriale è compreso nel kernel.
Verificare eventualmente con la utility “lsusb” da riga di comando. Per esempio il mio è un adattatore originale Arduino e questo è il suo output:
$ lsusb|grep Arduino
Bus 001 Device 004: ID 2341:003b Arduino SA Serial Adapter (CDC ACM)

NB:

  • Il pin (2)CTS non è collegato.
  • L’adattatore e la breadboard sono entrambi alimentati dai 5V del VBUS della presa USB 2 tipo A del computer, alla quale il relativo connettore dell’adattatore è collegata, pertanto la breadboard non ha bisogno di essere alimentata separatamente.

Adesso, attraverso le immagini dello schermo di Arduino IDE, verrà spiegata in 6 passi la procedura per poter scrivere il bootloader sul secondo microcontrollore.

Passo 1:
Con il computer avviare il programma Arduino IDE e selezionare sulla barra del menu a discesa il device corretto (nella mia configurazione risulta essere “/dev/ttyACM0”):
Strumenti –> Porta –> /dev/ttyACM0


Passo 2:
Scelto correttamente il dispositivo, aprire lo sketch “ArduinoISP”. Per ottenere questo selezionare sulla barra del menu a discesa:
File –> Esempi –> ArduinoISP


Passo 3:
Sulla nuova finestra di Arduino IDE, dove è stato aperto lo sketch ArduinoISP, selezionare il tipo di scheda sulla barra del menu a discesa:
Strumenti –> Scheda –> Arduino UNO


Passo 4:
Scelto il tipo di scheda, compilare e caricare lo sketch ArduinoISP sul microcontrollore 1 (quello acquistato con il bootloader) in unica azione, selezionando sulla barra del menu a discesa:
Sketch –> Carica


Passo 5:
Completato il caricamento di ArduinoISP sul microcontrollore 1, impostare l’IDE di Arduino come programmatore ISP. Per ottenere questo selezionare sulla barra del menu a discesa:
Strumenti –> Programmatore –> Arduino as ISP


Passo 6:
Infine, dopo aver impostato Arduino come programmatore ISP, non rimane che scrivere il bootloader sul secondo ATmega vergine:
Strumenti –> Scrivi il bootloader


Scelte finali:

Considerando la posizione dei microcontrollori 1 e 2 sulla breadboard, con il passo 6 è stata eseguita la scrittura del bootloader sul “microncontrollore 2” vergine.
Se ora si volesse programmarlo con uno sketch, andrebbe tolto il microcontrollore 1 e inserito qui il microcontrollore 2 su cui è stato appena caricato il bootloader. Se invece si volesse continuare a scrivere il bootloader su altri ATmega328 vergini, ripetere solo il passo 6 dopo aver sostituito il microcontrollore 2 con un altro vergine.
Il circuito su breadboard qui presentato, come si è visto, è idoneo sia come programmatore ISP per scrivere il bootloader, sia per caricare gli sketch Arduino.

Note finali:

  • Per facilitare queste operazioni di sostituzione degli ATMEGA328P-PU senza effettuare errori di riposizionamento nel punto esatto sulla breadboard, si consiglia di utilizzare zoccoli IC da 28 poli. Lasciando ogni volta lo zoccolo sulla breadborad la giusta posizione sarà sempre assicurata.

  • Per l’adattatore da USB a seriale FTDI, vedi la sezione “Equipaggiamento hardware utilizzato”.


Elenco componenti

Attivi:
-n.1 ATMEGA328P-PU (IC1) con precaricato il bootloader dell’Arduino UNO;
-n.1 ATMEGA328P-PU (IC2) vergine;

Passivi:
-n.2 quarzi (Q1 e Q2) standard 16 MHz
-n.2 resistenze (R1 e R2) ¼ W 10k;
-n.1 condensatore poliestere radiale (C1) 100n;
-n.4 condensatori ceramici multistrato (C2, C3, C4, C5) 22p;
-n.1 connettore strip maschio tagliato (FTDI) per 6 pin;
-n.2 zoccoli IC del passo di 2.54 mm, da 7.62 mm 28 poli;
-n.1 breadboard 830 punti;
-vari ponticelli maschio/maschio di diverse lunghezze e colori.

Equipaggiamento hardware utilizzato

Computer:
-Laptop Panasonic CF-19.

Schede esterne:
-n.1 adattatore “Arduino USB 2 Serial Micro”.
Questo adattatore è dotato di un Atmega16U2 programmato come convertitore da USB a seriale, lo stesso chip che si trova sulla scheda ufficiale Arduino Uno. Ha un polifusibile integrato che limita la corrente a 500 mA e protegge il controller host USB del computer dai cortocircuiti.
NB: Purtroppo “Arduino USB 2 Serial Micro” non è più costruito, tuttavia le piedinature sul connettore strip FTDI sono compatibili con gli adattatori USB-Serial Adafruit e Sparkfun che, come l’originale Arduino, offrono il ripristino automatico per le schede Arduino/ATmega328, quindi niente ponticelli con i pin e niente modifiche sullo schema per i pulsanti di ripristino. Si consiglia pertanto di utilizzare questi adattatori come alternativa per un funzionamento sicuro.

Equipaggiamento software utilizzato

Sistema operativo:
-Debian GNU/Linux ramo testing, ma vanno bene anche s.o. di altre distribuzioni Linux correnti.

Programmi:
Arduino IDE.


Buon divertimento.

73 de IKØDWJ