Low Power Contest per Microcontrollori

Low Power Contest per Microcontrollori Microcontrollori a basso assorbimento

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
  • – Active Mode: 220 uA at 1 MHz, 2.2 V

    – Standby Mode: 0.5 uA

    – Off Mode (RAM Retention): 0.1 uA

  • 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:
  • – 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

  • 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

Pinout

microcontrollore MSP430 package

Schema circuitale utilizzato

microcontrollore MSP430 schema

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)
  • – 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

  • Power-Saving Modes
  • – 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

  • Clock Source Options
  • – 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

  • System Protection
  • – 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

  • Development Support
  • – Single-wire background debug interface

    – Breakpoint capability to allow single breakpoint setting during in-circuit debugging

    – On-chip in-circuit emulator (ICE)

  • Peripherals
  • 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

  • Input/Output
  • – 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
{ mode=mode+1; }

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:
  •               – 256 bytes Data EEPROM

                  – Up to 4 Kbytes Linear Program Memory Addressing

                  – Up to 384 bytes Linear Data Memory Addressing

  • Flexible Oscillator Structure:
  •               – 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

  • Special Microcontroller Features:
  •               – 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

  • Extreme Low-Power Management PIC16LF1826/27 with nanoWatt XLP:
  •               – Sleep mode: 30 nA

                  – Watchdog Timer: 500 nA

                  – Timer1 Oscillator: 600 nA @ 32 kHz

  • Analog Features:
  •               – 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

  • Peripheral Highlights:
  •               – 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];

}
else {

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

8 Comments

  1. Emanuele 16 dicembre 2010
  2. Stefano Saccucci 17 dicembre 2010
  3. Emanuele 18 dicembre 2010
  4. ostrega 20 dicembre 2010
  5. scrat 20 dicembre 2010
  6. Emanuele 20 dicembre 2010
  7. Emanuele 20 dicembre 2010
  8. scrat 21 dicembre 2010

Leave a Reply