PIC (microcontrollore)

Da Wikipedia, l'enciclopedia libera.

PIC è una famiglia di circuiti integrati a semiconduttore con funzioni di microcontrollore.

Microchip Technology non usa il termine PIC come un acronimo: il suo nome aziendale è "PICmicro". Anche se generalmente sta per "Programmable Interface Controller", il suo primo produttore (la "General Instrument") usava l'acronimo per "Programmable Intelligent Computer".
Inizialmente sviluppato nel 1975 è in grado di svolgere un set di istruzioni ridotto (RISC): la versione più piccola ha 33 istruzioni assembly.

PIC1655A della General Instrument

Versioni[modifica | modifica sorgente]

Vari PIC finestrati

Nell'arco del tempo ne è stata resa disponibile una ampia varietà di versioni, diverse per tecnologia costruttiva, forma fisica (numero di piedini) e quantità o tipo di memoria, oltre alle funzioni di ingresso e uscita.
Ne esistono versioni con programma su ROM mascherata, quindi non riprogrammabili, versioni CMOS programmabili una sola volta OTP, versioni EPROM con finestra per cancellazione tramite raggi UV e versioni con memoria flash.
Le versioni CMOS hanno all'interno del nome del componente una C (es. PIC16C505), le versioni ROM hanno CR (es. PIC16CR57A) e le versioni flash hanno una F (es. PIC18F452).
La serie C è ormai obsoleta, per cui le versioni più usate sono quelle con memoria di tipo FLASH, che si possono programmare tantissime volte in breve tempo.
Il PIC più conosciuto è il PIC16F84: ormai è stato soppiantato dal più completo PIC16F88, con il quale è quasi completamente compatibile (occorre solo cambiare l'inizializzazione delle periferiche e ricompilare il codice per la corretta mappatura dei registri). Il 16F88 al suo interno ospita numerosissime periferiche come l'USART, 3 temporizzatori, 2 comparatori e un A/D a 7 canali. Ha anche un oscillatore interno e quindi le porte OSC1 e OSC2 possono essere usate come ingressi o uscite (RA6, RA7); la porta di reset/programmazione (MCLR), se non serve può essere utilizzata come ingresso generico (RA5), ma non come uscita. Inoltre si può leggere e scrivere la memoria di programma (e non solo la EEPROM dati) direttamente da codice.
Con la stessa piedinatura del 16F84, oltre al già citato 88 (e 87, uguale all'88 ma senza A/D), ci sono i 627/628/648A, 716 e 818/819. Esistono poi altre versioni simili, ma con maggiori piedini di ingresso e di uscita (ad esempio le versioni 16F876 e 16F877).
La serie PIC16, in via di abbandono da parte di Microchip, verrà presto totalmente sostituita dalla serie PIC18.[senza fonte] Quest'ultima serie garantisce un set di periferiche molto più esteso, consumi minori e soprattutto costi minori. Il diretto equivalente del 16F84 è il 18F1220, che comprende anche una USART, una MSSP, ingressi analogici ed altro. La serie speciale 18FJ, non disponendo di EEPROM a bordo, è la serie più economica prodotta da Microchip. Utilizzando infatti microcontrollori con più memoria di programma rispetto a quanta effettivamente necessaria, è possibile scrivere su quest'ultima riservandosi una zona ad uso simil-EEPROM.
Le versioni viste finora lavorano su dati a 8 bit, ma vi sono anche versioni a 16 e 32 bit come le famiglie dsPIC30F, dsPIC33F, PIC24F e PIC24H a 16 bit e la famiglia PIC32MX a 32 bit.

Istruzioni[modifica | modifica sorgente]

Il set di istruzioni del PIC ne comprende 33 nelle versioni di bassa potenza e fino a 77 in quelli con prestazioni più elevate. Per essere eseguita, ogni istruzione impiega 4 cicli di clock, tranne le istruzioni che comportano un salto all'interno della memoria (GOTO, CALL, RETLW), che impiegano 8 cicli; nelle versioni recenti vi sono altre istruzioni che impiegano 8 cicli, come quelle di trasferimento di dati tra memoria e memoria (MOVFF).

Architettura interna[modifica | modifica sorgente]

L'architettura è di tipo Harvard a bus separati; i bus dati e controllo sono a 8 bit, mentre le istruzioni hanno un formato a 12, 14, 16 o 32 bit.

Nelle ultime versioni è stata implementata un'architettura a 16 bit o 32 bit. Esiste anche il bus dello stack a partire da 9 bit in su.

Memorie[modifica | modifica sorgente]

A causa dell'architettura RISC, dove nell'istruzione oltre al significato è compreso anche l'indirizzo di memorizzazione o di salto, la memoria viene segmentata. Per cambiare segmento in uso occorre agire su appositi registri, fatto che complica la programmazione dei PIC tramite linguaggio assembly, ma non quella con linguaggi di alto livello.

RAM[modifica | modifica sorgente]

La RAM ha una larghezza di 8 bit e una profondità che varia da pochi byte (25 nei PIC16C5x) fino a qualche kilobyte.

Di programma[modifica | modifica sorgente]

La larghezza della parola di programma varia da 12 bit (ad esempio, nel PIC16C54) a 14 bit (ad esempio, nel PIC16F628) a 16 bit (ad esempio, nel PIC18F4520).
La sua profondità varia da 512 byte a 128 kibibyte (KiB).

Stack[modifica | modifica sorgente]

Lo stack è un tipo di memoria, separata da quella principale, caratterizzata da un particolare metodo di accesso (LIFO). È dotato di un suo bus la cui profondità va da 2 posizioni a 8 posizioni e giunge alle 31 nei PIC della serie 18. La sua larghezza parte da 9 bit.

EEPROM[modifica | modifica sorgente]

Nelle versioni con memoria flash può essere presente una memoria interna di tipo EEPROM accessibile come se fosse una periferica per potervi memorizzare dei dati che, se non esplicitamente cancellati, si conservano per almeno 40 anni. La sua capienza varia da 64 a 1024 byte.

Periferiche[modifica | modifica sorgente]

La presenza di periferiche a bordo del chip è uno degli aspetti che fanno la differenza tra un microprocessore ed un microcontrollore. Nei PIC si parte da dei semplici I/O digitali per arrivare a funzioni complesse passando attraverso una notevole varietà di altre funzioni.

I/O paralleli[modifica | modifica sorgente]

La funzione di ingresso e uscita di dati digitali è stata la prima funzione implementata. Nei PIC è divisa in porte da 8 o meno bit ognuna. È possibile programmare ogni bit come ingresso o come uscita singolarmente.
In alcune versioni è possibile avere degli ingressi con conversione analogico digitale (ADC) da 10 o 12 bit. In altre gli ingressi analogici vengono diretti a dei comparatori. In alcuni casi è possibile attivare dei resistori interni (weak pull-up ) per facilitare il collegamento con pulsanti ed interruttori.

I/O seriali[modifica | modifica sorgente]

Può essere presente una grande varietà di porte seriali: I²C, USART, SPI, CAN, USB.

PWM[modifica | modifica sorgente]

Si arriva fino a 5 canali PWM a 10 bit.

Timer[modifica | modifica sorgente]

Su tutte le versioni è implementato almeno un temporizzatore da 8 bit. Si arriva fino a 5 temporizzatori con larghezze a 8 o 16 bit. Su tutte è inoltre implementato un temporizzatore speciale chiamato WDT (Watch Dog Timer), che serve (se utilizzato) a far ripartire il microcontrollore in caso di blocco del programma. Il timer funziona in base alla frequenza di lavoro del PIC e/o può utilizzarne, tramite un apposito piedino, una diversa da quella di lavoro tramite un oscillatore esterno. Ad ogni timer, inoltre, può essere associato un divisore di frequenza integrato chiamato PRESCALER, che divide la frequenza di lavoro di: 2, 4, 8, 16, 32, 64, 128, 256 volte.

Particolarità[modifica | modifica sorgente]

La RAM è trattata totalmente come fosse un registro ed ogni suo membro è chiamato file register o più semplicemente file.
Non esiste un accumulatore vero e proprio ma un registro chiamato W (Working register) e i risultati di tutte le operazioni logico aritmetiche possono essere messi indifferentemente nel file operando o in W.

Compilatori con linguaggi evoluti[modifica | modifica sorgente]

Il linguaggio di programmazione dei PICmicro è l'assembly, ma sono stati implementati alcuni compilatori per semplificarne la programmazione. Sono disponibili infatti molti compilatori di linguaggi con sintassi simili al BASIC oppure compilatori di C o Pascal. Esistono anche linguaggi gratuiti come Jal e SDCC.

L'utilizzo di linguaggi di programmazione ad alto livello come C, Basic e Pascal permette di riutilizzare codice sorgente sviluppato per altre architetture e garantisce una maggiore leggibilità, nonché una gestione più organizzata delle sezioni di programma. La maggior parte dei compilatori, comunque, permette di inserire sezioni di programma scritte direttamente in assembly, per minimizzare i tempi di esecuzione. I compilatori più conosciuti sono quelli di MikroElektronika ed il compilatore PICC di CCS, tra l'altro riconosciuto come compilatore di terze parti direttamente da Microchip. Microchip mette a disposizione i compilatori C per le famiglie più avanzate: C18, C24, C30 (16bit) e PIC32 (32bit), e una libreria di codice open source per una grande varietà di applicazioni.

Voci correlate[modifica | modifica sorgente]

Altri progetti[modifica | modifica sorgente]

Collegamenti esterni[modifica | modifica sorgente]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica