I microcontroller Atmel della serie ATtiny sono estremamente versatili, economici e facili da usare: sono programmabili con un Arduino, la stessa interfaccia IDE ed utilizzano lo stesso linguaggio di programmazione (con alcune limitazioni dovute ad esempio alla minore memoria interna); di seguito una miniguida per la programmazione e l'uso.
Prima di tutto eseguire il download del file arduino-tiny-0100-0018.zip dal repository dello sviluppatore: https://code.google.com/p/arduino-tiny/downloads/list (una copia e' disponibile qui)
Nella cartella degli sketch (la si può individuare dalle preferenze: menù Arduino -> Preferenze) creare una directory di nome "hardware".
Scompattare il file arduino-tiny-0100-0018.zip e copiare la directory "tiny" dentro la directory hardware.
Dentro la directory “tiny” va creato un file “boards.txt” come copia del "Prospective Boards.txt”; questo consentirà la gestione di tutti i dispositivi della famiglia Atmel tiny (ATtiny24, 44, 45, 84, 85) operanti a tutte le frequenze possibili (1, 8, 16, 20 MHz); se si desidera limitare la lista dei dispositivi a quelli strettamente necessari, si possono eliminare dal file boards.txt tutte le parti inutili, facilmente identificabili dalle doppie righe di #. Ad esempio, volendo utilizzare i soli ATtiny84 e 85, ho mantenuto le relative sezioni a 1 e 8 MHz (qui il mio file).
Avviare (o riavviare) l’IDE di Arduino e controllare nella lista dei dispositivi utilizzabili la presenza dei chip ATtiny (menù strumenti -> Tipo di Arduino) senza selezionarlo, per adesso.
Selezionare invece il tipo di Arduino che si sta utilizzando (es. Arduino UNO), selezionare poi lo sketch "Arduino ISP" (File->Examples->Arduino ISP), verificare e caricare lo sketch su Arduino.
Selezionare anche dal menù Strumenti -> Programmatore -> Arduino as ISP
Una volta fatto diventare Arduino un programmatore, è possibile collegare il chip; i collegamenti per l'ATtiny85 sono:
PIN10 di Arduino UNO collegato al PIN1 dell’ATtiny85 (RESET)
PIN11 di Arduino UNO collegato al PIN5 dell’ATtiny85 (MOSI)
PIN12 di Arduino UNO collegato al PIN6 dell’ATtiny85 (MISO)
PIN13 di Arduino UNO collegato al PIN7 dell’ATtiny85 (SCK)
+5Vdc di Arduino UNO collegato al PIN8 dell’ATtiny85 (VCC)
GND di Arduino UNO collegato al PIN4 dell’ATtiny85 (GND)
per l’ATtiny84:
PIN10 di Arduino UNO collegato al PIN4 dell’ATtiny84 (RESET)
PIN11 di ArduinoUNO collegato al PIN7 dell’ATtiny84 (MOSI)
PIN12 di Arduino UNO collegato al PIN8 dell’ATtiny84 (MISO)
PIN13 di Arduino UNO collegato al PIN9 dell’ATtiny84 (SCK)
+5Vdc di Arduino UNO collegato al PIN1 dell’ATtiny84 (VCC)
GND di Arduino UNO collegato al PIN14 dell’ATtiny84 (GND)
Per programmare il chip va adesso selezionato il tipo di ATtiny dal menù Strumenti->Tipo di Arduino, ad es. "ATtiny84@8Mhz"
Infine va scritto il programma rimuovendo il codice del programmatore rimasto sulla finestra o più semplicemente creando un nuovo pannello col bottone "nuovo"; scritto il codice, va caricato sul chip, magari previa verifica, utilizzando il normale tasto "Carica" oppure dal menù File -> Carica con un programmatore
Il test
Ad esempio scriviamo il classico sketch che permette di far lampeggiare un led:
Codice:
void setup()
{
// PIN0 in output: si intende PB0
// il PIN0 corrisponde al pin 5 dell'ATtiny85
// e al pin 2 del ATtiny84
pinMode(0, OUTPUT);
}
void loop()
{
//led on-off ogni mezzo secondo
digitalWrite(0, HIGH);
delay(500);
digitalWrite(0, LOW);
delay(500);
}
Verifichiamo e carichiamo lo sketch: i led TX e RX della board Arduino UNO inizieranno a lampeggiare indicando il trasferimento del firmware sull’ATtiny. Dopo qualche istante sulla finestra dell’IDE dovrebbe apparire la conferma di Done uploading, con i seguenti warning che possiamo trascurare:
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
Una volta programmato, disconnettiamo il chip da Arduino (che ha così svolto la funzione di programmatore).
Collegare un led con resistenza (150 ohm) tra la massa e il pin 5 (PIN0 nel codice corrispondente al PB0, pin n. 5 per l’ATtiny85, pin n. 2 per l‘ATtiny84); alimentare il tutto ed il led lampeggerà.
Il chip esce di fabbrica predisposto per lavorare a 1 MHz.
Se il chip e’ ancora a 1 MHz e si e’ selezionato come "tipo di arduino" un chip (84 o 85) a 8 MHz, il led lampeggerà 8 volte piu’ lentamente.
Per far funzionare il chip a 8 MHz: collegare l'ATtiny ad Arduino impostato come programmatore (caricare quindi lo sketch Arduino ISP se non già caricato), impostare il “tipo di arduino” ATtiny84@8MHz (oppure ATtiny85@8MHz) e caricare il bootloader (Menù strumenti -> scrivi il bootloader).
Ho verificato che un ATtiny settato a 8 MHz, se alimentato poi a 3.3V, necessita di un condensatore sull’alimentazione (ho messo un 47uF e funziona) altrimenti non dà segni di vita.
Rimozione degli warning avrdude:
il Warning è solo una segnalazione relativa ad un bug nel file di configurazione avrdude.conf che è collocato nella cartella del software Arduino IDE (su Mac: /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf)
Per ovviare al problema basta editare il file (conviene prima farne una copia di backup), cercare la stringa corrispondente al chip (ad es. "ATtiny84"), con il cursore scendere di alcune righe fino a:
chip_erase_delay = 4500;
ed aggiungere su una nuova riga:
# aggiunti per eliminare il bug di compilazione.
pagel = 0xB3;
bs2 = 0xB4;
Salvare il file, chiudere e riaprire Arduino IDE.
Il terminale seriale per monitorare l'output
Il codice del chip può contenere delle istruzioni print in output, ad esempio per motivi di debug:
printf_begin();
printf("debug/n");
Utilizzando un Arduino, e' possibile avere disponibile questo output del ATtiny in funzione.
Con il chip programmato ed alimentato, collegare il piedino PB0 (il piedino 2 del ATtiny84 oppure il piedino 5 del ATtiny85) al terminale "TX-> 1" di Arduino tramite una resistenza da 330 ohm e collegare la massa del circuito di alimentazione del chip con quella di Arduino (se non si utilizzano grandi carichi, puo' essere utile alimentare il chip con tutto il suo circuito direttamente con i 5V o i 3.3V di Arduino).
Caricare su Arduino uno sketch vuoto:
void setup() {
}
void loop(void){
}
ed attivare il monitor seriale di Arduino IDE (la lente di ingrandimento in alto a destra) avendo l'accortezza di selezionare la velocità a 9600 b/s. Qui ulteriori info.
Nessun commento:
Posta un commento