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

Powerdown i watchdog - cykle dłuższe niż 8 s Attiny13

MES Mariusz 15 Paź 2011 16:36 3103 13
  • #1 10030324
    MES Mariusz
    Poziom 36  
    Witam.

    Ze względu na to, że buduję układ zasilany bateryjnie (oparty na ATTiny13) chcę zminimalizować pobór prądu przez mikrokontroler. Wystarczy mi, żeby układ wybudził się co kilka minut, dokonał pomiaru, i następnie znów zasnął. Pomyślałem, że najkorzystniejsze będzie połączenie powerdown z watchdogiem, ale z tego co widzę w taki sposób najdłuższe cykle to 2048 ms. Dobrze myślę?

    Z tego co widzę mam do dyspozycji:

    - IDLE
    - POWERDOWN
    - STANDBY
    - ADCNOISE
    - POWERSAVE

    z których powerdown wydaje się najkorzystniejsze.

    Zadanie wykonywane po wybudzeniu do wystawianie na pin PB1 VCC oraz pomiar na ADC1 (dzielnik: napięcie PB1 -> Rezystor_1 -> Rezystor_2 -> GND). ADC1 mierzy napięcie jakie pojawi się na dzielnieku Rezystor_1 -> Rezystor_2.

    Nie wiem czy zastosować POWERDOWN i niestety wybudzać się co 2s czy też skorzystać z jakiegoś innego sposobu / trybu?
  • #2 10030598
    GSM
    Poziom 25  
    Witam,

    cyklu WDT nie wydłużysz.
    Możesz też kombinować z trybem IDLE i przerwaniem od timer-a do wybudzania układu, ale to rozwiązanie jest bardziej prądożerne.
    Jeśli tak bardzo zależy ci na poborze prądu, pewnym wyjściem, które mi właśnie do głowy wpadło, jest zastosowanie układu PCF8563 z ustawionym alarmem, ma on bardzo niski pobór prądu.
    Po upływie tych 2 minut to on by budził mikrokontroler.
    WDT można wtedy zostawić jedynie w celu upewnienia się, że jakaś awaria PCF-a nie spowoduje wiecznego uśpienia układu.

    Pozdrawiam,
    GSM
  • #3 10031625
    GienekS
    Poziom 32  
    Ostatnio męczyłem watchdoga w tym procku. Watchdog ma niezależny zegar i można uzyskać maksymalny czas 8 sekund.Powerdown i watchdog - cykle dłuższe niż 8 s Attiny13

    Dodano po 5 [minuty]:

    Jeszcze jedno. W tm procesorze watchdog może generować przerwanie, możesz wykorzystać.
  • #4 10032180
    MES Mariusz
    Poziom 36  
    GienekS napisał:
    Jeszcze jedno. W tm procesorze watchdog może generować przerwanie, możesz wykorzystać.

    Tak planuję. Po wystartowaniu załączyć watchdoga, wykonać zadanie i uśpić. Wybudzać co 8 sekund. Bo z tym iddle i przerwaniem na dłuższy czas to chyba nie jest najoszczędniej. Chyba, że wybudzać sobie co 8 sekund i inkrementować jakąś komórkę pamięci EEPOM. Po zliczeniu zadanej wartości wykonać zadanie (pomiary ADC) i wyzerować komórkę. Tyle, że nie wiem czy zapis do EEPROM nie byłby bardziej prądożerny niż pomiary ADC.
  • #5 10032304
    MirekCz
    Poziom 35  
    1. Zapis do EEPROM będzie dosyć prądożerny
    2. EEPROM ma określoną liczbę zapisów i w ten sposób mógłbyś go zajechać w jakimś sensownym czasie.
    3. Jak dobrze widzę w dokumentacji to stan rejestrów przy power-down jest zachowany, więc można to zrobić bez użycia eepromu.
    4. Pamiętaj o wyłączeniu ADC i innych dodatkowych funkcji przy przejściu w stan uśpienia - inaczej one nadal będą pobierały energię
  • #6 10032335
    Press
    Poziom 24  
    MES Mariusz napisał:
    Chyba, że wybudzać sobie co 8 sekund i inkrementować jakąś komórkę pamięci EEPOM.


    no jeśli mówisz o EEPROM zawartym w uP to pamiętaj, że ma tylko 100 tys cykli zapisu gwarantowane.
    Z kalkulatora mi wychodzi, że przy ciągłej pracy i nominalnej trwałości komórki padnie ona po niecałych 10 dniach.

    [edit]
    a może jakaś pamięć zewnętrzna typu 24C02 jeśli już.
    0.1uA w stanie STANDBY i 200uA w stanie aktywnym.
    Za to wytrzymałość na zapis do 1 mln cykli a to już 90 dni ponad.
  • #7 10033826
    GSM
    Poziom 25  
    MirekCz napisał:
    3. Jak dobrze widzę w dokumentacji to stan rejestrów przy power-down jest zachowany, więc można to zrobić bez użycia eepromu.

    Owszem, ale...

    Cytat:
    Power-down Mode
    (...)
    In this mode, the Oscillator is stopped, while the external interrupts,
    and the Watchdog continue operating (if enabled). Only an External Reset, a Watchdog
    Reset, a Brown-out Reset, an external level interrupt on INT0, or a pin change interrupt
    can wake up the MCU.

    Wynika z tego, że przerwanie WDT nie wybudzi mikrokontrolera.

    Pozdrawiam,
    GSM

    EDIT:
    Ale z drugiej strony w tabelce, poniżej tego cytatu jest napisane coś całkowicie przeciwnego :roll:
  • #9 10034991
    asembler
    Poziom 32  
    Po co w ogóle myśleć o EEPROM wewnętrznym lub zewnetrznym skoro urządzenie bateryjne.
    RAM sie nada lepiej
  • #10 10042267
    MES Mariusz
    Poziom 36  
    $regfile = "ATtiny13.DAT"
    $crystal = 4800000
    
    Config Watchdog = 4096
    Ired Alias Portb.0
    Config Ired = Output
    
    start watchdog
    
    Reset Ired
    Waitms 255
    Set Ired
    Waitms 255
    
    Powerdown


    I wszystko działa :-)

    Mikrokontroler ATtiny13 ma jeszcze coś takiego jak fuse bit CKDIV8 co znaczy, że zegar wewnętrzny dzielony jest przez 8. Pytanie tylko z jakiego zegara korzysta watchdog. Bo jeśli maksymalny okres oczekiwania watchdoga wynosi 8s a watchdog korzysta z zegara po CKDIV8 to, przy zaznaczeniu CKDIV8 teoretycznie dawałoby 8*8=64 s.

    Z tego co widzę to w ATtiny13 dostępne są trzy częstotliwości wewnętrznego oscylatora 4,8 MHz, 9,6 MHz oraz 128 kHz. Biorąc pod uwagę zasilanie bateryjne najkorzystniejsze będzie wybranie 128kHz.

    O ile to rzeczywiście ma wpływ na watchdoga, można by program skompilować pod wyższą częstotliwość rezonatora, tyle, że i2csend przestanie zapewne działać.

    asembler napisał:
    Po co w ogóle myśleć o EEPROM wewnętrznym lub zewnetrznym skoro urządzenie bateryjne.
    RAM sie nada lepiej

    To chyba jakaś pamięć zewnętrzna (kolejne obciążenie źródła) bo RAM wewnętrzny w trybie powerdown raczej nie funkcjonuje.
  • #11 10042319
    tmf
    VIP Zasłużony dla elektroda
    A niby dlaczego miałby nie funkcjonować? Gdyby zawartość SRAM była tracona to program musiałby się wykonywać od początku, co efektywnie byłoby równoznaczne z resetem procesora. Oczywiście w każdym trybie oszczędzania energii zawartość SRAM jest zachowana, co czyni twoje rozważania nieco pozbawionymi sensu. Jeśli chcesz wydłużyć czas to do wybudzania wykorzystaj timer czy WD i w procedurze obsługi przerwania inkrementuj jakiś marker, bo osiągnięciu zadanej wartości wywołaj procedurę konwersji.
    Swoją drogą podaj co to za bateria i jak długo to urządzenie ma na niej działać, bo może się okaże, że tu jest jakiś problem. No i Bascom do takich zastosowań to chyba się nie za bardzo nadaje - tu potrzebujesz w miarę dobrą kontrolę nad wykonywaniem programu i czasem jego wykonania, IMHO duże oszczędności da wykorzystanie kombinacji C/assembler - assembler w sekcjach krytycznych, np. w obsłudze przerwania.
  • #12 10042578
    MES Mariusz
    Poziom 36  
    tmf napisał:
    A niby dlaczego miałby nie funkcjonować? Gdyby zawartość SRAM była tracona to program musiałby się wykonywać od początku, co efektywnie byłoby równoznaczne z resetem procesora.

    Czy przez przypadek nie tak właśnie działa przerwanie od watchdoga? Nie wykonuje się wtedy reset?

    tmf napisał:
    Oczywiście w każdym trybie oszczędzania energii zawartość SRAM jest zachowana, co czyni twoje rozważania nieco pozbawionymi sensu.

    Jesteś pewien, że w przypadku wybudzania z powerdown przez watchdog rzeczywiście tak to działa? A mnie się zdawało, że watchdog wykonuje reset...

    tmf napisał:
    Jeśli chcesz wydłużyć czas to do wybudzania wykorzystaj timer czy WD i w procedurze obsługi przerwania inkrementuj jakiś marker, bo osiągnięciu zadanej wartości wywołaj procedurę konwersji.

    Timera przy powerdown raczej nie wykorzystam.

    tmf napisał:
    Swoją drogą podaj co to za bateria i jak długo to urządzenie ma na niej działać, bo może się okaże, że tu jest jakiś problem.

    Może LITOWA CR2477? Ma działać maksymalnie długo. Przynajmniej kilka miesięcy.

    dondu napisał:
    Ja mam pytanie uściślające do autora tematu: Co robi uC z zmierzoną wartością? Zapisuje, wysyła gdzieś?


    W przypadku przekroczenia krytycznej wartości wysyła kod w podczerwieni (ired, RC5).
  • #13 10042613
    asembler
    Poziom 32  
    Reset to wykonanie programu o $0000 i nie powoduje czyszczenia pamieci.
    Dodatkowo źródło resetu można rozpoznać i jeżeli na początku programu czyscisz cały RAM lub jego część to dzieki temu możesz ten fragment ominąć.
    Dodatkowo dla oszczedności wykorzystaj też SLEEP ADCNOISE

    Zauważ też, że program wykorzystujący tryb POWERDOWN to im mniejsza czestotliwość zegara tym większy pobór mocy.
  • #14 10042798
    dondu
    Moderator na urlopie...
    asembler napisał:
    Reset to wykonanie programu o $0000 ...

    Niezupełnie, są jeszcze inne skutki np.:

    Datasheet napisał:
    During reset, all I/O Registers are set to their initial values, ...

    The I/O ports of the AVR are immediately reset to their initial state when a reset source goes active.
    ...
    After all reset sources have gone inactive, a delay counter is invoked, stretching the internal reset.


    AVRFreaks zebrał te zasady w jeden dokument: http://www.avrfreaks.net/modules/FreaksFiles/files/267/DN_006.pdf



    asembler napisał:
    Zauważ też, że program wykorzystujący tryb POWERDOWN to im mniejsza czestotliwość zegara tym większy pobór mocy.

    Coś nie bardzo zrozumiale to napisałeś.
    W POWERDOWN program się nie wykonuje, więc nie może pobierać mocy, ale za to jest trybem snu, w którym pobiera najmniej mocy.

    Zapewne chodziło Ci o to, że większy zegar to szybciej pójdziesz spać, czyli mniej prądu zużyjesz (już kiedyś była na ten temat dyskusja w której brałeś udział). Niestety to nie jest takie proste, co więcej z reguły jest odwrotnie, co ATMEL udowodnił w eksperymencie (link poniżej).

    @Mes_ Mariusz:
    Przeczytaj wszystkie 3 części artykułu, to dowiesz się dlaczego i może jeszcze baterię inną wybierzesz: http://mikrokontrolery.blogspot.com/2011/01/bateria-zasila-mikrokontroler-czesc-1.html
REKLAMA