Arduino

USBtinyISP: programmatore Atmel fatto in casa

Costruire un semplice programmatore per microcontrollori ATMEL

USBtinyISP è un prodotto commerciale acquistabile sul sito Adafruit. Si tratta di un programmatore AVR per microcontrollori Atmel. Per realizzarlo si necessità principalmente dei seguenti strumenti/componenti:

  • ArduinoISP (per la guida è stato usato su Arduino UNO rev.3)
  • Microcontrollore ATtiny2313 (datasheet)
  • Software Arduino (per la guida è stata usata sia la versione 1.8.10 su Raspbian)
  • Firmware (download)

Ovviamente poi si va ad aggiungere tutta la componentistica ausiliaria in base a se si desidera realizzare il progetto su breadboard o su pcb.

Il primo passo è collegare la scheda Arduino al computer e mediante l’IDE fare l’upload dello sketch ArduinoISP (si trova nella directory degli esempi). Una volta in possesso del nostro ISP dobbiamo collegare il microcontrollore alla scheda Arduino seguendo il seguente schema di riferimento:

Quindi su breadboard risulterà:

Il pinout completo del microcontrollore ATtiny2313 è il seguente:

La tensione VCC deve essere pari a 5V (si può prelevare direttamente dal pin 5V della scheda Arduino). Inoltre, una volta cambiati i fuse, bisognerà inserire tra i pin 4 e 5 un oscillatore 12MHz seguito da due condensatori da 22pF che collegano il pin 4 e il pin 5 verso massa (vedi schema elettrico sotto riportato).

Dopo aver verificato che i collegamenti siano corretti, si può procedere alla fase del caricamento dell’impostazione dei fuse per permettere il funzionamento del microcontrollore a 12MHz. Personalmente ho usato gli stessi fuse indicati da Adafruit per i loro prodotti commerciali: lfuse:w:0xef:m e hfuse:w:0xdb:m 

Se per qualche motivo dovete modificare i fuse standard fate riferimento ad uno dei due seguenti link per il calcolo:

L’applicazione che ci serve per il trasferimento del firmware è avrdude (presente nelle directory di Arduino). Se ci troviamo su una qualsiasi distribuzione GNU/Linux o su macOS ci basta aprire il terminale e posizionarci nella cartella di Arduino. Da qui spostiamoci nelle sotto directory hardware > tool. Una volta posizionati in tale cartella possiamo collegare l’ArduinoISP al nostro PC e con privilegi di amministratore dobbiamo dare i seguente comando:

./avrdude -C ./avrdude.conf -U lfuse:w:0xef:m -U hfuse:w:0xdb:m -p t2313 -c stk500v1 -P /dev/ttyACM0 -b 19200

L’output dovrà essere simile al seguente (operazione svolta su Ubuntu).

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.06s

avrdude: Device signature = 0x1e910a
avrdude: reading input file "0xef"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xef:
avrdude: load data lfuse data from input file 0xef:
avrdude: input file 0xef contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.02s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: reading input file "0xdb"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xdb:
avrdude: load data hfuse data from input file 0xdb:
avrdude: input file 0xdb contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.02s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

A questo punto il microcontrollore è pronto all’uso, pertanto dobbiamo scaricare il firmware dal sito ladyada.net :

Apriamo il file compresso e andiamo ad estrarre solo il file main.hex situato nella cartella spi. Possiamo ora trasferire il firmware sul nostro microcontrollore ATtiny2313. Ritorniamo quindi sul terminale, controlliamo di essere ancora posizionati nella cartella hardware/tool di arduino con privilegi di amministratore, e utilizziamo il seguente comando:

# ./avrdude -C ./avrdude.conf  -U flash:w:/home/mae89/main.hex:i -p t2313 -c stk500v1 -P /dev/ttyACM0 -b 19200

Dove al posto di /home/mae89/main.hex dovrete inserire la corretta path relativa a dove avere estratto il firmware. Se è andato tutto a buon fine dovreste ottenere un output simile al seguente:

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.07s

avrdude: Device signature = 0x1e910a
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "/home/carlo/main.hex"
avrdude: writing flash (2038 bytes):

Writing | ################################################## | 100% 5.26s

avrdude: 2038 bytes of flash written
avrdude: verifying flash memory against /home/carlo/main.hex:
avrdude: load data flash data from input file /home/carlo/main.hex:
avrdude: input file /home/carlo/main.hex contains 2038 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 3.13s

avrdude: verifying ...
avrdude: 2038 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Giunti a questo punto, poiché abbiamo trasferito correttamente il firmware, possiamo rimuovere ogni collegamento e andare a realizzare (su breadboard, millefori o PCB) lo schema elettrico del programmatore:

Realizzato il circuito saremo in possesso del nostro USBtinyISP e potremo programmare moltissimi microcontrollori. Di seguito mostro alcune foto del mio prototipo:

MST-Admin

Appassionato di elettronica, elettrotecnica generale e programmazione. Fondatore del progetto MST-tutorial, desideroso di condividere con voi l'entusiasmo per l'innovazione tecnologica e la sperimentazione di novità tecniche in questi campi.

Articoli Correlati

Pulsante per tornare all'inizio