Come “Rimpicciolire” i propri progetti: utilizzo dell’ ATTiny85 con l’Arduino come ISP

Per realizzare alcuni progetti semplici può sembrare eccessivo utilizzare un ATmega328( il microcontrollore presente nell’Arduino) se non utilizziamo molti dei suoi pin. Per questo esiste una famiglia di microcontrollori dell’Atmel che va sotto il nome di ATtiny.

Questi microcontrollori hanno un numero minore di pin, consumi minori e, soprattutto, possono essere programmati direttamente utilizzando l’ Arduino come ISP (In System Programming).

In questo piccolo tutorial verrà mostrato come preparare l’IDE (la versione 0022 per la precisione),l’ Arduino e il circuito sulla breadboard per la programmazione dell’ATtiny( del quale modificheremo anche la frequenza di funzionamento),  preparando un semplice programma che esegue il blink su un pin digitale.

Iniziamo!

L’ ATtiny85

Di seguito sono riportate le caratteristiche del microcontrollore ed il suo pinout:

  • 8 Pin(max 6 linee di I/O di cui una di reset utilizzabile comunque come I/O)
  • Memoria Flash: 8 kB 
  • Memoria SRAM: 512 byte
  • Memoria EEPROM: 512 byte
  • 1 timer ad 8 bit ed 1 timer a 16 bit
  • ADC a 10 bit e 4 canali
  • clock: 1/8 Mhz con oscillatore interno, fino a 20 Mhz con quarzo esterno
  • Assenti in HW: Seriale/I2C

Qui c’è il pinout:

Il pinout dell’ATTiny85 è lo stesso dei modelli 45 e 25. La differenza tra questi modelli è solo nel quantitativo delle memorie flash( dove viene salvato il programma), SRAM( dove vengono mantenute in memoria le variabili) e la EEPROM( una sezione di memoria nella quale possiamo scrivere dei nostri dati utili,che non verranno cancellati al reset del micro) e questi quantitativi sono rispettivamente:

  • ATtiny45: 4kb Flash / 256 byte SRAM  / 256 byte EEPROM.
  • ATtiny45: 2kb Flash / 128 byte SRAM  / 128 byte EEPROM.

Primo passo: procurarsi il software necessario

N.B :L’articolo non si basa sull’ultimo IDE(ad oggi l’Arduino 1.0.1) poichè ho riscontrato alcuni problemi con il file ArduinoISP.ino che non mi ha permesso di far comunicare con l’ATtiny85 in modo corretto. Il tutto si risolve utilizzando una versione precedente( la 0022). 

Questo è il software di cui avremo bisogno:

  1. Arduino IDE versione 0022 (scaricabile qui alla voce “previous versions“).
  2. Zip contenente i file per gestire i nostri ATTiny(scaricabile qui) NB: per questa prova è stata utilizzata la versione “arduino-tiny-0100-0014.zip
All’interno dell’archivio troviamo due cartelle(tiny e tools) che dobbiamo copiare all’interno della cartella “hardware” presente all’interno della cartella dell’Arduino.
Avviando l’IDE, se tutto è andato a buon fine, sotto il menù “Tools->Boards” troveremo anche i microcontrollori della famiglia ATtiny.

Secondo passo: preparare l’Arduino e l’ATtiny

Colleghiamo l’Arduino al pc e tra gli esempi selezioniamo lo sketch chiamato “ArduinoISP” e compiliamolo.

Successivamente colleghiamo così l’Arduino e l’ATTiny attraverso una breadboard:

Importante, se possediamo un Arduino UNO l’inserimento di un condensatore di 10uF per fare in modo che l’Arduino non si resetti quando inizia la comunicazione con il Pc.

Se disponiamo invece di un’Arduino Duemilanove dovremo inserire tra l’alimentazione a 5v e il pin di Reset una resistenza da 120Ohm.

Inoltre possiamo collegare a dei led il pin 9(hearthbeat, questo pin lampeggia durante l’esecuzione del programma ArduinoISP), il pin8( che si accende nel caso ci siano errori) e il pin7( che ci comunica se l’Arduino comunica con l’ATtiny85).

Terzo passo: Il programma per l’ ATtiny

Questo è il programma che caricheremo sull’ ATtiny85: un semplice blink:

//simple blink example with ATTiny85
void setup(){
pinMode(2,OUTPUT);
}
void loop(){
delay(500);
digitalWrite(2,HIGH);
delay(500);
digitalWrite(2,LOW);
}

Utilizziamo come pin di output il 2 che corrisponde al pin 7 nel datasheet(PB2).

Quarto passo( facoltativo): cambiare la frequenza di funzionamento dell’ATTiny

L’ATtiny85 di fabbrica ha una frequenza di funzionamento pari a 1Mhz, senza un oscillatore esterno la frequenza si può innalzare fino a 8Mhz. Questo è possibile modificando i fuses cioè appositi registri che si possono modificare solo dall’esterno.

Apriamo il terminale con l’ ATtiny collegato all’Arduino e lanciamo questo comando:

avrdude -P /dev/ttyUSB0 -U lfuse:w:0xe2:m -p t85 -c arduino -b 9600

con il quale abbiamo impostato:

  • -P definisce la porta alla quale è collegato l’Arduino
  • -U serve ad impostare il fuse da modificare, un utile sito nel quale possiamo vedere che fuse dover modificare per ottenere il risultato voluto è questo.
  • -p serve ad impostare il microcontrollore( la sigla sta infatti per ATTiny85).
  • -c definisce il compilatore.
  • -b il baudrate di comunicazione.
Un parametro che è richiesto( per esempio in ambiente non linux se viene richiamato il programma avrdude.exe) è il file di configurazione(di solito chiamato avrdude.conf), che si imposta con il parametro -C.
Ad esempio nell’ArduinoIDE il file avrdude.conf si trova nella directory [ArduinoDir]/hardware/tools/avr/etc.

Quinto passo: carichiamo il programma

All’interno dell’IDE selezioniamo ora:

  • Da “Tools->Board” il microcontrollore con la sua frequenza di funzionamento
  • Da “Tools->Programmer” sezioniamo la voce “Arduino as ISP”
Compiliamo e, durante la compilazione dell’ATTiny si dovrebbe accendere il led sul pin7 che ci assicura che riusciamo a comunicare con il micro da programmare.
Quando è finito(lo possiamo leggere anche dall’IDE) scolleghiamo tutto tranne massa e alimentazione e mettiamo un led tra il pin7 e la massa. Se tutto va bene il led dovrebbe lampeggiare.

Alcuni problemi e risoluzioni

  • Come ho già anticipato con l’ultima versione dell’Arduino non sono stato in grado di far comunicare il mio Arduino Duemilanove con l’ATTiny85, quindi è consigliato utilizzare la versione precedente.
  • Se capita questo tipo di messaggio(0x15) controllare se si è inserito il condensatore o la resistenza( a seconda del modello).
 

Luca Panebianco
Ciao! Mi chiamo Luca e frequento la magistrale in Ingegneria Informatica e dell'Automazione all'Università Politecnica delle Marche. Qui ho apprezzato pian piano la programmazione su microcontrollori oltre che la canonica sul PC. Sono interessato ai vari campi della programmazione su diversi dispositivi.
By Luca Panebianco | settembre 25th, 2012 | LEAVE A COMMENT