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

Jak uruchomić RTC w trybie POWER DOWN na ATMEGA128A?

pawel_5 29 Cze 2012 13:52 1789 8
REKLAMA
  • #1 11054381
    pawel_5
    Poziom 13  
    Panowie, pytanie może zabrzmi banalnie i odpowiedź byc może tez taka będzie ale jakoś moja głowa nie może przeskoczyć tego zagadnienia.

    Otóż,

    - zegar RTC działa w trybie normalnym prawidłowo (co jedną sekundę generuje się przerwanie na skutek przepelnienia timera pracującego asynchronicznie, oscylator oczywiście zagarkowy podpięty do TOSC1 i TOSC2).
    - kiedy wchodzę w power down, przerwanie asynchroniczne (RTC) nie jest aktywne (wedug datasheet w tym trybie uśpienia). Jeżeli nie jest aktywne to co sekundę nie będzie ilość seknd powiększanych o jeden, ze względu na brak generowanych przerwań z timera pracującego asynchronicznie w tym trybie. Producent jednak pisze, że ten zegar pracuje w tym trybie.

    Jakoś inni na forum to robią w tym trybie a ja jakoś nie wiem, nie umiem sobie wyobrazić jak to zrobić.

    Proszę o naprowadzenie.
    Nie wklejam kodu, gdyż nie proszę o rozwiązanie problemu programu, tylko o wskazanie metody.
    Mam nadzieję, że napisałem wszystko wystarczająco zrozumiale.

    Pozdrawiam,
    Paweł
  • REKLAMA
  • Pomocny post
    #2 11054740
    dondu
    Moderator na urlopie...
    Datasheet napisał:
    Power-down Mode
    ...
    This sleep mode basically halts all generated clocks, allowing
    operation of asynchronous modules only.


    Tabelka: Active Clock Domains and Wake Up Sources in the Different Sleep Modes
    pokazuje, że w Power Down Timer0 nie może wybudzić mikrokontrolera.

    Innymi słowy timer0 w trybie asynchronicznym liczyć będzie, ale nie może zbudzić ATmega128.

    pawel_5 napisał:
    Jakoś inni na forum to robią w tym trybie ...

    Nie wskazałeś źródła tej informacji.
    Ale może np. wykorzystują Timer0 w trybie asynchronicznym do generowania PWM na pinie OC0 mikrokontrolera i podłączają go pod pin INT, a ten już może zbudzić mikrokontroler. Sprawdź czy można tak ten timer ustawić.
  • REKLAMA
  • #3 11054863
    pawel_5
    Poziom 13  
    Pewnie tak to robią i jest to mądre, ale w moim przypadku na takie rozwiązanie już po ptakach bo płytka jest już wykonana:/ dzieki za odpowiedź, o to mi chodziło, teraz już się nie będę łudził, że coś z tego będzie. Pozostaje mi power safe mode, wiesz może ile typowo powinien pobierać uP w tym trybie z aktywnym T0 asynchronicznie? W nocie dopatrzyłem się tylko IDLE i Power down mode pobory prądu.

    Dodano po 8 [minuty]:

    W powerd down mode dla zegara 8MHz pobiera mi 7uA a dla power save 5mA :/
  • #5 11056629
    pawel_5
    Poziom 13  
    Dondu dziękuję Ci za pomoc i dobre chęci.
    Trochę poczytałem i okazuje się, że producent pisze o jedynej różnicy między Power safe, a power down to, że w power safe może chodzić zegar asynchronicznie.
    Okazuje się, że popełniłem błąd programowy, w trybie Power safe wchodził mi w przerwanie T0 to zapomniałem go ponownie usypiać. Poprawiłem to i okazało się że ATMEGA128A w trybie power safe mode przy taktowaniu 8MHz i zasilaniu 3V pobiera 7uA z niewielkimi co sekundowymi wychyleniami do 10uA. Wynik jest w pełni zadowalający,ale........
    co 47 wychylenie wskazówki (czyli co 47 sekunda w power safe) procesor się zawiesza i pobór prądu rośnie do 5mA, lub cyklicznie co 47 sekunda rośnie na chwilę do 5mA i znów 47 sekund i znów 5mA.
    Wszystko powyłączałem, żadne inne przerwanie nie jest aktywne które mogło by go wybudzać, czy timer czy INT.
    Nie wiem co może być:( szukam, czytam, testuje i ciągle to samo :(
  • REKLAMA
  • Pomocny post
    #6 11056712
    dondu
    Moderator na urlopie...
    pawel_5 napisał:
    Wynik jest w pełni zadowalający,ale........
    co 47 wychylenie wskazówki (czyli co 47 sekunda w power safe) procesor się zawiesza i pobór prądu rośnie do 5mA, lub cyklicznie co 47 sekunda rośnie na chwilę do 5mA i znów 47 sekund i znów 5mA.
    Wszystko powyłączałem, żadne inne przerwanie nie jest aktywne które mogło by go wybudzać, czy timer czy INT.
    Nie wiem co może być:( szukam, czytam, testuje i ciągle to samo :(

    Pokaż program i schemat.
  • REKLAMA
  • #7 11056741
    pawel_5
    Poziom 13  
    teraz działa poprawnie

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Wiesz co źle robiłem, w przerwaniu T0 robiłem __sleep(); zamiast w pętli głównej programu.


    Wyzwalanie sleep z INT nie działa poprawnie. W pętli głównej zrobiłem warunek jeśli jest zasilanie, wykonuje program, jeśli nie ma, idzie ciąć komara.
    Wydaje mi się, że różnica między zawieszaniem, a cyklicznym wchodzeniem na 5mA wynikała z tego, że do pomiaru prądu używam V640, który ma ograniczenie prądowe na danym zakresie. Jeśli miałem zakres 15uA a szpilki były 5mA to nic dziwnego, że się zawieszał.
    Wydaje się, że wszystko już działa poprawnie, szkoda tylko, że nie udało się wyzwalać sleep z INT. Może ktoś zrobił usypianie uP z przerwania?
  • Pomocny post
    #8 11057340
    dondu
    Moderator na urlopie...
    pawel_5 napisał:
    Wydaje się, że wszystko już działa poprawnie, szkoda tylko, że nie udało się wyzwalać sleep z INT. Może ktoś zrobił usypianie uP z przerwania?

    Przez wyzwalać sleep z INT rozumiesz wybudzać, czy coś innego?
    W jaki sposób wyzwalasz INT? Może pokasz schemat i program w tym zakresie.
    Wiesz także o tym, że trybie Power Down wyzwalanie tylko poziome - nie zboczem?
  • #9 11074399
    pawel_5
    Poziom 13  
    dondu napisał:
    Przez wyzwalać sleep z INT rozumiesz wybudzać, czy coś innego?
    - usypiać - przychodzi zbocze - przerwanie generuje SLEEP

    dondu napisał:
    W jaki sposób wyzwalasz INT? Może pokasz schemat i program w tym zakresie.
    zwykły tranzystor, który zwiera do masy PIN przy braku głównego zasilania

    dondu napisał:
    Wiesz także o tym, że trybie Power Down wyzwalanie tylko poziome - nie zboczem?
    - tak wiem:)

    Myślę, że nie jest dobrą praktyką wchodzenie w SLEEP w przerwaniu, dlatego zaniechałem tego pomysłu, chciałem dzięki temu osiągnąć bardzo szybkie przejście w sleep.
    Myślę, że pomimo tego, rozwiązałem to zagadnienie i układ spełnia moje wymagania.

    Dziękuję DONDU.
REKLAMA