rula putere redusă (un alt mod de economisire a energiei)

Există un alt mod de economisire a energiei, pe care am descris în articolul meu despre modalitățile de a economisi energie în STM8L. Acesta nu este un „modul de repaus“, deoarece kernel-ul este încă în desfășurare. deși la o frecvență redusă. Dar, dezactivând cele mai multe părți „vorace“ ale MC în acest mod, puteți face uz de aproximativ 4-5mkA. Este numit - scăzut de putere în modul Run. Pentru simplificare, îl voi suna LPR.

rula putere redusă (un alt mod de economisire a energiei)

În modul LPR MC continuă să funcționeze, dar prin dezactivarea ceas de mare viteză, memorie flash și alte lucruri inutile avem în domeniul consumului 5mkA (LCD atunci când a fost pornit, a se vedea. Foto).

Dezactivați toate „lucrurile inutile“ trebuie să manual, astfel încât trecerea la LPR poate fi amânată:
1) Opriți toate dispozitivele periferice neutilizate
2) Dezactivați toate întreruperile
3) Du-te la RAM
4) Comutare la LSI \ LSE (intern oscilator de viteză redusă / ceas extern de cuarț)
5) Dezactivare HSI și HSE (ceasuri de mare viteză)
6) Opriți alimentarea și memoria flash EEPROM
7) Comutator stabilizator de tensiune intern într-un mod de consum redus de energie

Etapele 1 la 5 pot fi efectuate în orice ordine (bine dezactiva natural HSI necesar, după trecerea la LSI ;-)).

Trebuie remarcat faptul că, în acest mod, nu puteți utiliza aghiotanți - are nevoie de un semnal de ceas nu este mai mică de 1MHz. Nici LSE (32.768kGts) sau LSI (38kHz), această frecvență nu va da. Deci, după cum, probabil, nu va funcționa și DAC - el are nevoie de aproximativ 370mkA în timp ce regulatorul de putere joasă poate doar 200uA

În continuare, ia în considerare LPR procesul de autentificare și de ieșire mai detaliat. În acest caz, voi stick cu ordinul I-am dat mai sus (amintiți-vă că primele 5 puncte nu trebuie neapărat să meargă în ordine).

Prima sarcină cu care ne confruntăm - de a conduce toate lucrările caracteristicile din LPR, în memorie. În IAR acest lucru se face foarte simplu. Înainte de a defini funcția ar trebui să adăugați modificator __ramfunc.

Denumire IN_RAM (void foo (void)) înseamnă exact același lucru, iar acest IN_RAM înregistrat în bibliotecă:

Trecerea la modul LPR începe cu pornirea generatorului de frecvență joasă (LSI sau LSE).

Apoi, utilizați comutarea automată între ceasuri. Primul lift Swen bit în registru CLK_SWCR - permițând astfel de comutare. Apoi, a pus în codul registru CLK_SWR al sursei, la care ne-o dorim pentru a comuta: 0x1 - HSI. 0x2 - LSI. 0x4 - HSE. 0x8 - LSE. După care se ridică steagul SWBSY și începe de comutare, dar noi asteptam concluzia sa, privind la pavilion.

Mai multe informații despre ceasul de sistem poate fi citit în acest articol.

Atunci când trecerea la sfârșitul LSI, MC va funcționa la o frecvență de 38kHz / prescaler. La începutul instalat separator 8, și, prin urmare, frecvența de ceas va 4.75kGts MK. Din acest motiv, nu poate funcționa controler LCD, care este implicit cronometrat de LSI (fără separator). Este necesar ca frecvența de control LCD este mai mică sau egală cu frecvența MC.

După trecerea la LSI, este necesar pentru a opri generatorul de mare viteză - HSI. Dacă nu, veți fi adăugat la consumul de sute de microamperi. Din fericire, acesta este dezactivat într-o singură acțiune:

Următorul punct este alimentarea de memorie flash și EEPROM:

În mod firesc, după care încercați să accesați o variabilă în memoria EEPROM sau flash-ul va avea ca rezultat o eroare. Când încercați să mergeți la funcții situate în memoria flash se va întâmpla la fel. Prin urmare, funcțiile de care avem nevoie în LPR trebuie să ia cu el la RAM.

Deci, nu uita de întrerupere - tabel cu vectori viața lor în memoria de program, care nu mai este disponibil. Prin urmare, toate întreruperile trebuie să fie dezactivate. Alegeți orice modalitate de gust:
__disable_interrupts
asm ( «SIM»);

Odată ce memoria este oprit, acesta este ultimul pas - opriți regulatorul principal de tensiune (STM8 de bază este alimentat de 1.8V prin stabilizator intern):

După setarea acestui bit stabilizator intră în modul ULP (putere ultra scăzut).

Bine ați venit la Matrix LPR


În acest mod, puteți face? Da, aproape la fel ca și în comun. În afară de faptul că dimensiunea de cod este limitat RAM (minus stiva minus variabilă), frecvența este limitată de frecvența LSI \ LSE, fără întrerupere, ci o încercare de a aborda funcția de memorie flash se va prăbuși MC.

Puteți utiliza aproape toate periferice (cu excepția ADC - zboară în frecvență) pentru a interoga butoanele de senzori, orice considerat (în general, considerate mai bine la frecvența maximă.), A comunica prin SPI / UART / I2C, etc. Apropo, că această placă va ajuta să estimeze consumul total de MK neglijarea dat de periferie:

rula putere redusă (un alt mod de economisire a energiei)

Aproape orice periferice poate fi configurat astfel încât să consume minim de energie. Cum ar fi controler LCD după reducerea contrastului și rata de reîmprospătare a început să mănânce o pereche de microamps mai puțin.

În schimb cicluri, întârzieri sau cicluri de așteptare în timp ce pentru un eveniment de la periferie pot fi utilizate în modul WFE (așteptați eveniment). Acesta MK nucleu oprește atâta timp cât periferice selectate nu va genera un eveniment. Un astfel de eveniment poate fi, de exemplu, sosirea unui octet sau SPI depășirea timer-ului.

Primul pas este de a configura sursa de evenimente - el ar trebui să li se permită să întrerupă corespunzătoare, deși nu va fi folosit. Apoi, prin intermediul registrelor WFE_CRx (total 3 piese lor) selectați o sursă de eveniment care trezesc MC. Ca aceasta:

Acest eveniment este de №4 cronometru. O listă completă a evenimentelor de aici, nu voi da, și îl va trimite la pagina 74 RM0031.

Apoi începe sursa evenimentului (un contor de timp, sau prin transfer de biți SPI) și execută instrucțiunile

Acum, miezul de MK oprit înainte de eveniment, după care va continua să execute cod cu următoarea comandă. După ieșirea din WFE trebuie să resetați steagul sursă de întrerupere evenimentul nostru și resetare biți în registrul WFE_CRx - în caz contrar întrerupe nu va funcționa în mod normal.

De fapt, WFE economisește energie foarte mult atunci când activitatea MC la frecvențe înalte. Dar, în centrul LPR și așa consumă aproape nimic, astfel încât WFE poate da doar o economie microamperi câteva.

Apropo, în modul de oprire de la LPR nu poate părăsi - după trezirea din ea poate doar intrerupere care LPR este interzisă.

Acum, hai sa vorbim despre cum să se trezească și ieși din LPR.

Apoi repetă aceeași procedură, dar în ordine inversă. Mai întâi, porniți regulatorul principal de tensiune:

Flașnetă începe imediat, astfel încât înainte de a include toate celelalte, trebuie să așteptăm până când autoritatea de reglementare va intra în funcțiune. De altfel, în acest mod ULP stabilizator mozhen furnizează un curent 200uA, și în mod normal - la 25mA.

După bliț stabilizator poate rula:

Memorie, de asemenea, nu începe imediat, și în câteva microsecunde. Dar, având în vedere faptul că MC este încă lucrează la oscilator de frecvență joasă, acestea microsecundă zbura prin, literalmente într-un singur ciclu de ceas. Prin urmare, așteptările și ciclul pot fi eliminate.

Acum, că memoria de program este activat, puteți comuta la HSI:

Deci, suntem înapoi la frecvența inițială - 2MHz.

Activați întrerupe și a alerga periferice necesare în orice moment. Doar primele două paragrafe trebuie să fie efectuate în ordine, altele - în mod arbitrar.

pentru exemplul


De exemplu, a fost creat programm, a cărui activitate poate fi văzut în acest film:

O pereche de rafinamente pentru cei care aleg să se îngropa în codul:

IN_RAM este aceeași cu cea __ramfunc

BAR1_ON și modele similare împreună cu LCD_bar () funcție; COX benzi pe partea dreaptă a ecranului. BAR0_ON - aprinde segmentul inferior, BAR1_ON - al doilea de jos, etc. Ei scrie doar valorile din matrice t_bar. Pentru a pune în întreaga matrice bandă trebuie să fie resetat.

Funcția LCD_GLASS_Init - procedura standard de inițializare LCD - a fost modificat pentru a reduce consumul. Am coborât contrastul și rata de reîmprospătare.

) Funcția (LCD_bar; A fost aruncat afară, în RAM, astfel cum este utilizat atunci când blițul este dezactivat.

Link-uri utile


managementul STM8L de familie de putere - appnout utilă, care descrie nu numai modurile de economisire a energiei, dar și alte modalități de a reduce consumul de MK.

Cum se utilizează acest mod și de a folosi-în cazul în care, la toate - este un dezvoltator, și depinde în primul rând de sarcina. Sunt pentru timpul scrierii acestui articol și nu au venit cu nici o sarcină, oriunde în acest mod este pe deplin justificată și nu ar putea fi, ar fi înlocuit cu un buchet de Halt activ + UMA * + întrerupe externe.

* UMA - o facilitate care permite MC va ieși automat modul de oprire după o anumită perioadă de timp. În STM8L15x implementat ca parte a RTC, dar STM8L101 - ca un modul independent.

P.S. Notă: Prin apăsarea unui buton care a tras până la + 3V 20k rezistor consumă atât de mult la fel de mult ca 30 de operare MK STM8L152C6 în modul Low Power Run. Deci, acolo!