Come trasformare Arduino in un ISP — Programmazione di ATmel ATtiny85

Pubblicato: 2017-06-13

Byte brevi: a volte, l'utilizzo di una scheda Arduino pre-costruita in un progetto è eccessivo o semplicemente sovradimensionato. ATtiny85 è un microcontrollore economico ma sorprendentemente capace che può aiutare a ridurre l'ingombro del tuo progetto. Ecco come puoi programmare un ATtiny da utilizzare nel tuo progetto.

La piattaforma Arduino è uno strumento straordinario per l'apprendimento, ma a volte le schede Arduino supportate non si adattano esattamente dove ne hai bisogno. Con Arduino Uno (il modello più comune) che misura circa 65 mm x 50 mm, è facile vedere come potrebbe essere il componente più grande in alcuni progetti. Ci sono altre schede come la Nano che sono molto più piccole (la mia Nano knockoff è 43 mm per 17 mm, 4,5 volte più piccola) , ma anche in questo caso, a volte è semplicemente troppo grande. E se, ad esempio, volessi costruire un dispositivo indossabile, forse è solo un LED lampeggiante che il tuo cane può indossare di notte. Una volta presa in considerazione una batteria e così via, può diventare abbastanza grande.

Indica la linea ATtiny, l'eroe del nostro problema. L'omonimo di ATtiny è ovvio. Puoi trovarlo in un pacchetto DIP-8 (pacchetto doppio in linea - 8 pin) , che è di circa 9 mm quadrati. Nella vera natura del suo omonimo, l'ATtiny è minuscolo, ma in più modi oltre alle sue dimensioni fisiche. L'ATtiny85, utilizzato per questo articolo, ha solo 8 KB di memoria flash del programma, 512 byte di RAM e 512 byte di EEPROM (memoria permanente al di fuori della memoria del programma) .

Ora il problema è programmare uno di questi ragazzini. Ci sono alcuni tutorial online per questo, ma li ho trovati leggermente incompleti o privi di istruzioni.

ISP – Nel programmatore di sistema

Un In System Programmer (ISP) non è così elegante come sembra. Tipicamente, un ISP per un chip ATmel è costituito da un dispositivo con un cavo USB con connettore a sei pin. I pin dell'ISP sono davvero facili da individuare su Arduino, in genere si trovano di fronte al connettore USB. I chip ATmel sono pensati per essere programmati tramite i pin ISP, ma la piattaforma Arduino ha implementato un adattatore da USB a seriale sulla scheda per eliminare la necessità del dispositivo ISP. Nonostante ciò, hanno lasciato i pin dell'ISP disponibili su molti, se non sulla maggior parte dei modelli.

Poiché i nostri chip ATtiny non hanno il dispositivo da USB a seriale che hanno gli Arduino, è necessario che siano programmati utilizzando un ISP. I dispositivi ATmel ISP sono piuttosto costosi, almeno rispetto al costo di un Arduino stesso, quindi risparmieremo denaro e tempo di spedizione programmando un Arduino in modo che si comporti come un ISP.

Lo facciamo aprendo l'IDE Arduino e selezionando ArduinoISP dagli schizzi di esempio.

All'apertura del file di schizzo, vedrai alcune informazioni sul comportamento previsto del codice. In questo file, dobbiamo apportare una rapida modifica affinché il nostro ISP comunichi correttamente con l'IDE di Arduino.

Alla riga 220 troviamo la funzione setup() .

 configurazione vuota() {
  SERIAL.begin(BAUDRATE);

  pinMode(LED_PMODE, USCITA);
  impulso(LED_PMODE, 2);
  pinMode(LED_ERR, USCITA);
  impulso(LED_ERR, 2);
  pinMode(LED_HB, USCITA);
  impulso (LED_HB, 2);

}

Abbiamo bisogno di cambiare BAUDRATE a 19200 così la riga legge

 SERIAL.begin(19200);

Da quello che ho letto, l'IDE Arduino ha ricevuto un aggiornamento che ha interrotto la compatibilità con questo firmware ArduinoISP. Arduino e IDE stavano tentando di comunicare a velocità di trasmissione diverse e ciò ha comportato il mancato utilizzo di Arduino come ISP, nonostante il firmware lampeggiasse correttamente.

APiccole biblioteche

L'IDE Arduino supporta una varietà di microcontrollori e schede diverse, ma sfortunatamente la serie ATtiny non è inclusa. Ciò significa che dobbiamo prendere noi stessi il supporto per loro.

Il modo in cui ha funzionato per me è stato aggiungere l'URL seguente agli URL di Additional Boards Manager nelle preferenze dell'IDE Arduino,

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

riavvia l'IDE, apri Boards Manager in Strumenti -> Board -> Boards Manager, quindi cerca il pacchetto ATtiny e installalo.

