Il microcontrollore – Progetto Smart Home

    0
    170

    Il cuore dell’intero progetto sono i Microcontrollori. Chiamati anche MCU, sono dei dispositivi elettronici che opportunamente programmati sono in grado di svolgere diverse funzioni autonomamente. Essenzialmente gestiscono delle linee di input e di output in relazione al programma in esso implementati. A differenza dei microprocessori più evoluti, negli MCU il programma è contenuto all’interno, in un’apposita area di memoria (non volatile) e viene eseguito ciclicamente; anche la RAM per i dati volatili è all’interno dello stesso dispositivo ed alcuni dispongono di aree dati non volatili e riscrivibili (EEPROM). Lo stadio di IN/OUT è già implementato all’interno ed alcuni dispongono già di interfacce per segnali analogici, per comparatori o per comunicazioni seriali. In effetti ciò che distingue un MCU da un microprocessore è che questo per poter funzionare ha bisogno di componenti aggiuntivi, come memorie o componenti per la ricezione e spedizione di dati, mentre l’altro è progettato per contenere tutto in uno e quindi non necessita di alcun componente aggiuntivo. Le applicazioni dei microcontrollori sono molteplici, essi trovano grosso impiego nella Domotica e sistemi di controllo, proprio come mostrato in questo progetto.

    Il microcontrollore è costituito in genere dai seguenti componenti:

    • Una CPU (Central Processing Unit) a 4, 8, 16, 24 o 32 bit, ovvero l’unità centrale di elaborazione il cui scopo è interpretare le istruzioni di programma.
    • Memoria RAM (Random Access Memory), ovvero memoria ad accesso casuale utilizzata per memorizzare le variabili utilizzate dal programma.
    • Memoria EPROM (Erasable Programmable Read Only Memory ), ovvero una memoria di sola lettura programmabile e cancellabile a sola lettura in cui sono memorizzate le istruzioni del programma da eseguire.
    • Dispositivi di I/O per la lettura e la generazione di segnali particolari, verso i quali il controllore è prodotto già specializzato.
    • Contatori di tempo, o timers.
    • Moduli controllori di interrupt.
    • Altri moduli aggiuntivi, quali convertitori Analogici/Digitali, convertitori Digitali/Analogici, moduli per le comunicazioni seriali su Bus, e così via.

    Poiché includono caratteristiche specifiche di un unico task quale il controllo, gli MCU sono in genere relativamente economici, anche perché essendo componenti integrati in un unico chip, il costo di progetto è ridotto così come il numero dei suoi componenti interni.

    Memorie negli MCU

    Diversi sono i tipi di memorie di cui un MCU è fornito:

    • FLASH: tipo di memoria non volatile. Come la EEPROM, la memoria flash offre la programmazione in-circuit usando un solo transistor per cella raggiungendo alte densità di integrazione equivalenti alla densità di una DRAM se non addirittura superiori, poiché non ha bisogno di capacità aggiuntive nella cella. Tuttavia la Flash permette meno cicli di lettura e scrittura rispetto alla EEPROM ed ha in genere prestazioni simili: per questo motivo tali memorie vengono utilizzate in genere per contenere il codice del programma dell’MCU che in genere non subisce molte letture e scritture.
    • EEPROM (Electrically Erasable Programmable Read Only Memory): tipo di memoria non volatile, di cui gli MCU in genere non ne hanno una grossa quantità; infatti è meno integrabile della flash, ma viene usata per memorizzare in modo non volatile delle variabili, per cui in genere supporta più di cicli di lettura e scrittura rispetto alla stessa, anche se comunque il numero totale è limitato per cui è consigliabile valutare l’ordine di grandezza del numero dei cicli di lettura e scrittura a cui sarà sottoposta nel tempo, anche se le odierne tecnologie ce ne assicurano decine di migliaia.
    • RAM (Random Access Memory ) statica: tra i maggiori vantaggi nell’uso di memoria RAM di tipo statico è che si tratta di memorie molto più veloci di tutti gli altri tipi, tanto da essere preferite soprattutto laddove ci sia la necessità di manipolare una grossa quantità di dati ed avere grosse performance, nonché un numero elevato di scritture e letture; in effetti le RAM statiche non hanno alcun limite sul numero totale di letture e scritture. La limitazione è che sono poco integrabili per cui occupano molto spazio.

    I/O

    Un MCU viene progettato per poter essere impiegato in più campi possibili; di qui la necessità di equipaggiarli con diversi tipi di dispositivi di I/O. Eccone un elenco con relative descrizioni:

    • UART (Universal Asynchronous Receiver Transmitter) è un adattatore di porte seriali per trasmissioni seriali asincrone.
    • USART (Universal Synchronous/Asynchronous Receiver Transmitter) è un adattatore di porte seriali per trasmissioni seriali sincrone ed asincrone selezionabili via software caratterizzate da una velocità superiore rispetto alla UART.
    • I2C bus (Inter-Integrated Circuit bus, introdotto da Philips) è una semplice interfaccia seriale a 2 fili sviluppata per applicazioni ad 8 bit e largamente usata per interfacciare dispositivi esterni agli MCU.
    • CAN (Controller Area Network) è un protocollo di comunicazione seriale sviluppato dalla Bosch e dalla Intel e nato per interconnettere i vari dispositivi nelle autovetture.
    • PWM (Pulse Width Modulator) è un generatore di impulsi a frequenza costante con duty-cycle variabile che spesso viene utilizzato come convertitore digitale/analogico.
    • Pulse Accumulator è un registro particolare che si incrementa all’occorrenza di ogni impulso in ingresso.
    • Input Capture è un misuratore di frequenze esterne, o di intervalli di tempo, ottenuti copiando il valore di un timer interno autonomo in un registro ogni volta che occorre un evento esterno.
    • Linee di ingressi analogici elaborate da opportuni moduli convertitori A/D che hanno caratteristiche diversi nei vari MCU, distinguendosi soprattutto per l’accuratezza della conversione, ossia per il massimo errore di quantizzazione possibile, che è diretta conseguenza del numero di bit usati nella rappresentazione della conversione eseguita.

    Linguaggio di Programmazione

    Un programma è costituito da una sequenza di istruzioni, ognuna delle quali identifica univocamente una funzione che l’MCU deve svolgere. Ogni istruzione è rappresentata da un codice operativo composto da un certo numero di bit, che varia in base allo specifico MCU, e memorizzata in una locazione di memoria dell’area programma. Tali codici operativi sono gli unici che l’MCU è in grado di interpretare, ma essendo privi di significato per l’essere umano si è associata una sigla ad ogni istruzione in modo da ricordarne l’azione svolta. Non solo alle istruzioni, ma anche alla dichiarazione di variabili, costanti ed etichette (label) sono associate delle sigle. L’insieme di tali sigle nonché delle relative regole viene definito “Linguaggio Assemby” dell’MCU. E’ possibile anche utilizzare linguaggi di programmazione di più alto livello, come il “MikroBasic”, ma in questo caso ci sarà bisogno di un opportuno compilatore che dovrà tradurre il sorgente ad alto livello in Assembly. Non essendo l’MCU capace di interpretare linguaggi simbolici come l’ Assembly, c’è bisogna che venga tradotto in linguaggio macchina; di questo se ne occupa l’Assemblatore: in sostanza questo è un compilatore che traduce ogni istruzione in Assembly nelle relative istruzioni in linguaggio macchina. Alla fine se il codice sarà privo di errori verrà generato un file che bisognerà caricare nella memoria dell’MCU con un opportuno programmatore, dopodiché il dispositivo è pronto ad eseguire il programma.