Lasciando da parte sterili tecnicismi, un microcontrollore puo' essere considerato la naturale evoluzione di un microprocessore. Al contrario di quest'ultimo, che necessita di una vasta circuiteria esterna per poter svolgere le proprie attivita', il microcontrollore è un integrato creato per poter operare anche da solo o con limitata circuiteria esterna. Racchiude in se', infatti, tutto il necessario per poter svolgere il lavoro per cui sono è stato realizzato.
Sul mercato vi sono decine di produttori e centinaia, forse migliaia, microcontrollori diversi che vanno incontro a tutte le necessita'. Al giorno d'oggi, infatti, si trovano microcontrollori virtualmente in ogni apparato elettronico od in macchinari controllati elettronicamente. La ragione per la quale ha avuto un incredibile sviluppo negli anni è che si tratta di componenti creati per risolvere problemi di natura 'logica' di controllo.
Talvolta la scelta del giusto microcontrollore non è cosa facile; ve ne sono sul mercato moltissimi (forse anche troppi) che si differenziano per funzioni svolte, moduli integrati, numero di pins, frequenze di lavoro, packages ecc.ecc.
Alcune case produttrici, per questo motivo, forniscono sui rispettivi siti selettori di microcontrollore che consentono di individuare rapidamente quello che risponde alle necessita' del momento (si vedano in proposito i siti della Microchip o della STM). La situazione dovrebbe essere ovvia: se si deve usare un microcontrollore per una attivita' minima, accendere e spegnere un paio di led ad esempio, anche il piu' semplice micro con 6-8 pin potrà essere utilizzato mentre se quegli stessi led dovranno accendersi in presenza di un particolare valore analogico in ingresso ecco che vi sara' la necessita' di scegliere un microcontrollore dotato di almeno un modulo convertitore analogico-digitale; utilizzare un LCD richiedera' un microcontrollore con un numero di porte I/O sufficienti al pilotaggio del display.
C'e' un punto importante da considerare riguardo proprio la scelta del produttore. Vi sono molti di questi che creano micro molto interessanti da programmare ma in qualche caso l'ambiente di sviluppo ha un suo costo che non si giustifica per una attivita' ludico-hobbistica.
Microcontrollori si possono programmare con i piu' comuni linguaggi di programmazione, opportunamente modificati per poter operare con microcontrollori: assembler, pascal, basic, c, ed altri subsets anche freeware ma un buon sistema di sviluppo ha un suo prezzo, talvolta anche alto. Quelli della Microchip, ad esempio, sono molto utilizzati anche per questo motivo. Sono facilmente reperibili ed i loro ambienti di sviluppo e programmazione, talvolta anche freeware (assembler, jal, c), hanno un prezzo ragionevole (mikroc, mikrobasic, picbasic etc.). Spesso sara' possibile effettuare downloads di versioni 'demo' limitate solo dalla lunghezza del programma realizzabile.
|
|||
![]() |
A titolo di esempio a fianco vi è l'immagine funzionale di un comune microcontrollore: il 12F675. Si tratta di un dispositivo ad 8 pin che è caratterizzato dalla presenza di:
|
I moduli/funzioni svolte da ogni pin possono essere rapidamente sintetizzate nella tabella che segue:
VDD-VSS | Si tratta dei pin di alimentazione. Solitamente la tensione di alimentazione di un picmicro varia tra i 2 ed i 5.5 Volt ma è importante leggere il datasheet di ogni picmicro per averne conferma. |
CLKIN/CLKOUT OSC1/OSC2 |
Pins utilizzati per connettere un quarzo o un oscillatore o un circuito rc (resistenza+condensatore) per fornire la frequenza di lavoro del microcontrollore. E' possibile operare anche attraverso un oscillatore interno che deve essere abilitato in fase di programmazione (INTOSC). Il datasheet confermera' la gamma di frequenze di lavoro , generalmente 4-20mhz o piu' (4 in questo caso) |
GP0....GP5 | Nel caso di piccoli integrati i piedini generici vengono indicati con i nomi GP0 ... GP5. Sono piedini che possono essere impiegati come input o come output in base al registro di direzione: se il bit di TRISIO è settato ad '1' la porta svolgerà la funzione di input, se '0' la porta verra' settata come output. Il registro a 6 bit puo' settare ogni pin come input o output con l'eccezione di GP3 che puo' essere un piedino di solo input. |
INT | Ogni piedino GPI/O puo' essere anche configurato come 'interrupt pin' sulla base del settaggio dell'apposito registro. Ogni qualvolta ilo stato del piedino cambiera' di valore verra' eseguita una funzione od una 'sveglia' da uno stato di riposo. |
CIN+/CIN- | Questi piedini fanno riferimento al modulo comparatore interno al microcontrollore e sono multiplexati con i pin GP0 e GP1. |
ICSPDAT/ICSPCLK | Sono piedini utilizzati per la programmazione 'in-circuit' del picmicro (insieme al piedino MCLR ed a quelli di alimentazione) |
T0CK1/T1CK1 | Si tratta di moduli con funzioni di timer o di clock. Solitamente vengono utilizzati per generare un interrupt allorquando il contatore interno raggiunge il valore '0'. Il timer 0 è basato su 8 bit mentre il timer1 su 16 |
VREF | It is used for an internally generated voltage reference value for the comparators input |
MCLR-VPP | Allo stato '0' resetta il picmicro e riavvia il programma memorizzato. E' usato anche in fase di programmazione del chip come ingresso (VPP) |
Naturalmente i moduli collegati ai pins non possono svolgere tutte le funzioni allo stesso tempo, ogni funzione/modulo andranno settati attraverso lo specifico registro di controllo. Modificando il valore di tali registri verranno abilitati o disabilitati i moduli e quindi sara' possibile decidere cosa far svolgere ad un ben determinato pin.
Abbiamo visto uno dei piu' semplici miccrocontrollori sul mercato ma il mercato offre una ampia gamma di microcontroller molto piu' sofisticati, con molti piedini, dotati di numerosi moduli, molti pin di output/input, comparatori, convertitori analogico/digitali, uart ecc.ecc.
![]() |
Ecco un esempio di un picmicro molto popolare, il 16F628. In questo caso le porte di I/O vengono denominate RA ed RB. Senza considerare il vantaggio di un maggior numero di pins vi sono alcune differenze rispetto al precedente in quanto pur essendo presenti convertitori a/d, int, comparatori ecc. abbiamo anche un pao di pins relativi ad una UART interna per la comunicazione seriale con il mondo esterno o con altri microcontrollori. |
CCP |
Capture, Compare, PWM è un modulo strettamente legato ai timers interni al microcontrollore
|
PGC-PGD | Piedini utilizzati per la programmazione 'in-circuit', senza rimuovere l'integrato dallo stampato per intenderci; situazione molto comoda per evitare stacchi e riattacchi dell'integrato stesso a salvaguardia dei piedini |
Oggigiorno i microcontrollori hanno raggiunto un elevato grado di sviluppo al punto da dividerli in vere e proprie famiglie create per coprire tutte le necessità.
Solo considerando i picmicro della Microchip possiamo trovare, a solo titolo di esempio, centinaia di diversi microcontrollori:
- da 3 a 100 pin;
- architetture da 8, 16, 32 bit;
- frequenze da 4 a 80 mhz;
- da 0.25 a 512K di memoria programma e 0.256 sino a 32K di memoria volatile;
- la presenza di devices di comunicazione I2C, UART, SPI, CAN, USB ed altre.
La loro programmazione? è nostra veramente umile opinione che l'assembler possa riservarsi solo ai devices piu' semplici ed ai programmi piu' limitati, troppo grande la curva di apprendimento del linguaggio. Sul mercato e nel mondo freeware esiste, infatti, tutta una serie di linguaggi che rende la programmazione dei picmicro agevolata e divertente semplificando tutti quegli asspetti relativi ai settaggi dei registri ed alla programmazione che sarebbe molto difficile ottenere con linguaggi a basso livello (matematica a virgola mobile, ad esempio).
In ogni caso, qualunque linguaggio si usi, una lettura del datasheet del microcontrollore utilizzato deve essere considerata un vero e proprio 'must'.