11.3.1. Az MSP430 energiatakarékos használata A Texas Instruments ##LINK: www.ti.com## által fejlesztett MSP430 ##Mixed Signal Processor## család tagjai létrehozásakor a tervezők fontos célja volt a rendkívül alacsony fogyasztás. Ennek érdekében az MSP430 család tagjai több, egymástól teljesítmény-felvételben eltérő módban képesek működni. Például az MSP430F261x processzorcsoport jellemző áramfelvétele (2.2VDC táplálás és 1 MHz-es órajel mellett): • • •
aktív módban, 365 µA, készenléti módban , 0.5 µA, lekapcsolt módban (RAM megőrzéssel): 0.1 µA.
Az MSP430 mikrovezérlő, készenléti módból kevesebb mint 1 µs alatt “ébred fel” és vált át a teljesen aktív üzemmódra (1. irodalom). Az üzemmódok kialakításakor figyelembe vették a három leggyakoribb, de egymással ellentétes elvárást (2. irodalom): • • •
rendkívül alacsony fogyasztás, nagysebességű feldolgozás és adatmozgatás, az egyes perifériák áramfelvétele.
Az MSP430 mikrovezérlőknek egy aktív és öt alacsony teljesítményű üzemmódja (LPMx) ##Low Power Mode## van. Az 1. ábrán az áramfelvétel van bemutatva (1 MHz-es órajel és két különböző tápfeszültség mellett) (2. irodalom):.
1. ábra – az MSP430 mikrovezérlők áramfelvétele Az MSP430 mikrovezérlők működési módjait négy vezérlőbit befolyásolja (CPUOff, OscOff, SCG0 és SCG1), amelyek kombinációi az órajeleket előállító oszcillátorokat és a periferiákat engedélyezik vagy tiltják le. Az összes felsorolt vezérlőbit az állapotregiszterben kap helyet, így megszakítás esetén mentésük és visszaállításuk automatikusan megtörténik.
2. ábra – az MSP430 működési módjai, állapotdiagram Szempontok az MSP430-al megvalósítandó alacsonyfogyasztású rendszer tervezéséhez: •
•
•
A legfontosabb tényező hogy az MSP430-as órajel rendszerét úgy használjuk, hogy a mikrovezérlő minél több időt töltsön az LPM3 üzemmódban. Az LPM3 üzemmódban az áramfelvétel kevesebb mint 2 µA, ami mellett a valós idejű óra/számláló és megszakítási rendszer mégis aktív marad. Külső 32768Hz-es óra kristályt használjunk az ACLK órajel előállítására, miközben a CPU magot – az egyébként kikapcsolt állapotban levő – belső DCO ##Digitally Controlled Oscillator – digitálisan vezérelt rezgőkör## órajelgenerátorral hajtjuk meg. A rendszer így 6 µ-os „ébredési” idő alatt tud aktív üzemmódba lépni. A megszakítási rendszert kell használni a processzor „ébresztésére” és a program folyamatának vezérlésére.
• •
• • •
A perifériákat csak akkor kapcsoljuk be, és csak addig tartsuk bekapcsolva, amikor és amíg szükség van rájuk. Használjuk ki az alacsony fogyasztású beépített perifériális egységeket a szoftveres megoldások helyett. Például az A és B időzítők önállóan képesek PWM ##Pulse Width Modulation – impulzus szélesség moduláció## jel előállítására, annélkül, hogy ehhez CPU erőforrásra lenne szükségük. A kiszámított ugrások és a táblázatos függvények használata ajánlott, a zászló lekérdezés és hosszadalmas szoftveres számítások helyett. Kerüljük a gyakori alprogram- és függvényhívásokat, mert ez többletterhelés a CPU-nak Az intenzíven használt szoftver rutinok írásakor, ajánlott az egy gépi ciklus igénybevevő, a CPU belső regisztereit használó optimalizálás bekapcsolása.
Az MSP430 alacsony fogyasztási mód be- és kikapcsolása A vezérlőbitek segítségével bármikor be tudunk lépni az öt alacsony fogyasztású üzemmód egyikébe (2. irodalom). Megjegyzés: BIS – BIt Set – bit magasra állítása. példa 1.: ; LPM0-ba lépés assembly példa BIS #GIE+CPUOFF,SR
; belépés az LPM0 módba
...
; a program itt megáll!
példa 2.: ; LPM3-ba lépés assembly példa BIS #GIE+CPUOFF+SCG1+SCG0,SR
; belépés az LPM3 módba
...
; a program itt megáll!
Amennyibben olyan megszakítási kérés érkezik, amely lekezelése engedélyezve van, felébreszti az MSP430 mikrovezérlőt bármely alacsony fogyasztású üzemmódból, hogy kiszolgálhassa a beérkezett megszakítást. Ez a következő módon és sorrendben történik meg: 1. megérkezik egy engedélyezett megszakítás 2. a verembe tárolásra kerül a programszámláló (PC) ##Program Counter## és állapotregiszter (SR) ##Status Register## 3. a programszámláló (PC) ##Program Counter## felveszi a megfelelő megszakítás kiszolgáló alprogram (ISR) ##Interrupt Service Routine## kezdőcímét 4. a CPUOFF, SCG1 és OSCOFF bitek 0-ba állítása, „ébredés”, aktív módba való áttérés Amikor a megszakítást kiszolgáló alprogram elvégezte a feladatát kétféleképp tudja befejezni az alprogramot:
• •
a veremről visszaállítja az eredeti állapotregiszter (SR) ##Status Register## állapotot ami az eredeti működési mód állapotba való visszatérést jelenti, a veremben tárolt állapotregiszter (SR) ##Status Register## állapotát megváltoztatva tér vissza az alprogramból, így a mikrovezérlő bármelyik működési állapotban tudja folytatni a munkáját.
Megjegyzés: BIC – BIt Clear – bit alacsonyra állítása RETI – RETurn from Interrupt – visszatérés a megszakítási alprogramból példa 3.: ; kilépés az LPM0 módból assembly példa BIC #CPUOFF,0(SP)
; kilépés az LPM0-ból RETI-re
RETI
; SR és PC vissza a veremről
példa 4.: ; kilépés az LPM3 módból assembly példa BIC #CPUOFF+SCG1+SCG0,0(SP)
; kilépés az LPM3-ból RETI-re
RETI
; SR és PC vissza a veremről
MSP430F26x alacsony fogyasztási módja – C nyelvű példa feladat: egy LED-et kell villogtatni 2s-os periódusidővel, alacsonyfogyasztású üzemmód használatával. a megoldás folyamata: A P2-es port 0. kimenetére van rákapcsolva a LED, a TimerA számláló/időzítőt használjuk az órajel leosztására és a megszakítási kérelem előállítására. Az inicializálás után a mikrovezérlő LPM0 alacsonyfogyasztású üzemmódban van, csak a megszakítás kiszolgálására “ébred fel”, ami után ismét visszatér az LMP0 üzemmódba (3. ábra).
3. ábra – LED 2s villogtatása, folyamatábra a C nyelvű forráskód: #include
<msp430x26x.h>
void main(void) { WDTCTL = WDTPW + WDTHOLD;
// az MSP szimbólum definíciók
// a wachdog időzítő kikapcsolása
P2DIR |= 0xff; P2OUT = ~ 0x01;
// a P2 mint kimenet // az P2.0 kimenet negatív log. aktív
CCTL0 = CCIE;
// CCR0 számláló megszakítás // engedélyezés
CCR0 = 4096; TACTL = TASSEL_1 + + ID_3 + MC_2;
// // // //
_BIS_SR(LPM0_bits + GIE);
// LPM0 módba lépés a megszakítások // engedélyezésével. A CPU itt megáll!
a (vissza)számláló kezdőértéke a 8-al osztott ACLK lesz az időzítő órajele, a számlálás folyamatos (contmode)
} // TimerA0 ISR – az időzítő megszakítás kiszolgáló alprogramja #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A (void) { P2OUT ^= 0x01; // A P2.0 negálása, LED átkapcsol CCR0 += 4096; // Az időzítő (vissza)számlálója // újra feltöltve }
magyarázat: a megfelelő port és számláló inicializálás után a mikrovezérlő LPM0-ba kerül. Az ACLK órajelet a külső kristály, 32768Hz értékre stabilizálja. Ez 8-al történő előosztás után, mint 4096Hz órajel jut el az időzítőbe. Az időzítő CCR0 számlálója 4096 órajelente – vagyis 1 másodpercenként – vált ki megszakítást. A megszakítás felébreszti a mikrovezérlőt. A megszakítás kiszolgáló alprogramban negálásra kerül a LED-et meghajtó P2.0 port pillanatnyi állapota, és a CCR0 számláló újból felveszi a kezdőértékét. A kiszolgáló alprogram lefutása után a mikrovezérlő ismét visszatér az LMP0 alacsonyfogyasztású üzemmódba. irodalom: (1) MSP430F241x, MSP430F261x Mixed Signal Microcontroller: ##LINK: http://www.ti.com/lit/ds/slas541j/slas541j.pdf## (2) MSP430x2xx Family – felhasználói kézikönyv: ##LINK: www.ti.com/lit/ug/slau144i/slau144i.pdf## (referencia dokumentumok: Lásd az MSP felépítése fejezetet!!!)