20 anni di evoluzione PIC

La famiglia di microcontrollori PIC16F877 fu progettata nel 1997 ed era uno dei primissimi prodotti Flash Mcu di Microchip. È stata inserita in un’infinità di progetti, articoli, libri e post su blog in svariate lingue e in tutto il mondo. Venti anni più tardi, i PIC16F877 sono ancora in produzione e la pagina dedicata a questo prodotto sul sito dell’azienda è una delle più visitate. Questo a dispetto della disponibilità di diverse e più recenti generazioni di microcontrollori (con caratteristiche simili) che sono state introdotte con regolarità: PIC16F877A, PIC16F887, PIC16F1938 e infine il modello PIC16F18877. Questa è una chiara testimonianza dell’apprezzamento che i progettisti di embedded control hanno verso il programma Microchip “obsolescenza guidata dal cliente”. Quel programma è il dichiarato impegno a non terminare la vita di un qualsiasi prodotto che vende. Finchè verranno piazzati ordini per un dispositivo, persino in quantitativi minimali, Microchip continuerà a fornire quel dispositivo ai clienti. Questo è una grande rassicurazione per quanti hanno un prodotto che funziona e preferiscono investire tempo e risorse nello sviluppo di qualcosa di nuovo con il potenziale di generare entrate supplementari. Se un prodotto consolidato non può beneficiare gli ultimi avanzamenti nella tecnologia innovativa come Core Independent Peripherals, un team di progettazione guadagna la libertà di gestire il ciclo di innovazione, anziché essere costretti a rilavorare lo stesso prodotto in un ciclo infinito perché loro parte originale non è più disponibile.

Retrocompatibilità Pin-to-Pin

Se non eravate ancora al corrente dell’impegno Microchip verso la retrocompatibilità, state per ricevere una piacevole sorpresa. Man mano che le nuove generazioni di Mcu PIC hanno continuato a essere realizzate nel corso degli anni, Microchip ha garantito con il suo team di progettazione che vi fosse retrocompatibilità pin-to-pin e persino del codice verso le precedenti generazioni di dispositivi PIC. L’entità degli sforzi richiesti per garantire una tale strategia di migrazione a lungo termine forse non è evidente, ma il fatto che oltre 250 diversi modelli esistenti di Mcu PIC (in un unico package a 40 pin) utilizzino tutti il medesimo Dip socket- definito già nel 1989 dovrebbe fa riflettere. Questo è il nostro impegno.

Comparazione delle caratteristiche

A questo punto sarete tentati di fare una comparazione diretta tra i datasheet dei due estremi di questa continuità temporale: il PIC16F877 e la sua più recente (re)incarnazione, il PIC16F18877. Per inciso, con 660 pagine il ‘18877 preliminary datasheet è quasi il triplo delle dimensioni del ‘877 datasheet, ed è destinata ad aumentare nelle dimensioni aggiungendo i dati completi di caratterizzazione. Tuttavia, nessuno ha più il tempo di leggere i datasheet. La maggior parte si limita a dare una rapida occhiata alla tabella riassuntiva, solitamente inserita alla fine della prima pagina del datasheet. Osservando però le principali caratteristiche proposte nel datasheet (Fig. 1) si può notare che, l’aumento generale nella dimensione di tutti i tipi di memoria e del numero di periferiche presenti è evidente. La memoria Flash è quadruplicata, riempiendo in modo efficace l’intero spazio indirizzabile di 64 KB di una tipica architettura di 8 bit. La dimensione della memoria Ram è cresciuta di quasi 10 volte. Sebbene questo non sia in accordo con la legge di Moore, lasciate che vi ricordi che stiamo parlando di sistemi embedded, per i quali la robustezza e i consumi di energia sono vincoli più stretti di quanto non lo siano per i tipici settori consumer o dei computer desktop. C’è anche una apparente esplosione nel numero di timer (e Pwm). La temporizzazione è una questione importante nell’embedded control, dove le prestazioni real time sono apprezzate più che l’abilità di processare grandi quatità di dati o delle prestazioni di calcolo. Infatti, subito dopo un esame più approfondito del datasheet, si evince che i nuovi dispositivi integrano un complesso sistema interno di clock composto da ben sette oscillatori e due circuiti Pll in grado di fornire precisi segnali di clock senza l’utilizzo di componenti esterni mentre i dispositivi originali non ne avevano affatto. I dispositivi più recenti possono anche eseguire il codice più velocemente, quasi raddoppiando la velocità, anche se come vedremo i dati di Mips possono essere ingannevoli.

