Il Microcontrollore Per realizzare un automatismo l’elettronica ci mette a disposizione diverse possibilità. La prima, la più tradizionale, si basa su componenti transistor, mosfet, integrati con porte logiche oppure integrati operazionali. Il progettista, sfruttando le prerogative di ogni componente, cercherà di collegarli tra loro fino ad ottenere il funzionamento richiesto. Questa si chiama in gergo ELETTRONICA CABLATA. La seconda fa uso di un personal computer dove è più facile creare l’automatismo voluto simulandolo con opportuno software. Una opportuna scheda di interfaccia tra il PC e il “mondo esterno” si occuperà di fare arrivare gli impulsi e di mandare dei segnali in uscita per gestire l’automatismo (accender luci, azionare motori ecc…) La terza, quella di cui ci occuperemo, è quella di fare uso di un microcontrollore . Il “cuore” della scheda Arduino è il microcontrollore. In elettronica digitale il microcontrollore o microcontroller o MCU (MicroController Unit) è un dispositivo elettronico integrato su singolo chip, nato come evoluzione alternativa al Microprocessore ed utilizzato generalmente in sistemi embedded ovvero per applicazioni specifiche di controllo digitale. Spesso il microcontrollore viene chiamato anche PIC che generalmente sta per "Programmable Interface Controller", il suo primo produttore la "General Instrument" usava l'acronimo per "Programmable Intelligent Computer". Microcontrollore PIC Il microcontrollore è progettato per interagire direttamente con il mondo esterno tramite un programma residente nella propria memoria interna e mediante l'uso di pin specializzati o configurabili dal programmatore. Sono disponibili in 3 fasce di capacità elaborativa (ampiezza del bus dati): 8 bit, 16 bit e 32 bit. In figura è visibile lo schema a blocchi tipico di un microcontrollore che ricordo è molto simile ad un personal computer (anche se con prestazioni molto più limitate), ma con la caratteristica di essere tutto su un unico chip. Il cuore del sistema è la CPU (control process unit) con architettura von Neumann (in verde sulla figura). Alla CPU è assegnato il compito di elaborare il programma ed eseguire i calcoli richiesti. I “serbatoi” della CPU sono i registri di memoria che sono di diversi tipi. Esistono poi una serie di circuiti ausiliari che consentono il funzionamento di tutto il sistema tipo generatori di clock, alimentazione ecc… E una serie di circuiti che permettono alla CPU di comunicare con l’esterno per dare o ricevere segnali. Tra questi: le porte (in rosso sulla figura) Figura 1 schema a blocchi del microcontrollore L'ampia gamma di funzioni di comando e controllo disponibili, sia analogiche che digitali, integrate sullo stesso chip, permette l'impiego delle MCU in sostituzione di schede elettroniche cablate tradizionali ben più complesse e costose. Breve storia Il primo computer on-chip ottimizzato per applicazioni di controllo è stato il modello 8048 di Intel, rilasciato nel 1975, con memorie di tipo RAM e ROM sullo stesso chip. Questo componente è stato utilizzato in più di un miliardo di tastiere per PC e numerose altre applicazioni. Nota: memoria RAM = memoria scrivibile più volte (si cancella con comando elettrico) memoria ROM = memoria programmabile una volta sola memoria EPROM = memoria scrivibile più volte ma per cancellarla bisogna esporla sotto apposita lampada a luce ultravioletta Nei primi anni di sviluppo del microcontrollore, la maggior parte dei modelli era commercializzata in due varianti. La più economica era dotata di memoria programmata in fabbrica (ROM) su specifiche del cliente oppure programmabile dall'utente una sola volta (OTP, One Time Programming). La seconda, più costosa, aveva la memoria di programma cancellabile EPROM mediante esposizione a luce ultravioletta del chip tramite la finestrella trasparente sul contenitore. La programmazione del firmware veniva fatta direttamente nel linguaggio macchina. Lo sviluppo della tecnologia CMOS e, successivamente, HCMOS, nella prima metà degli anni Ottanta, ha fornito un impulso decisivo alla diffusione dei microcontrollori, consentendo una notevole riduzione dei consumi e della dissipazione nei chip. Per molti anni Motorola è stata leader mondiale per i microcontrollori. Il suo 68HC11 si rivelò essere una pietra miliare, allorché fu presentato sul mercato nel 1985. Oltre a Ram e Rom, integrava convertitori A/D, porte di I/O, , timers multifunzione, ed altro ancora. Con un ciclo macchina di 333 nSec (3 MHz di clock), è in grado di eseguire mezzo milione di istruzioni al secondo, consumando qualche decina di mA. Il suo progetto si è dimostrato talmente innovativo, da essere ancora prodotto ed utilizzato, dopo più di un quarto di secolo. Nel 1993, Microchip ha introdotto il modello di MCU PIC16C84, caratterizzato da memoria programma in EEPROM, ovvero cancellabile elettricamente, che permetteva sia lo sviluppo veloce del prototipo del prodotto finito, sia la modifica del Firmware a circuito montato (In-System Programming). La semplificazione del contenitore, senza finestrella in quarzo, ha contribuito a ridurre il costo finale del componente. Nello stesso anno, Atmel ha rilasciato il primo MCU che utilizzava una memoria di tipo flash, ancora più semplice e veloce da programmare/modificare, più compatta e con un ciclo di vita (cancellazioni) molto più elevato. Di pari passo venivano sviluppate interfacce, che potevano essere controllate da applicazioni software su PC, che rendevano molto più semplice lo sviluppo di programmi in linguaggio ad alto livello (tipicamente il C), e di conseguenza meno costoso lo sviluppo del firmware. Tutto ciò ha ulteriormente incrementato l'utilizzo del microcontrollore nelle più disparate applicazioni. Differenze tra microprocessore e microcontrollore Come dicevamo prima la differenza sostanziale con il PC è che sul microcontrollore “tutto” è su un unico chip. Nel PC si potrebbe assimilare la CPU contenuta all’interno del microcontrollore a quello che viene chiamato microprocessore del PC. Esistono cioè sul PC diversi componenti, ognuno specializzato su una funzione. Quando nell'aprile del 1972 Intel ha introdotto sul mercato il primo processore a 8 bit - lo 8008 - esso consisteva di una ALU (Arithmetic&Logical Unit, ALU) per svolgere operazioni logiche e matematiche e di una unità di elaborazione elementare (Control Processing Unit, CPU) per controllare il flusso di dati e indirizzi tra la ALU e i circuiti esterni di supporto. Successivamente, l'architettura interna del microprocessore (in seguito spesso chiamato semplicemente CPU) si è evoluta velocemente con lo sviluppo di blocchi interni via via più complessi (maggior numero di bit elaborati e movimentati) e con capacità e velocità di calcolo crescenti in modo esponenziale. Per quanto potente, il microprocessore integra sul chip solo la logica di elaborazione, mentre richiede sempre delle unità esterne - memorie, gestori di segnali e dispositivi periferici per poter scambiare informazioni e interagire con l'esterno. Il microcontrollore è invece un sistema completo, che integra in uno stesso chip il processore, la memoria permanente, la memoria volatile e i canali (pin) di I/O, oltre ad eventuali altri blocchi specializzati. Anche l'esecuzione dei programmi applicativi si appoggia su un'architettura hardware diversa da quella tipicamente usata per i microprocessori. Mentre questi ultimi, soprattutto quando usati per computer e personal computer, eseguono i programmi applicativi appoggiandosi a dispositivi di memoria di massa o a memoria volatile, per i microcontrollori il programma applicativo è tipicamente memorizzato su un dispositivo di memoria ROM (come per esempio una EPROM) ed è quindi in realtà un firmware. In generale, essendo concepiti per applicazioni specifiche e per l'uso in condizioni ambientali particolari che impongono limitazioni sia in termini di consumi che in termini di dissipazione di potenza, i microcontrollori presentano caratteristiche meno spinte rispetto ai microprocessori ma risultano più economici. Tabella 1: confronto microprocessore vs. microcontrollore Caratteristica Velocità massima di clock Potenza minima dissipata in Watt (in elaborazione) Prezzo minimo per singola unità in euro Numero di pezzi venduti annualmente (in milioni) Microcontrollore Microprocessore 200MHz 4GHz 0.001 50 0.5 50 11,000 1,000 Quindi riassumendo: L'architettura del microcontrollore prevede un insieme di moduli fissi, comuni a tutti i modelli, e una serie di possibili estensioni in funzione del costruttore, del prezzo e della fascia applicativa: • Unità di elaborazione: CPU • Memoria di programma: ROM, EPROM, FLASH • Memoria dati: RAM e EEPROM • Oscillatore interno o esterno • Porte di I/O configurabili A questi si aggiungono gli “optional”: • Moduli aggiuntivi o Contatori e timer o Moduli di comunicazione: USART, I2C, SPI, USB, Ethernet, IrDA, CAN,Wi-Fi, Zigbee o Interfacce analogiche o a tecnologia mista: ADC, DAC, PWM, Comparatori analogici o Interfacce di visualizzazione e controllo: LCD, Touchsensor Nel caso della scheda Arduino alcuni optional sono presenti fuori dal microcontrollore; come ad esempio l’interfaccia che ci permette di comunicare con il PC. Questa interfaccia USB funziona grazie ad un integrato inserito appositamente sulla scheda, che permette la comunicazione tra microcontrollore e PC. Applicazioni del microcontrollore L'enorme volume di pezzi prodotti deriva dall'impiego massiccio di questo componente nei dispositivi elettronici di consumo e nei prodotti industriali di massa. Al primo posto in classifica come segmento di mercato troviamo l’auto, che utilizza decine di componenti per singola unità. Segue il segmento della telefonia mobile e delle telecomunicazioni in genere, quindi vengono i prodotti medicali e gli elettrodomestici. Spesso utilizziamo questi dispositivi senza rendercene conto, come per le smartcard delle carte di credito o per le cartoline musicali di auguri. I principali costruttori di microcontrollori sono: • Motorola (USA) • Renesas Technology (Giappone) • FreescaleSemiconductor (USA) • NEC (Giappone) • Fujitsu (Giappone) • Infineon Technologies (Germania) Microchip Technology (USA) • STMicroelectronics (Francia, Italia) • Micron Technology (USA) • Atmel (USA) • NXP Semiconductors (Paesi Bassi) Arduino utilizza prodotti ATMEL • Sistemi di sviluppo Per sistema di sviluppo s’intende l’insieme di strumenti (kit) software e hardware necessari alla generazione del codice macchina che deve essere eseguito dal processore (implementazione del software), al suo collaudo e messa a punto (debug). L’implementazione consiste nella stesura del programma in linguaggio Assembly o di alto livello (tipicamente il C), utilizzando un editor di testo generico o specifico per quel linguaggio. Una volta scritto, il programma deve essere assemblato, cioè tradotto nell’effettivo codice macchina numerico (generalmente esadecimale). La conversione viene fatta da un Assemblatore specifico per processore, o famiglia di processori; il compilatore deve essere specifico per processore, o famiglia di processori. Per Arduino una volta finito di scrivere il programma sull’apposito software, alla pressione del tasto up-load il programma stesso verrà tradotto in codice macchina eseguibile ed inviato alle memorie del microcontrollore. La fase di debug consiste nel far eseguire il software dal processore, in condizioni quanto più simili a quelle reali di funzionamento (emulazione), verificando (in tempo reale) che il suo comportamento ad ogni evento previsto sia conforme alle specifiche di progetto. Nel caso di errori o anomalie, il software viene corretto, un nuovo codice eseguibile generato e trasferito in memoria, per essere nuovamente verificato. Questo processo continua fino a che il programma non sia stato completamente collaudato. Successive fasi di validazione e verifica possono richiedere ulteriori interventi sul software da parte dello sviluppatore.