Una volta fatto, puoi iniziare a costruire il tuo circuito per programmare il tuo ATtiny.

Costruisci il tuo ISP

Esistono diversi modi per creare il tuo ISP. Puoi costruirlo in breadboard senza saldatura in modo da poter riutilizzare le parti, oppure puoi creare una soluzione semipermanente saldando tutto insieme come ho fatto io. Se lo stai saldando tutto insieme con cura, puoi riutilizzare Arduino per un altro progetto se lo desideri.

Osservando le prime trenta righe dello schizzo ArduinoISP, possiamo trovare le seguenti informazioni sulla configurazione di Arduino per funzionare come ISP.

Pin 10 Per reimpostare il PIN per
Microcontrollore di destinazione
Pin 11 SPI Master Out
Schiavo dentro
Pin 12 SPI Master In
Schiavo fuori
Pin 13 Orologio seriale SPI

Facoltativamente, è possibile collegare i LED ai seguenti pin per indicare lo stato

  • Pin 9 – Heartbeat – Indica che l'ISP è in esecuzione
  • Pin 8 – Errore – Indica che si è verificato un errore
  • Pin 7 – Programmazione – Indica la comunicazione attiva con il target

Tieni presente che questi LED richiedono resistori.

Qui possiamo vedere la piedinatura per ATtiny85 e le connessioni appropriate che dobbiamo fare per tornare ad Arduino. È un disegno piuttosto grezzo, ma ho etichettato i pin sull'ATtiny85 per comodità. Va notato, tuttavia, che i pin non sono indirizzati a 1,2,3..8 come nel diagramma, sono designati all'interno dell'IDE di Arduino in quanto sono stati etichettati nel testo diagonale.

Questo è un diagramma molto più dettagliato delle diverse connessioni. Tutti i LED sono opzionali, ma sono utili per la risoluzione dei problemi, oltre ai tre LED di stato consigliati nel file di sketch ArduinoISP, ce n'è uno che si collega semplicemente da 5V a terra (con un resistore, ovviamente) e poi ce n'è uno collegato al secondo pin (Pin 3 nell'IDE) per testare ATtiny con il blink test. Notare il condensatore che collega il pin Reset a terra, questo è necessario affinché Arduino funzioni come ISP.

Questo è l'ISP Arduino che ho creato per i microcontrollori ATtiny. Puoi vedere che ho usato la presa DIP-8 per tenere l'ATtiny mentre veniva programmato. Ho anche lasciato abbastanza spazio sulla destra per installare un socket DIP-28 per la programmazione di chip ATmega come l'ATmega328P. L'aggiornamento sarà molto semplice, richiedendo solo che i pin necessari per i chip Atmega siano collegati come abbiamo fatto con ATtiny.

Una volta assemblato il tuo ISP Arduino, vorrai sicuramente provarlo. Assicurati di selezionare le impostazioni appropriate per programmare tramite l'Arduino connesso e non programmare l'Arduino stesso.

Per la scheda, scegliamo l'opzione ATiny 25/45/85, quindi selezioniamo ATtiny85 nella selezione del processore e, infine, selezioniamo Arduino come ISP dai programmatori. Ciò dice all'IDE tutto ciò che deve sapere sul sistema di destinazione, incluso il modo in cui comunicherà con esso. Ora siamo pronti per visualizzare lo schizzo Blink (o digitarlo tu stesso se sei così hardcore) e provarlo, assicurati solo di cambiare il pin utilizzato per far lampeggiare il LED con quello che hai usato nel tuo circuito, questo è il pin 3 se stai usando lo schema che ho fornito. Infine, compiliamo e carichiamo lo schizzo facendo clic su Schizzo -> Carica utilizzando il programmatore.

 configurazione vuota() {
  pinMode(3, USCITA);
}

ciclo vuoto() {
  digitalWrite(3, HIGH);
  ritardo(1000);
  digitalWrite(3, LOW);
  ritardo(1000);
}

In totale, il mio ISP Arduino saldato insieme probabilmente costa circa tre o quattro dollari. I chip ATtiny possono anche essere estremamente economici, di solito solo circa un dollaro a pezzo. Consiglio di acquistare i socket DIP-8 se prevedi di inserire i chip ATtiny nei progetti perché potresti voler aggiornare del codice o riutilizzare il chip. Saldare un IC sul posto è fattibile, ma puoi facilmente danneggiarlo, specialmente con l'esposizione ripetuta, come accadrebbe se aggiornassi il codice alcune volte.

Qualcun altro ha fatto qualcosa del genere? Ti piacerebbe vedere altre cose su Arduino? Fateci sapere nei commenti qui sotto.

Leggi anche: Raspberry Pi o Arduino: quale scheda è la migliore per un principiante?