Cari lettori, siamo giunti ad una nuova puntata della nostra Rubrica Firmware Reload, all'interno della quale sono inclusi gli articoli tecnici della passata rivista cartacea Firmware, con tantissimi temi di interesse per appassionati, professionisti e makers. Nonostante la presenza sempre più massiccia dei microcontrollori a 32 bit ad alte prestazioni, i “classici e sempreverdi” micro ad 8 bit continuano a riscuotere il favore dell’industria elettronica. Questo, accade per diverse ragioni, tra le quali le dimensioni estremamente contenute, ma soprattutto, in periodi di risparmio energetico, per il loro bassissimo assorbimento rispetto ad altri componenti più prestazionali ed ingombranti.
Il mondo dell’elettronica negli ultimi decenni ha visto una grande diffusione di dispositivi portatili, molti dei quali diventati oramai irrinunciabili come i cellulari, i lettori mp3 ed altri gadget di ridotte dimensioni. La specifica più stringente, oltre alle opportune dimensioni, che questa tipologia di dispositivi deve rispettare, riguarda il consumo di energia, che per ovvi motivi deve essere ridotto al minimo. Sia in ambito commerciale che hobbistico, i progettisti quindi sono sempre alla ricerca di microcontrollori di elevate prestazioni e consumi limitati, preferibilmente anche a costi contenuti. Da queste premesse nascono i nuovi microcontrollori della Microchip PIC16(L)F1705/09, capaci di offrire, in modo economico, tutta la potenza di calcolo dei classici microcontrollori ad 8 bit ma con basse tensioni di alimentazione e bassi consumi energetici, candidandosi così ad essere un’ottima risorsa per tutti i progettisti interessati alla creazione di dispositivi portatili o qualunque altro congegno che richieda basse tensioni d’utilizzo e bassi consumi, come ad esempio nel caso dei moderni quadcopter o altri dispositivi simili creati ed usati nel modellismo. In questo articolo, e nella puntata successiva, presenteremo questa nuova famiglia di microcontrollori, approfondendo via via le maggiori caratteristiche circuitali e funzionali. La Figura 1 riporta la piedinatura del PIC16(L)F1705 che monta due porte su 14 pin, mentre la Figura 2 riporta la piedinatura del PIC16( L)F1709 che, a differenza del primo, ha una porta in più su 20 pin. La lettera “L” che appare nella nomenclatura dei dispositivi indica “Low Power”, il che li differenzia dai loro equivalenti classici, ovvero PIC16F1705 e PIC16F1709.
EXTREME LOW POWER (XLP)
I microcontrollori che presentiamo in questo articolo supportano una tensione d’alimentazione da 1,8V a 3,6V, un pò più bassa quindi dei classici 5V dei primi microcontrollori, o dei 3,3V delle più moderne versioni. Con eXtreme Low Power si indica uno standard di valori di corrente per i dispositivi in varie condizioni di funzionamento, la Tabella 1 riporta un piccolo riepilogo per i microcontrollori in questione.
Modalità Sleep: Con la modalità di funzionamento “Sleep” si intende una particolare modalità di funzionamento in cui il microcontrollore si “congela”, ovvero smette di eseguire le istruzioni e si porta in una sorta di stand-by in cui riduce al minimo i consumi, dovendo, a quel punto, occuparsi soltanto di un eventuale segnale che lo faccia uscire dalla modalità sleep per tornare al funzionamento standard. Per portare il microcontrollore nella modalità sleep bisogna eseguire una apposita istruzione di sleep, che porterà alle seguenti conseguenze:
- Il Watchdog Timer (WDT) viene disabilitato, a meno che non sia stato impostato per funzionare anche nella modalità sleep;
- Il negato del bit PD, ovvero il bit di power down del registro Status viene portato a 0;
- Il negato del bit TO, ovvero il bit che tiene conto dei time-out del Watch Dog Timer nel registro Status viene portato a 1;
- Il clock della CPU viene disabilitato;
- Il clock interno a 31kHz non viene influenzato e le periferiche che lo utilizzano continueranno a funzionare;
- Il Timer1 e le periferiche che dipendono da questo continueranno a funzionare se quest’ultimo è pilotato dal clock interno a 31 kHz o dall’oscillatore secondario o da un clock esterno;
- La periferica ADC continuerà a funzionare se è stato selezionato l’oscillatore RC interno come sorgente di clock per le conversioni;
- I pin in I/O manterranno lo stato che avevano prima dell’istruzione di sleep;
- L’unico segnale di reset che verrà considerato sarà quello proveniente dal WDT.
In questa modalità, per ridurre appieno i consumi è opportuno connettere i piedini ad alta impedenza a Vss o Vdd in maniera tale da eliminare possibili correnti flottanti che potrebbero essere considerate come segnali di switch. Inoltre, affinché l’istruzione di sleep venga eseguita dal microcontrollore è necessario che l’apposito bit GIE del microcontrollore sia stato impostato. Dopo l’istruzione di sleep, prima di entrare in questa modalità, il microcontrollore esegue un’ulteriore istruzione, e nel caso in cui si voglia preservare lo stato del codice è consigliabile quindi inserire un’istruzione NOP dopo quella di sleep.
Dalla modalità sleep si può risvegliare il microcontrollore nei seguenti casi:
- Inviando un segnale di reset sul pin MCLR (negato), se quest’ultimo è abilitato.
- Un segnale di reset di tipo BOR, causato da una tensione d’alimentazione inferiore ad una soglia per le operazioni elementari.
- Un segnale di reset di tipo POR, causato da una tensione d’alimentazione inferiore ad una certa soglia.
- Mediante il Watchdog Timer, se quest’ultimo è abilitato.
- All’occorrenza di un interrupt esterno.
- All’occorrenza di un segnale di interrupt generato da una delle periferiche capaci di funzionare anche nella modalità sleep.
Nei primi tre casi, quindi, si ottiene un ripristino della modalità d’esecuzione del microcontrollore tramite dei segnali di reset, mentre gli altri tre casi possono essere considerati come normali operazioni svolte dal microcontrollore nella fase di sleep. Nel caso in cui il risveglio avviene tramite un interrupt, il microcontrollore ritorna immediatamente alla modalità operativa riazzerando il watchdog timer e il prescaler di quest’ultimo indipendentemente dalla causa del risveglio.
Modalità Low-Power Sleep: Come detto, questa nuova gamma di microcontrollori lavora con tensioni di alimentazione più basse del normale, tuttavia, al fine di interagire con altri dispositivi alimentati da tensioni standard, 5 Volt, all’interno del microcontrollore è presente un regolatore di tensione (LDO) che abbassa la tensione eventualmente presente sui vari pin portandola a valori compatibili con quelli presenti all’interno del microcontrollore. Quando il microcontrollore si trova in modalità sleep, il regolatore al suo interno resta attivo, tuttavia, modificando opportunamente il valore del bit VREGGPM, nel registro VREGCON è possibile portare anche il regolatore nella modalità a basso consumo, ottenendo quindi un’ulteriore modalità di risparmio energetico, la low-power sleep mode.
La scelta tra la modalità sleep e la modalità low-power sleep è funzione dell’applicazione in cui si sta usando il microcontrollore, infatti, nella normale modalità sleep, il regolatore LDO resta attivo e in caso di risveglio il passaggio dalla modalità sleep alla normale modalità operativa è abbastanza veloce, viceversa se il microcontrollore si trova nella modalità low-power sleep all’arrivo di un segnale di risveglio, è necessario innanzitutto riattivare e ristabilizzare il regolatore LDO, impiegando così un tempo maggiore rispetto al risveglio dalla normale modalità sleep. Quindi, nel caso in cui si ha la necessità di risvegliare il microcontrollore spesso e velocemente, è consigliabile l’uso della normale modalità sleep, mentre nel caso in cui si prevede di lasciare per lunghi tempi il microcontrollore nella modalità di sleep, è consigliabile puntare sul risparmio energetico usando la modalità low-power sleep. Un’ulteriore considerazione sulla modalità low-power sleep va fatta per alcune periferiche che non funzionano nella suddetta modalità, ovvero:
- Il Reset di tipo BOR
- Il Watchdog Timer
- L’interrupt proveniente da pin esterni o da un cambio di stato sui pin
- Il Timer1
Nel caso in cui il firmware del microcontrollore prevede l’utilizzo di queste periferiche, per preservare il microcontrollore, non è possibile disattivare il regolatore LDO che rimarrà sempre attivo anche nella modalità sleep. Fatte queste considerazioni, risulta opportuna una adeguata progettazione dell'hardware e del firmware in modo tale da poter sfruttare al meglio le proprietà in termini di risparmio energetico offerte da questa gamma di microcontrollori.