Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATMEGA128A RTC w POWER DOWN MODE

pawel_5 29 Cze 2012 13:52 1480 8
  • #1 29 Cze 2012 13:52
    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ł

    0 8
  • Pomocny post
    #2 29 Cze 2012 15:53
    dondu
    Moderator Mikrokontrolery Projektowanie

    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ć.

    0
  • #3 29 Cze 2012 16:43
    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 :/

    0
  • #5 30 Cze 2012 09:29
    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 :(

    0
  • Pomocny post
    #6 30 Cze 2012 10:05
    dondu
    Moderator Mikrokontrolery Projektowanie

    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.

    0
  • #7 30 Cze 2012 12:54
    pawel_5
    Poziom 13  

    teraz działa poprawnie

    Kod: 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?

    0
  • Pomocny post
    #8 30 Cze 2012 13:24
    dondu
    Moderator Mikrokontrolery Projektowanie

    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?

    0
  • #9 05 Lip 2012 15:51
    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.

    0