Supporto al linguaggio C

L’uso notevolmente aumentato del linguaggio di programmazione C nello sviluppo di applicazioni embedded può certamente essere attribuito per alcuni alla crescita nella domanda di memoria. Per adattarsi alle variazioni dei requisiti attraverso l’ultima decade, l’architettura PIC è cambiata sotto il cofano. Con la serie PIC16F1, sono state aggiunte nuove istruzioni al core PIC al solo scopo di aumentare la densità di codice. Soddisfano la necessità di un migliore supporto per puntatori e grandi quantità di Ram. In particolare, lo schema dei banchi Ram, per il quale PIC è noto, cosi adatto per la compatta codifica Assembly, è stato abbinato ad un indirizzamento di memoria lineare più compiler friendly. Si noti che il vecchio meccanismo dei banchi è ancora disponibile e continua a garantire la compatibilità per applicazioni Assembly preesistenti. Inoltre, il nuovo schema di indirizzamento lineare sta unificando lo spazio di memoria dati e quello di programma del PIC16F1. Ciò consente grandi tabelle dati nella memoria Flash, dimensione illimitata di array Ram, e puntatori generici. È interessante notare come questi grandi cambiamenti architetturali siano passati inosservati alla maggior parte degli sviluppatori PIC in linguaggio C, dopo tutto questo è esattamente il tipo di dettaglio che i compilatori avrebbero dovuto astrarre. Questa è una delle ragioni per cui i valori Mips del vecchio Mcu ‘877 non possono essere confrontati direttamente con i valori Mips dei più recenti core F1.

Modifiche di interrupt

L’altro elemento architetturale che ha visto significativi miglioramenti è il sistema di gestione interrupt. Mentre i più recenti core PIC16F1 mantengono lo schema di interrups single-vector originale, un nuovo set di quattro registri ombra è stato aggiunto per ottimizzare il contesto interrupt delle sequenze save and restore. La sequenza standard interrupt prologue and epilogue è utilizzata per ben 56 cicli di clock. Con i nuovi meccanismi di registro ombra del PIC16F1 la necessità di due sequenze è completamente eliminata ed il costo di un interrupt si riduce ai quattro cicli base richiesti il Cpu branch. Il risultato è un rilevante aumento della reattività del microcontroller o delle sue prestazioni real-time di ben un ordine di grandezza.

Flessibilità

Un altro interessante dettaglio è che il numero di I/O general purpose disponibili per i due dispositivi è differente nonostante la dichiarata compatibilità pin to pin. Si evidenzia infatti che i nuovi dispositivi multiplexano 3 pin in più, precedentemente riservati per un oscillatore al quarzo ed un reset esterno, ora disponibili come I/O general purpose opzionali. Ma solo un ulteriore e più approfondito studio del datasheet rivelerà la vera pepita d’oro: tutti gli input/output di periferiche digitali sono ora multiplexati su ognuno dei pin del dispositivo. Questa caratteristica è nota, cripticamente, come Peripheral Pin Select e fornisce un salto di qualità in termini di flessibilità per i dispositivi PIC16F18877 e diverse famiglie simili alla PIC16F1. Analogamente, i nuovi moduli Adc dei dispositivi PIC16F1 sono ora abbinati a un (molto) grande multiplexer analogico di ingresso che rende fino a 35 degli stessi pin disponibili come dei possibili input analogici. Questo, semplicemente, significa che ogni segnale analogico o digitale diretto al/dal microcontroller può essere ora instradato in modo ottimale sul Pcb al fine di controllare il rumore, aumentare la robustezza, semplificare (e velocizzare) i layout e possibilmente ridurre il numero di livelli e tracce, e fondamentalmente aiutando a ridurre i costi.

Le Core Independent Peripherals

