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 :
- v2.0: http://www.ladyada.net/media/usbtinyisp/usbtiny%20v2.0%20firm.zip
- v1.0: http://www.ladyada.net/media/usbtinyisp/usbtinyisp%20v1.0%20firm.zip
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:
- v2.0: schema elettrico
- v1.0: schema elettrico
Realizzato il circuito saremo in possesso del nostro USBtinyISP e potremo programmare moltissimi microcontrollori. Di seguito mostro alcune foto del mio prototipo: