Quando si acquista un microcontrollore il più delle volte viene fornito “vergine”, senza alcun programma preinstallato.
I microcontrollori possono essere programmati in modalità ISP (In-System Programming), questa in sostanza è la capacità di alcuni programmable logic device, microcontrollori, e altri sistemi embedded di essere programmati mentre sono installati in un sistema completo, invece di aver bisogno di programmare il chip prima di installarlo nel sistema.
Per eseguire questa operazione dovremmo avere a disposizione un programmatore ISP, il software del produttore del microcontrollore, un compilatore per convertire il nostro programma in linguaggio macchina e un po di esperienza…. ma visto che noi apparteniamo al popolo degli arduini (non possiamo negare che il 95% di noi conosce l’atmega328 grazie ad Arduino), usiamo la soluzione AllInOne che ci offre l’ide di Arduino.
La board di Arduino scrive gli sketch compilati tramite l’Ide sul microcontrollore via seriale, proprio comunicando con i pin 2 (PD0) e 3 (PD1), però per fare questo ha bisogno che vi si installi un firmware che permetta ciò, il Bootloader.
Per caricare il Bootloader sul microcontrollore trasformeremo momentaneamete la scheda Arduino in un programmatore ISP.
Colleghiamo Arduino al Pc, apriamo e carichiamo lo sketch “ArduinoISP” File->Esempi->ArduinoISP->ArduinoISP
Dopdiché diciamo all’ide che si deve comportare come un programmatore ISP, selezioniamo Arduino as ISP.
Strumenti->Programmatore:”Arduino as ISP”->Arduino as ISP
Successivamente indichiamo come board Arduino Uno in modo da caricare il bootloader di Arduino Uno
A questo punto procediamo con i collegamenti.
Si legge nei commenti dello sketch:
Lo standard Serial Peripheral Interface (SPI) è un bus di comunicazione sincrono, full duplex, con architettura master/slave, si basa su dei piccoli registri, generalmente da 8 bit, posizionati uno sul dispositivo Master e uno per ogni dispositivo slave.
SPI presenta una interfaccia hardware composta da 4 pin principali: SCLK che passa il segnale di clock che serve per la sincronizzazione dei canali usati per lo scambio di messaggi, MISO ingresso per il master e uscita per lo slave, MOSI uscita dal master e SS viene utilizzato per selezionare lo slave desiderato.
Ecco i pinout di arduino uno e del microcontrollore standalone
Quindi dobbiamo collegare:
- il pin SLK del master con il rispettivo pin SLK dello slave;
- il pin SS del master con il pin Reset dello slave;
- il pin MOSI del master con il rispettivo pin MOSI dello slave;
- il pin MISO del master con il rispettivo pin MISO dello slave.
IMPORTANTE! in questo formato di chip il PIN 1 è sempre indicato e si trova dal lato dove troviamo l’incavo a forma di mezza luna.
Quindi lo schema dei collegamenti :
Come si può notare nel circuito sono presenti anche un oscillatore al quarzo da 16Mhz, e due condensatori da 22pf
Il chip infatti ha già all’interno un oscillatore che genera tramite un quarzo da 8 MHz il clock che gli serve per processare nel tempo i comandi.
Su Arduino invece si ha un quarzo da 16Mhz, che permette di velocizzare l’esecuzione dei comandi. Il microcontrollore è una sorta di piccolo computer che contiene al suo interno tutto quello che serve, il clock, l’unità aritmetico-logica e il processore, e utilizzando una frequenza di 16Mhz anzichè quella di 8 prevista dal produttore sul chip è come se lo stessimo “overcloccando”. La frequenza massima di clock prevista nel datasheet per l’atmega328p è di 20Mhz.
La realizzazione del circuito sulla Breadboard:
Terminati i collegamenti, ricolleghiamo il nostro Arduino al pc e procediamo con il caricamento del bootloader sull’ATmega328.
Menu Strumenti -> Scrivi bootloader.
A questo punto non ci resta che caricare i nostri sketch sul microcontrollore e metterlo in opera, per sapere come fare leggi l’articolo dedicato.