martedì 14 dicembre 2021

Base.intro-arduino-uno.hardware

Introduzione Arduino UNO R3

La scheda in questione monta una MCU (Micro Controller Unit) ATmega328P in PDIP package (3), ed è questa che programmiamo tramite Arduino IDE. Il clock di questa MCU è fornito da un risonatore ceramico evidenziato in viola.

Il chip (7) è una MCU ATmega16U2 (e il suo quarzo (8)) già programmata per svolgere la funzione di convertitore USB to Serial, ed è proprio grazie a questo che possiamo con un clic trasferire il firmware (così si chiama il nostro programma una volta compilato) presente sul disco del PC e memorizzarlo all'interno della memoria FLASH della MCU ATmega328p.

Il pulsante (6) ci permette di riavviare la MCU ATmega328p. Dopo la pressione verrà avviato il firmware del bootloader (presente di default) e questo avvierà il firmware utente (cioè quello che abbiamo sviluppato). Di default il firmware utente è già presente nella memoria FLASH, si tratta di un blink del led L (evidenziato in giallo) per testare il corretto funzionamento della MCU.

Tramite il connettore USB (1) alimentiamo la scheda e il led ON (in verde) si illumina.  La connessione ci serve anche per programmare la FLASH della MCU ATmega328p, inoltre il nostro programma può scambiare informazioni con il PC.

Evidenziato in blu sotto il connettore (1) abbiamo un fusibile auto-ripristinante che riduce la possibilità di guasti al PC a seguito di corto circuito accidentale che può verificarsi durante la sperimentazione (o eccessiva corrente assorbita). 

Questo fusibile è presente solo nel circuito di alimentazione tramite connettore USB (1). Quando l'alimentazione viene fornita dal connettore (2) questo fusibile è escluso dal circuito.

Nota: Sarebbe bene non mettere alla prova questo fusibile evitando cortocircuiti o eccessi di corrente poiché non c'è certezza che possa evitare guasti. Ma durante la sperimentazione pratica, anche prestando la dovuta attenzione, tra breadboard, cavetti e componenti elettronici tutto può accadere.

Il connettore (2) ci permette di alimentare la scheda in modo indipendente dalla  connessione USB del connettore (1). Detto in altri termini, entrambe le connessione USB (connettore 1) e alimentazione su connettore (2) sono permesse, quindi in queste condizioni un circuito interviene e preleva l'energia dal connettore (2), anziché dal connettore USB. Il circuito che permette ciò, appare qui di seguito semplificato.

La tensione di alimentazione da fornire a questo connettore deve essere nel range 7Vdc ÷ 9Vdc. Una tensione superiore a 9Vdc potrebbe surriscaldare il regolatore di tensione (9). La corrente minima che l'alimentatore deve potere fornire è di circa 500mA, non c'è limite per la corrente massima.

Il connettore (4) viene impiegato dalle shield impilabili e fornisce loro alimentazione e un canale di comunicazione SPI. Il connettore viene anche usato per connettervi un programmatore esterno o un debugger hardware. Questo connettore viene sfruttato in produzione per scrivere il firmware del bootloader nella memoria FLASH. Il connettore (5) svolge la stessa funzione ma relativa alla MCU ATmega16U2.

Evidenziati in celeste vi sono due led TX e RX che indicano attività (cioè transito di dati) su questi due canali di trasmissione seriale. Tx lampeggia quando ad esempio inviamo dei dati al PC. Rx lampeggia quando è il PC ad inviare dati, ad esempio quando con IDE arduino facciamo click su Upload.

Si termina la descrizione con i connettori (10) e (11) i quali richiedono un approfondita trattazione non presente qui. Il pinout di questi connettori è reperibile in rete, cercando ad esempio "arduino uno pinout".

Questa è una brevissima introduzione alla scheda e pertanto è necessario approfondire certi aspetti come ad esempio:

  1. Tensione di alimentazione su connettore (2). Se non colleghiamo alcun circuito o un solo led alla scheda possiamo anche superare la tensione di 9Vdc consigliata, ad esempio 12Vdc. Diversamente se colleghiamo un  circuito, questo potrebbe assorbire corrente che attraversa il regolatore (9) scaldandolo oltre le specifiche. Con 12Vdc e con un assorbimento di circa 250mA il regolatore deve dissipare in calore la potenza così calcolata: (12 - 5) x 0.25 = 1.75Watt (sono tanti, troppi), con 9Vdc avremo invece (9 - 5) x 0.25 = 1Watt (sono tanti ma va già meglio), con 7Vdc: (7 - 5) x 0.25 = 0.5Watt (ottimo). 
  2. Il programma scritto con Arduino IDE prima di potere essere trasferito nella memoria FLASH deve subire una trasformazione profonda, di ciò si occupa L'IDE richiamando opportuni strumenti software (compilatore, linker, toolchain ecc) che provvedono a trasformare il sorgente comprensibile a noi esseri umani, in un linguaggio binario comprensibile alla CPU contenuta all'interno del ATmega328p. Questo processo complesso di trasformazione avviene in modo trasparente nei confronti dell'utente e ciò può indurre l'utente principiante a pensare che il suo programma in versione sorgente sia presente nella memoria FLASH della MCU, mentre invece nella FLASH c'è del codice binario a noi umani non comprensibile e non esiste nessuno strumento software che esegua il processo inverso, tipo un de-compilatore che trasformi il codice binario in codice sorgente.
  3. Sketch, tradotto in Italiano Schizzo, in questo modo chiamano il programma scritto con Arduino IDE. Prendiamo atto quindi che Sketch e Programma sono sinonimi e indicano un listato (o più di uno) che descrivono un algoritmo attraverso l'uso di parole chiave specifiche per ogni linguaggio. In sostanza il nostro programma sorgente scritto con Arduino IDE destinato ad essere eseguito dalla CPU di una MCU prende il nome generico Sketch.
  4. Firmware è il termine più appropriato ad indicare la traduzione binaria del nostro Sketch. La traduzione da codice sorgente a codice binario ha come risultato la generazione di un file con estensione .hex (formato Intel Hex)

Termina qui l'introduzione dalla quale si possono ricavare parecchie informazioni senza tuttavia scendere nei dettagli. Coloro i quali fossero interessati ad approfondire, consiglio un link a wikipedia dove viene descritta  l'architettura AVR.


Licenza Creative Commons
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale

Nessun commento:

Posta un commento