BOOTLOADER SU ATMEGA USANDO ARDUINO

Come Programmare un Microcontrollore ATMEGA utilizzando un Arduino come Programmatore…

 
 
 
 



 

INTRO

Quando realizziamo un progetto è un peccato portarsi dietro tutta la scheda Arduino, prima di tutto per il suo elevato costo e anche per questioni di ingombro e di energia consumata dagli altri componenti sulla scheda.  La soluzione più elegante e migliore sotto svariati aspetti è quella di utilizzare il solo microcontrollore ATMEGA, però molte volte questo è fisicamente saldato sulla board quindi diventa rischioso dissaldarlo.

In questa guida verrà illustrato come programmare un microcontrollore ATMEGA senza dover utilizzare un PICKIT4 (ormai gli ATMEGA vengono realizzati dalla Microchip, stessa casa produttrice dei PIC) o un vecchio programmatore ATMEL.

In particolare si possono programmare i microcontrollori ATMEGA della famiglia ATmega48A/88A/168A/328/P/PA (potete scaricare il datasheet al seguente LINK!!! https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf) . In questa guida verrà mostrato come programmare un ATMEGA328P DIP con un Arduino UNO R3. Il codice ovviamente viene scritto come per i normali Arduino però la programmazione avviene in modo differente come vedremo.

La modalità bootloader è leggermente diversa da una normale programmazione di microcontrollore però; Lo Sketch viene inserito nella memoria Flash, in una apposita sezione, e viene letta dal microcontrollore ad ogni reset o accensione. Viene usata la programmazione ISP ovvero In-circuit Serial Programmer che permette anche di programmare i fuses.

Per usare la programmazione SPI si usano i pin MISO, MOSI ed SCK.

Board MOSI MISO SCK
UNO & 2019 (5V) 11 o ICSP-4 12 o ICSP-1 13 o ICSP-3
MEGA1280 & MEGA2560 (5V) 51 o ICSP-4 50 o ICSP-1 52 o ICSP-3
Leonardo (5V) ICSP-4 ICSP-1 ICSP-3
101 (3.3V) 11 o ICSP-4 12 o ICSP-1 13 o ICSP-3

Per quanto riguarda il microcontrollore ATMEGA dobbiamo cercare i pin MISO, MOSI ed SCK e il pin RESET.

Ovviamente essendo senza board Arduino il microcontrollore ha bisogno di essere alimentato e in particolare si può usare l’alimentazione dalla board Arduino che useremo per la programmazione. Ho scelto di presentare la modalità di programmazione che non necessita di un quarzo per il circuito di oscillazione. Basterà collegare il pin 7 e 20 ai 5V mentre i pin 8 e 22 a GND.

 




 

Abbiamo bisogno di configurare il nostro ARDUINO IDE e in particolare dobbiamo eseguire le seguenti azioni:

  1. Prima di tutto bisogna scaricare un file dal sito Arduino.cc chiamato BREADBOARD-1-6-x configuration al seguente LINK!!!. (https://www.arduino.cc/en/uploads/Tutorial/breadboard-1-6-x.zip) Se leggete questa guida molo dopo la sua pubblicazione potrebbe essere presente sul sito una nuova versione del file.
  2. Trovare dove il vostro Sketch inserisce i file. Seguire il percorso FILE -> IMPOSTAZIONI… e leggere il percorso della cartella degli sketch. Attenzione perché invece di “utenti” potrebbe risultare “users” e invece di “documenti” la cartella può essere chiamata “documents”.
  3. Andare nel percorso della cartella degli sketch e creare una cartella chiamata “Hardware” se non esiste già.
  4. Estrarre il file del punto 1 in questa cartella in modo tale che la cartella “breadboard” sia la prima entrando nella cartella “Hardware”.
  5. Chiudere e riaprire l’ARDUINO IDE.

 
CONNETTERE L’ATMEGA ALL’ARDUINO UNO E PROGRAMMAZIONE

Prima di tutto dobbiamo trasformare il nostro ARDUINO UNO in un programmatore ISP. Questo sarà possibile caricando al suo interno uno Sketch presente tra gli esempi e programmando ARDUINO.

Fatto ciò si va a caricare su ARDUINO UNO lo Sketch di esempio che lo trasformerà in un programmatore ISP.

Come detto in precedenza dobbiamo connettere l’alimentazione, MISO, MOSI, SCK e RESET come indicato in tabella. Quindi si avrà:

Ora dobbiamo collegare ARDUINO UNO all’USB. Una volta collegato e dopo aver configurato l’ARDUINO IDE dobbiamo selezionare la seguente board:

Ci sono ancora alcuni passi da fare:

  1. Aprire la cartella “Hardware” precedentemente creata, -> “breadboard” -> “avr” e infine aprire il file di testo chiamato “boards”.
  2. Trovare la linea che indica la frequenza “atmega328bb.build.f_cpu=8000000L” all’interno del file.
  3. Cambiare la linea con “atmega328bb.build.f_cpu=1000000L” altrimenti i delay non saranno corrispondenti al valore inserito.
  4. Andare sempre in Strumenti -> Programmatore -> Arduino as ISP in questo modo l’IDE sarà informato di come programmare.

Io ho creato un semplice lampeggio LED da caricare sul microcontrollore ATMEGA.

void setup() {
    pinMode(8, OUTPUT);      //Pin 8 dell'arduino uno corrisponde al pin 14 del microcontrollore
}


void loop() {
  digitalWrite(8, HIGH);     //Accendi il LED sul pin 14 del uc
  delay(1000);                       //Aspetta 1 sec
  digitalWrite(8, LOW);      //Spegni il LED sul pin 14 del uc
  delay(1000);                       //Aspetta 1 sec
}

Dobbiamo ricordarci che i pin ARDUINO non corrispondono ai pin del microcontrollore, ovvero il pin 13 di ARDUINO UNO non è il pin 13 del microcontrollore ma è il pin 19 ovvero PB5. Possiamo trovare lo schema di ARDUINO UNO al seguente LINK!!! Alla fine della pagina nei download. (https://www.ne555.it/guida-arduino-scheda-uno/).

Ora l’unica cosa che manca è caricare lo sketch nella porzione di memoria del nostro microcontrollore che contiene il bootloader. Per fare questo, se tutto è configurato come istruzioni basterà cliccare sul normale bottone per caricare gli sketch.

Nella GIF sovrastante potete vedere il circuito realizzato con il LED che lampeggia e ARDUINO ancora connesso al microcontrollore.

 



 

[Voti Totali: 0 Media Voti: 0]
Segui la Nostra Pagina Facebook: Facebook

2 pensieri su “BOOTLOADER SU ATMEGA USANDO ARDUINO

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *