logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Wybór trybu uśpienia w ATmega dla maksymalnej oszczędności energii

darecki23 18 Paź 2005 18:34 3223 14
REKLAMA
  • #1 1908655
    darecki23
    Poziom 12  
    Posty: 82
    Ocena: 1
    w moim układzie potrzebuję dwóch trybów uśpienia, przy czym każdy musi dawać maksymalną oszczędnosć.
    1. Wyłączone wszystkie możliwe funkcje mikrokontrolera na czas 1 sekundy.
    2. Wyłączone wszystkie możliwe funkcje na czas 3 sekund. W czasie tych 3 sekund będą zliczane impulsy zewnętrzne.
    Który tryb pozwoli mi zrealizować powyższe funkcje i zaoszczędzić cenne zasilanie?
  • REKLAMA
  • #2 1909004
    marcinkwa
    Poziom 14  
    Posty: 164
    Pomógł: 5
    Jaki uC i w czym piszesz?
  • #3 1909241
    darecki23
    Poziom 12  
    Posty: 82
    Ocena: 1
    Piszę w assemblerze pod Atmega16.
  • #4 1909285
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Ja usypiam mojego ATmega32 tak:
     	 GICR |= 1<<INT2;  //włączenie przerwań od KIN
     	 MCUCR = (1<<SE) | (1<<SM0) | (1<<SM1); //Power-down
     	 asm ("sleep");
    
    Bez sensu jest usypiać na jakiś czas. Usypia się do czasu wystąpienia jakiegoś zdarzenia, które to zdarzenia go budzi.
  • REKLAMA
  • #5 1909339
    darecki23
    Poziom 12  
    Posty: 82
    Ocena: 1
    czy możliwe jest uspienie procka niekoniecznie przez power down, tak żeby działało tylko zliczanie impulsów? Hmm to duża oszczędność w moim przypadku ponieważ procek przez np 5 sekund jest w jakimś stanie uśpienia a potem budzi się na sekundę robi obliczenia itd. Czyli przez tylko sekundę jest bardzo prądozerny.
  • REKLAMA
  • #6 1909578
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Trybów uśpienia jest kilka, musisz przejrzeć pdf-a i wybrać ten który będzie ci odpowiadał.
  • #7 1909609
    marcinkwa
    Poziom 14  
    Posty: 164
    Pomógł: 5
    idle - In the idle mode, the system clock is removed from the CPU but not from the interrupt logic, the serial port or the timers/counters.
  • #8 2897116
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Witam.
    Podepne sie.

    Jak odpalic Power-seve mode w atmega8 poprzez Bascom.

    Robie sobie zegarek z termometrem do auta i chcialbym zeby przy odlaczonej stacyjce procesor byl w stanie oszczedzania energii. Tzn, nic nie dzialalo oprocz zegarka (RTC). Czyli wyswietlacz gasnie, temp nie musi mierzyc itd. Byle po powrocie do auta i przekreceniu kluczyka wszystko wrocilo do stanu przed uspieniem.
  • #9 2897414
    maniio
    Poziom 14  
    Posty: 149
    Pomógł: 3
    Ocena: 9
    proponuje zebys stacyjke podpial pod jedno z przerwan i zrobil sobie petle
    if stacyjka =0 then
    powersave
    end if

    obudzisz go gdy pojawi sie jakies zewnetrzne przerwanie, dlatego mozna uswic zeby wchodzic w przerwanie zboczem narastajacym
    config int0 = rising

    w przerwaniu nic nie musisz robic :)

    teraz bedzie ci to dzilac tak ze 0 na stacyjce bedzie ci usypiac procek, a jak stacyjke odpalisz to wystapi przerwanie i procek jest obudzony :)

    chyba dobrze to napisalem :) za ewentualne pomylki sorry, ale jestem poczatkujacy
  • #10 2897904
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    hmmmm...niezabardzo rozumiem

    Przerwanie moze wybudzic uC ze stanu powersave ale czy moze go wprowadzic ??

    Nie kumam tego :|
  • #11 2898018
    maniio
    Poziom 14  
    Posty: 149
    Pomógł: 3
    Ocena: 9
    w power save wprowadza cie petla
    config int0 = rising
    on int0 przerwanie

    petla glowna programu
    do

    if stacyjka = 0 then
    powersave
    end if


    'jakies twoje tam pierdoly

    loop
    end

    przerwanie:
    return

    budzi go zbocze narastajace na np int0

    PS stacyjka alias pind.2 'jezeli np wykorzystujesz przerwanie int0 w atmedze32

    takie cos bedzie ci dzialac gdy przyjmiemy ze stacyjka daje 0 gdy kluczyka nie ma w stacyjce a 1 gdy jest
  • #12 2898197
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    maniio napisał:
    w power save wprowadza cie petla
    config int0 = rising
    on int0 przerwanie

    zapomniałeś o:
    
    Enable Int0
    Enable Interrupts
    

    maniio napisał:

    budzi go zbocze narastajace na np int0

    A figa z makiem , bo żadne zbocze go nie obudzi , tylko przerwanie niskim poziomem ;) Pojawia się też kolejny problem , jeśli ten RTC chodzi na Timerze2 proca , a nie na na zewnętrznym RTC . Co 1 sekundę przerwanie Timer2 będzie budziło proca , by uaktualnił czas , a jeśli się zablokuje te przerwania , to w czasie kiedy proc będzie spał , zegar sie zatrzyma :( Więc albo budzenie co sekundę , albo zewnętrzny RTC.
    Piotrek
  • REKLAMA
  • #13 2898229
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    No to lipa wtedy jak nie da sie. Myslalem ze te uC maja wlasnie taka opcje ze ten timer2 taktowany asynchronicznie z kwarcu zegarowego bedzie chodzil normalnie w trybie power seve. Cos takiego doczytalem w nocie. A power down wlasnie wszystko wylacza.
  • #14 2898292
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    fantasta napisał:
    No to lipa wtedy jak nie da sie. Myslalem ze te uC maja wlasnie taka opcje ze ten timer2 taktowany asynchronicznie z kwarcu zegarowego bedzie chodzil normalnie w trybie power seve. Cos takiego doczytalem w nocie. A power down wlasnie wszystko wylacza.

    Dobrze doczytałeś ;) Timer2 pracuje , ale nie robi nic , poza ustawieniem flagi przerwania.Nie potrafi liczyć sekund,minut,itp. , to już musi zrobić procedura obsługi tego przerwania , która by się wykonać musi obudzić proca.Wiec albo usypianie po aktualizacji czasu , albo zewnętrzny RTC.

    Piotrek
  • #15 2898311
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Ale wtedy takie usypianie nie ma sensu. Po drugie jak fizycznie odlacze wyswietlacz to takze zaoszczedze troche pradu. A nie sadze zeby sie cos stalo akumulatorowi jakby taki procek chodzil np. tydz jak auto stoi.

Podsumowanie tematu

✨ Dyskusja dotyczy wyboru trybów uśpienia mikrokontrolera ATmega16 w celu maksymalnej oszczędności energii przy dwóch scenariuszach: całkowite wyłączenie funkcji na 1 sekundę oraz wyłączenie funkcji na 3 sekundy z jednoczesnym zliczaniem impulsów zewnętrznych. Wskazano, że tryb Power-down całkowicie wyłącza większość funkcji i wymaga przerwania do wybudzenia, co jest standardowym podejściem. Jednak w przypadku potrzeby zliczania impulsów podczas uśpienia, konieczne jest wybranie trybu, który pozwala na działanie liczników/timerów, np. tryb Power-save, który utrzymuje aktywny Timer2 asynchroniczny z kwarcu zewnętrznego. Zwrócono uwagę, że Timer2 w trybie Power-save generuje przerwania, które wybudzają procesor, co wymaga kompromisu między oszczędnością energii a funkcjonalnością zegara RTC. Omówiono także implementację uśpienia i wybudzania za pomocą przerwań zewnętrznych (np. INT0) oraz konieczność odpowiedniego skonfigurowania przerwań i logiki sterującej. Podkreślono, że usypianie na określony czas jest mniej efektywne niż usypianie do momentu wystąpienia zdarzenia. Wskazano, że wyłączenie wyświetlacza i innych peryferiów również przyczynia się do oszczędności energii.
Wygenerowane przez model językowy.
REKLAMA