
Abbiamo testato 3 microcontrollori delle migliori case costruttrici per verificare gli assorbimenti. Low Power Contest per microcontrollori è una gara a chi dura di piu 🙂 Se dovete progettare un sistema a basso consumo, leggete qui!
Low Power Contest
Con Low Power Contest si intende una vera e propria sfida tra diversi microcontrollori simili basata sul consumo energetico. I microcontrollori in gara sono:
MSP430F2013T della Texas Instruments
MC9S08QE4CPG della Freescale
PIC16LF1827 della Microchip
Tutti e tre i dispositivi avranno come unica fonte di energia un condensatore carico e dovranno gestire in modalità Counter una cifra a 7 segmenti LCD.
Il vincitore di tale sfida sarà il microcontrollore che smetterà di visualizzare la cifra sul display per ultimo.
MSP430
Caratteristiche generali
L’MSP430 è un microcontrollore prodotto dalla Texas Instruments (TI).
Per questo contest è stato scelto un MSP430F2013T 16-bit Ultra-Low-Power in 14PDIP.
Caratteristiche principali estratte dal datasheet
- Low Supply Voltage Range 1.8 V to 3.6 V
- Ultralow Power Consumption
- Five Power-Saving Modes
- Ultrafast Wake-Up From Standby Mode in less than 1 us
- 16-Bit RISC Architecture, 62.5 ns Instruction Cycle Time
- Basic Clock Module Configurations:
- 16-Bit Timer_A With Two Capture/Compare Registers
- 16-Bit Sigma-Delta A/D Converter With Differential PGA Inputs and Internal Reference (MSP430x20x3 only)
- Universal Serial Interface (USI) Supporting SPI and I2C
- Brownout Detector
- Serial Onboard Programming, No External Programming Voltage Needed Programmable Code Protection by Security Fuse
- On-Chip Emulation Logic With Spy-Bi-Wire Interface
- Include: MSP430F2013: 2KB + 256B Flash Memory 128B RAM
-- Active Mode: 220 uA at 1 MHz, 2.2 V
-- Standby Mode: 0.5 uA
-- Off Mode (RAM Retention): 0.1 uA
-- Internal Frequencies up to 16 MHz With Four Calibrated Frequencies to ±1%
-- Internal Very Low Power LF Oscillator
-- 32-kHz Crystal
-- External Digital Clock Source
Pinout
Schema circuitale utilizzato
Software e programmatori
Per la scrittura del firmware è stato utilizzato Code Composer Studio (CCStudio) Integrated Development Environment (IDE) v4 offerto da Texas in versione limitata.
eZ430-F2013 è invece il nome del programmatore low-cost usato e targato TI.
Firmware
Il firmware, scritto in linguaggio C, caricato nel microcontrollore provvede a diverse funzioni.
Di seguito l’intero codice commentato:
#include "msp430f2013.h" // Quale cifra è visualizata volatile unsigned char mode; // periodi di aggiornamento trascorsi in modalità corrente volatile unsigned char modecnt; // bitmaps per le cifre 0-9 a 7 segmenti const unsigned char digits[] = { 0x7B, 0x18, 0x6D, 0x3D, 0x1E, 0x37, 0x77, 0x19, 0x7F, 0x1F}; // FUNZIONI void pause (int c); void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop Watchdog Timer BCSCTL2 = 0xF8; // MCLK:LFXT1CLK/8 SMCLK:LFXT1CLK P1DIR = 0xFF; P1OUT = 0x00; CCTL0 = CCIE; CCR0 = 0; TACCR0 = 0x3FF; // Periodo di 1023 + 1 conteggi a 32Hz TACTL = 0x0211; // Timer_A: SMCLK, UP MODE, TAIE // Dormiente _BIS_SR(LPM1_bits + GIE); } #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { // Incrementa il conteggio modecnt = (modecnt+1) % 32; // Cambia cifra visualizzata ogni secondo if (modecnt == 0) { mode = (mode + 1) % 10; P1OUT = digits[mode]; } // Inverte tutti i pin alternativamente per polarizzare l'LCD P1OUT ^= 0xFF; } |
il codice qui sopra riportato è tratto dal sito blog di Kenneth Finnegan
HCS08
Caratteristiche generali
Il secondo microcontrollore scelto è della Freescale con codice MC9S08QE4CPG 8-bit Low-Power in 16PDIP.
Non si tratta purtroppo del microcontroller Freescale a 8 bit con il più basso consumo. Infatti l'S08QB, definito dalla casa produttrice come modello di punta per il basso consumo, non viene prodotto nel formato DIP.
Caratteristiche principali estratte dal datasheet
- 8-Bit HCS08 Central Processor Unit (CPU)
- Power-Saving Modes
- Clock Source Options
- System Protection
- Development Support
- Peripherals
- Input/Output
– Up to 20 MHz CPU at 3.6 V to 1.8 V across temperature range of –40 °C to 85 °C
– HC08 instruction set with added BGND instruction
– Support for up to 32 interrupt/reset sources
– Two low power stop modes
– Reduced power wait mode
– Low power run and wait modes allow peripherals to run while voltage regulator is in standby
– Very low power external oscillator that can be used in stop2 or stop3 modes to provide accurate clock source to real time counter
– 6 μs typical wake-up time from stop3 mode
– Oscillator (XOSC) — Loop-control Pierce oscillator; crystal or ceramic resonator range of 31.25 kHz to 38.4 kHz or 1 MHz to 16 MHz
– Internal Clock Source (ICS) — Internal clock source module containing a frequency-locked-loop (FLL) controlled by internal or external reference; supporting bus frequencies from 1 MHz to 10 MHz
– Watchdog computer operating properly (COP) reset with option to run from dedicated 1 kHz internal clock source or bus clock
– Low-voltage warning with interrupt
– Low-voltage detection with reset or interrupt
– Illegal opcode detection with reset
– Illegal address detection with reset
– Flash block protection
– Single-wire background debug interface
– Breakpoint capability to allow single breakpoint setting during in-circuit debugging
– On-chip in-circuit emulator (ICE)
– ADC — 10-channel, 12-bit resolution; 2.5 μs conversion time; automatic compare function; 1.7 mV/°C temperature sensor; internal bandgap reference channel; operation in stop3;
– ACMPx — Two analog comparators with selectable interrupt on rising, falling, or either edge of comparator output;
– SCI — Full-duplex non-return to zero (NRZ); LIN master extended break generation; LIN slave extended break detection; wake-up on active edge
– SPI — Full-duplex or single-wire bidirectional; double-buffered transmit and receive; master or slave mode; MSB-first or LSB-first shifting
– IIC — Up to 100 kbps with maximum bus loading; multi-master operation; programmable slave address; interrupt driven byte-by-byte data transfer; supporting broadcast mode and 10-bit addressing
– TPMx — Two 3-channel (TPM1 and TPM2); selectable input capture, output compare
– RTC — (Real-time counter) 8-bit modulus counter with binary or decimal based prescaler; external clock source for precise time base, time-of-day, calendar or task scheduling functions; free running on-chip low power oscillator (1 kHz) for cyclic wakeup without external components; runs in all MCU modes
– 26 GPIOs, one output-only pin and one input-only pin
– Eight KBI interrupts with selectable polarity
– Hysteresis and configurable pullup device on all input pins; configurable slew rate and drive strength on all output pins.
Pinout
Schema circuitale utilizzato
Software e programmatori
Per la scrittura del firmware è stato utilizzato CodeWarrior Development Studio 5.9 offerto da Freescale in versione limitata.
Il programmatore utilizzato per il microcontrollore S08 è l’USB Multilink Interface targato PE MICRO.
Firmware
CodeWarrior mette a disposizione dell’utente un serie di finestre ed oggetti per comporre il proprio codici con pochissime righe di codice, per esempio si possono settare i fuses del microcontrollore attraverso un schermata dedicata.
Di seguito il codice commentato per la gestione del counter e del display:
volatile unsigned char mode; volatile unsigned char modecnt; const unsigned char digitsA[] = { 0x03, 0x00, 0x03, 0x01, 0x00, 0x01, 0x03, 0x00, 0x03, 0x00}; const unsigned char digitsB[] = { 0x1B, 0x18, 0x0D, 0x1D, 0x1E, 0x17, 0x17, 0x19, 0x1F, 0x1F}; void TI1_OnInterrupt(void) //Gestione dell’interrupt prodotto dal timer { modecnt = modecnt+1; if (modecnt % 33 == 0) { PTAD = digitsA[mode]; PTBD = digitsB[mode]; if(mode==9) { mode=0; } else modecnt = 0; } PTAD = ~PTAD; PTBD = ~PTBD; //Inverte le uscite per il refresh del display } |
void main(void) { PTBD=0b000000; PTAD=0b00; PE_low_level_init(); for(;;){ Cpu_SetStopMode(); } } |
PIC16LF
Caratteristiche generali
Il terzo microcontrollore scelto è della Microchip e si tratta del PIC16LF1827 8-bit nanoWatt XLP in 18PDIP.
Caratteristiche principali estratte dal datasheet
- High-Performance RISC CPU:
- Flexible Oscillator Structure:
- Special Microcontroller Features:
- Extreme Low-Power Management PIC16LF1826/27 with nanoWatt XLP:
- Analog Features:
- Peripheral Highlights:
– 256 bytes Data EEPROM
– Up to 4 Kbytes Linear Program Memory Addressing
– Up to 384 bytes Linear Data Memory Addressing
– Precision 32 MHz Internal Oscillator Block, software selectable frequencies range of 31 kHz to 32 MHz
– 31 kHz Low-Power Internal Oscillator
– Four Crystal modes up to 32 MHz
– 1.8V-3.6V Operation – PIC16LF1826/27
– Power-on Reset (POR), Power-up Timer (PWRT) and Oscillator Start-up Timer (OST)
– Extended Watchdog Timer (WDT): Programmable period from 1ms to 268s
– In-Circuit Serial Programming™ (ICSP™) and In-Circuit Debug (ICD) via two pins
– Power-Saving Sleep mode
– Sleep mode: 30 nA
– Watchdog Timer: 500 nA
– Timer1 Oscillator: 600 nA @ 32 kHz
– Analog-to-Digital Converter (ADC) Module: 10-bit resolution, 12 channels
– Analog Comparator Module: Two rail-to-rail, Power mode control
– Fixed Voltage Reference (FVR) with 1.024V, 2.048V and 4.096V output levels
– 15 I/O Pins and 1 Input Only Pin
– High current sink/source 25 mA/25 mA
– Programmable interrupt-on- change pins
– Timer0: 8-Bit Timer/Counter with 8-Bit Prescaler
– Enhanced Timer1: 16-bit timer/counter with prescaler, external Gate Input mode
– Up to three Timer2-types: 8-Bit Timer/Counter with 8-Bit Period Register, Prescaler and Postscaler
– Up to two Capture, Compare, PWM (CCP) Modules
– Up to two Enhanced CCP (ECCP) Modules
– Up to two Master Synchronous Serial Port (MSSP) with SPI and I2CTM:
– Enhanced Universal Synchronous Asynchronous Receiver Transmitter (EUSART) Module
Pinout
Schema circuitale utilizzato
Software e programmatori
Per la scrittura del firmware è stato utilizzato MPLAB IDE 8.56 offerto da Microchip con il compilatore HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.80.
Il programmatore utilizzato per il microcontrollore PIC16 è il Microchip MPLAB ICD 2.
Firmware
Di seguito il codice per la gestione del counter e del display:
#include <pic.h> volatile unsigned char mode; volatile unsigned char modecnt; const unsigned char digitsA[] = { 0x03, 0x00, 0x03, 0x01, 0x00, 0x01, 0x03, 0x00, 0x03, 0x00}; const unsigned char digitsB[] = { 0x1B, 0x18, 0x0D, 0x1D, 0x1E, 0x17, 0x17, 0x19, 0x1F, 0x1F}; // funzione principale void main(void) { DACEN=0; //disabilita il DAC interno FVREN=0; //disabilita il FVR INTCON=0b10000000; //abilita gli interrupts interni WDTCON=0b00001011; //abilita il watchdog con overflow ogni 32ms TRISA=0b000; TRISB=0b000000; char i; while(1) // eseguo un ciclo finito { SLEEP(); // mod. lowpower il pic può essere risvegliato solo dal watchdog if(i==0) { PORTA=digitsA[mode]; PORTB=digitsB[mode]; } PORTA = ~digitsA[mode]; PORTB = ~digitsB[mode]; } i=~i; modecnt = modecnt+1; if (modecnt % 35 == 0) { PORTA = digitsA[mode]; PORTB = digitsB[mode]; if(mode==9) { mode=0; } else { mode=mode+1; } modecnt=0; } } // Fine ciclo continuo } // Fine main |
Carica condensatori
Caratteristiche generali
Come fonti di energia elettrica per l’esperimento verranno utilizzati 3 condensatori (uno per ogni microcontrollore) da 10F 2.5V elettrolitici multistrato.
Tramite un semplice circuito RC è possibile caricare i condensatori, che verranno poi scaricati dai micro durante lo svolgimento delle loro funzioni.
Schema circuitale utilizzato
L’integrato LM317 provvede a portare la tensione di un generica fonte a 2.00V utili alla ricarica tramite una rete puramente resistiva. All’uscita di tale rete collegheremo in serie una resistenza da 150Ω e il condensatore elettrolitico formato dal parallelo dei tre.
Con tali valori, usando le seguenti formule:
avremo che
La ricarica dei condensatori durerà complessivamente 7 ore in modo da non danneggiare i componenti stessi.
L’esperimento
Inizio esperimento
Ore 14:55 del 13/11/2010.
Condensatori carichi a 2.00V.
Rilevamenti
Tempo trascorso in min. |
MSP430 |
MC9S08QE4 |
PIC16LF1827 |
0 |
2.000 |
2.000 |
2.000 |
362 |
1.881 |
1.892 |
1.938 |
709 |
1.853 |
1.855 |
1.916 |
1252 |
1.823 |
1.807 |
1.891 |
1372 |
1.819 |
1.800 |
1.887 |
1495 |
1.813 |
1.792 |
1.881 |
1595 |
1.808 |
1.784 |
1.877 |
1696 |
1.803 |
1.778 |
1.872 |
1909 |
1.794 |
1.766 |
1.863 |
2059 |
1.788 |
1.757 |
1.857 |
2576 |
1.767 |
1.727 |
1.835 |
2716 |
1.762 |
1.720 |
1.830 |
2956 |
1.753 |
1.710 |
1.821 |
3076 |
1.751 |
1.706 |
1.818 |
3316 |
1.743 |
1.696 |
1.809 |
4065 |
1.717 |
1.669 |
1.773 |
4436 |
1.705 |
1.647 |
1.764 |
4723 |
1.699 |
1.636 |
1.756 |
5310 |
1.681 |
1.610 |
1.735 |
5981 |
1.666 |
1.589 |
1.712 |
6281 |
1.659 |
1.581 |
1.704 |
6821 |
1.644 |
1.562 |
1.684 |
7421 |
1.633 |
1.548 |
1.667 |
7755 |
1.626 |
1.539 |
1.656 |
8200 |
1.615 |
1.528 |
1.640 |
8990 |
1.593 |
1.513 |
1.617 |
9857 |
1.581 |
1.496 |
1.591 |
11237 |
1.554 |
1.470 |
1.549 |
12077 |
1.542 |
1.455 |
1.529 |
12497 |
1.533 |
1.446 |
1.516 |
13097 |
1.522 |
1.434 |
1.499 |
14240 |
1.501 |
1.411 |
1.466 |
Fine esperimento
Ore 12:12 del 23/11/2010.
Risultati e considerazioni
Andamenti
Risultati
I rilevamenti decretano al “fotofinish” come vincitore il microcontrollore l’MSP430F2013T della TI.
Al secondo posto si piazza il PIC16LF1827 della Microchip.
Il microcontrollore della Freescale MC9S08QE4 si piazza al terzo.
Low power contest per microcontrollori: Considerazioni
Tutti e tre i dispositivi hanno continuato a lavorare anche molto al disotto della soglia minima d’alimentazione 1.8V.
Da notare l’andamento quasi lineare PIC16LF1827.
ogni marchio o logo inseriti in quest'articolo sono dei rispettivi proprietari