Sfortunatamente, la sola analisi della Fig. 1 non rivelerà mai l’arcano del cambiamento di caratteristiche che si può trovare sulla più recente generazione di dispositivi PIC16F1. È la presenza delle Cip (Core independent peripherals). Più che le caratteristiche individuali delle periferiche, riguardo alle quali avremmo poduto scrivere interi libri e a cui i nuovi datasheet dedicano la maggior parte delle 400 pagine addizionali , ciò che in realtà conta è la filosofia progettuale che sta dietro ognuno di loro. Le nuove periferiche sono diverse perchè sono state progettate per essere direttamente interconnesse l’una all’altra ed eseguire funzioni autonome, independentemente dal core. Le Cip hanno lo scopo di fornire un aiuto hardware al microcontroller per evitare alla Cpu i colli di bottiglia di sistema. Quando le Core independent peripherals sono connesse tra loro per eseguire funzioni, gli interrupt non sono solo eseguiti più velocemente, ma piuttosto sono completamente rimossi dall’applicazione. Il risultato è uno schema più equilibrato, dove l’efficienza di hardware configurabile e parallelismo vengono combinati grazie alla flessibilità del software. Inoltre, ci sono altre Core independent peripherals disponibili sugli altri microcontrollori PIC che consentono ai progettisti di selezionare la soluzione che meglio soddisfa le loro esigenze.

Robustezza e bassi consumi

Una porzione rilevante dei nuovi moduli hardware che si trovano a bordo del PIC16F18877 è dedicata all’aumento della robustezza del microcontroller. Il tradizionale circuito watchdog è stato sostituito da un sistema windowed con una ricca scelta di opzioni scalabili. Il circuito brown-out reset ha diverse soglie, modalità low-power, e un circuito Crc Scan dedicato che può essere utilizzato per monitorare costantemente, in background, l’integrità del contenuto della memoria, senza impattare sulle performance della Cpu. Pur mantenendo la possibilità di essere alimentato a 5V e di pilotare una corrente continua persino più elevata sui suoi I/O (fino a 50 mA), le caratteristiche elettriche del dispositivo PIC16F18877 ci parlano di valori molto inferiori di consumo di corrente Active (di circa un fattore quattro) nel funzionamento su tutta la gamma di tensioni (1,8 - 5,5 V). I valori di consumo di corrente passiva (stand-by) sono persino più impressionanti, e promettono una riduzione di quasi due ordini di grandezza (100x). Ancora una volta, solo una analisi veramente dettagliata del datasheet del dispositivo rivelerà interi nuovi capitoli sulle caratteristiche che estendono la possibilità di controllare la potenza con qualcosa più piccolo di un chicco di riso, e che offre molte modalità intermedie (tra cui idle e doze). Anche un nuovo set di registri  aggiunge abilità di controllo sui consumi di energia per ognuna delle singole periferiche per il raggiungimento del massimo livello di flessibilità. Ma tutte le funzionalità appena viste potrebbero risultare assolutamente irrilevanti nel moderno mondo progettuale, dove i costi della progettazione sono dominati dal time-to-market, dove i cicli di progettazione sono continui e ogni applicazione è connessa. La funzione più importante dei nuovi dispositivi PIC16F18877 potrebbe benissimo essere la disponibilità di strumenti di rapida progettazione per automitizzare e velocizzare di un ordine di grandezza la generazione del codice, rispetto a ciò che era prima possibile. La più recente generazione di microcontroller PIC sono supportati da Mplab Code Configurator (o Mcc). Si tratta di uno strumento che può velocizzare il tedioso processo di inizializzazione di ognuna delle periferiche del dispositivo effettuandolo in minuti, invece che ore, ed alcune claim possono eliminare del tutto la necessità di leggere il datasheet (o almeno una buona parte di quel tempo necessario). Inoltre, un completo toolchain basato su Cloud, Mplab Xpress, è diponibile per effettuare le fasi di valutazione e prototipizzazione di un progetto cosi facile e veloce come aprire il browser e caricare una singola pagina web. Eliminati i tempi per scaricare un integrated development environment e un compiler, aggiungendo anche centinaia di megabyte. Eliminati i tempi necessari per installarli e mantenerli adeguatamente configurati e aggiornati. Chiunque può valutare un nuovo modello di microcontroller aprendo, personalizzando e costruendo un progetto (campione) in pochi minuti invece di ore.

Pubblica i tuoi commenti