Prima di tutto faccio i complimenti a Stefano per l’articolo, l’idea della sfida tra microcontrollori a basso assorbimento è molto attuale e di sicuro interesse per i nostri lettori (progettisti elettronici ed hobbisti).
Inoltre l’articolo è ben strutturato, leggibile e da salvare nei preferiti come riferimento Low Power per i microcontroller.
MA, voglio essere pignolo! Come non esserlo quando parliamo di progetti elettronici.
Ci ho riflettuto sopra, ne ho discusso con amici progettisti ed…. ecco la critica 🙂
1) Valutare i microcontrollori sull’assorbimento, inserendoli in un contesto di assorbimento molto maggiore (vedi display) può incidere significativamente sulla prova. Ad esempio se i 3 display hanno un assorbimento leggermente diverso, in termini di percentuale anche solo del 5% (cosa normalissima) questo incide di molto sul risultato finale.
2) Alimentare il display, in particolare i segmenti del display tramite i pin del micro, è cosa comune, ma, in questo caso, un diverso comportamento dei pin dei microcontrollori può incidere sul risultato finale. Le porte dei micro, in particolare i pin configurati come uscita, sono schematicamente uguali per i 3 micro?
3) Andrebbero approfondite le varie modalità operative offerte dalle case per i 3 micro, per allargare la possibilità di impiego in applicazioni low power. Ad esempio chi offre maggiori opzioni in termini di operatività? Inoltre le periferiche quanto assorbono? Che tempo di startup hanno?
Quest’ultima (ma solo quest’ultima 🙂 ) non è una critica ma solo una richiesta di perfezionamento dell’articlo.
Aspetto anche altri commenti sempre a completare quest’ottimo articolo di partenza per approfondire le tematiche di Low Power nei Microcontroller.
Buongiorno a tutti
allora vediamo beh io sono ancora in fase di crescita in questo mondo e sto imparando solo ora i “trucchetti del mestiere” grazie ad emanuele.
@Babbi: Le misure sono state fatte a velocità supersonica con un tester acquistato da Farnell modello TENMA 72-7770 con RES interna da 10MOHM ed una accuratezza del (+-)(0.5%+2)
Per quanto riguarda il tempo di misurazione, un eventuale perdita di carica dovuto allo strumento è la stessa e per lo stesso tempo a tutti i microcontrollori. Quindi può essere trascurata.
Rimane il fatto che questa guida dovrebbe servire a scegliere quale dei tre micro è il meno “affamato” di energia a pari condizioni e non dare con esattezza l’andamento della Vsupply per ogni micro rispetto al tempo.
@Francesco: Per quanto riguarda i datasheet beh all’università ci ripetono fino a sfinirci di consultarli sempre.
Comunque sia su un punto hai ragione: tutti e tre i micro si sarebbero dovuti spegnere intorno ai 1.8V, invece hanno continuato a lavorare perfettamente al di sotto di tale soglia.
Solo una nota sui datasheet.
Sono indispensabili in fase di ricerca e sviluppo ma devono essere verificati e questo, noi progettisti, dobbiamo mettercelo bene in testa 🙂
Basta guardare le continue errata-corrige che fortunatamente molti produttori rilasciano.
Ostrega
Ciao a tutti.
Complimenti per l’idea e per la pazienza nell’esecuzione del test.
I datasheet sono essemziali, ma propongono il punto di vista del costruttore (test, ecc.) e vanno letti per quel che sono.
Ad esempio, i condensatori elettrolitici multistrato sono dati con tolleranze +80% -20%.
Leggo che i condensatori del test sono stati caricati a 2 volt, ma hanno la stessa capacita’ o entro le tolleranze? Il risultato del test e’ ovviamente legato ai loro valori oltre che all’assorbimento del micro in esame.
Complimenti per l’idea e l’articolo.
Creare un benchmark corrisponde a far risaltare di più alcune caratteristiche piuttosto che altre, perciò qualunque prova non sarebbe perfetta. Propongo però un controllo incrociato (se ne avessi il tempo, ovviamente, e la voglia): per ridurre l’influenza delle varie differenze in termini di capacità o di carico, potrebbe bastare rifare le prove “incrociando” i dispositivi.
Sui datasheet, aggiungo che, secondo me, molte delle caratteristiche evidenziate sono volutamente non confrontabili con quelle di altri produttori, visto che ciascuno cerca di difendere il suo mercato.
La saga della sfida sul low-power tra Microchip e Texas è piuttosto curiosa, ci sono vari documenti di entrambi che tendono a screditare l’altro.
Sul fatto che i micro continuino a funzionare al di sotto della minima tensione di alimentazione, lo trovo normale (le specifiche principali, come questa, sono “almeno…”, e la loro veridicità deve essere garantita con un alto tasso). Non potremmo però fidarci a progettare applicazioni basandoci sul fatto che dei test abbiano avuto esito positivo.
In effetti il parametro della reale capacità del condensatore incide di molto.
Sono stati usati dei condensatori Panasonic EECHZ0E106 con tolleranza +40% -20%
L’idea di un test di benchmark basato su prove incrociate è interessante.
Concordo sul fatto che Microchip e TI si danno battaglia per dimostrare chi di loro è più Low Power.
Hai i links dei documenti dove le due case rivali tendono a screditarsi?
Sarei proprio curioso di vedere su che test si basano 🙂
Ho ritrovato questo, che avevo già letto
http://focus.ti.com/lit/wp/slay015/slay015.pdf
e quest’altro, dove invece c’è un confronto
http://ww1.microchip.com/downloads/en/AppNotes/01267a.pdf