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.

RTC i tryb Power Down w Atmega8 [Bascom]

bipolunipol 31 Sie 2012 13:49 3957 29
  • #1 31 Sie 2012 13:49
    bipolunipol
    Poziom 19  

    Witam.
    W układzie licznik timer2 pracuje asynchronicznie - taktowany jest z kwarca zegarkowego. W Bascomie używam instrukcji RTC programowego.
    Czy mogę przy używaniu RTC usypiać procesor - uruchamiać tryb Powerdown?

    0 29
  • #3 31 Sie 2012 14:09
    lukasz_elektronika
    Poziom 13  

    Wprowadzić uC w tryb POWER_DOWN możesz zawsze, tylko jakie będą tego efekty,
    jak mówi datasheet:
    -zatrzymywany jest oscylator zewnętrzny
    - z trybu tego uC może zostać wybudzony poprzez zewnętrzny reset, reset od watchdoga oraz reset od układu Brown out detector,zewnętrzne przerwanie od INT0/INT1
    - Ten tryb uśpienia w zasadzie zatrzymuje wszystkich generowanych zegary, umożliwiające działanie modułów asynchronicznych

    0
  • #4 31 Sie 2012 14:12
    bipolunipol
    Poziom 19  

    bipolunipol napisał:
    Nie. Ale możesz użyć Power Save.

    Wg pomocy bascoma:

    Tryb Power Save jest dostępny tylko w kontrolerze AT90s8535

    (c) Zbigniew Gibek, 2002-2005 (c) MCS Electronics, 1999-2005

    A tryb IDLE?

    0
  • #5 31 Sie 2012 14:13
    lukasz_elektronika
    Poziom 13  

    bipolunipol napisał:
    bipolunipol napisał:
    Nie. Ale możesz użyć Power Save.

    Wg pomocy bascoma:

    Tryb Power Save jest dostępny tylko w kontrolerze AT90s8535

    (c) Zbigniew Gibek, 2002-2005 (c) MCS Electronics, 1999-2005

    A tryb IDLE?

    według noty katalogowej rownież w Atmega8

    0
  • #7 31 Sie 2012 14:17
    lukasz_elektronika
    Poziom 13  

    według angielskiego pliku pomocy do bascoma też :)

    Cytat:

    Action
    Put processor into power save mode.


    Syntax
    POWERSAVE


    Remarks
    The POWERSAVE mode is only available in the 8535, Mega8, Mega163.

    Most new chips have many options for Power down/Idle. It is advised to consult the datasheet to see if a better mode is available.


    See also
    IDLE, POWERDOWN


    Example
    Powersave


    ?

    0
  • #8 01 Wrz 2012 17:33
    bipolunipol
    Poziom 19  

    A czy tryb Idle można użyć bez obaw?

    0
  • #9 01 Wrz 2012 20:25
    lukasz_elektronika
    Poziom 13  

    Zachęcam do zapoznania sie z datasheetem dostępnym na stronie Atmela. Według niej w trybie idle zatrzymany zostaje zegar CPU, zegar Timerów działa nie przerwanie.

    0
  • #10 08 Wrz 2012 03:14
    bipolunipol
    Poziom 19  

    lukasz_elektronika napisał:
    Według niej w trybie idle zatrzymany zostaje zegar CPU, zegar Timerów działa nie przerwanie.

    Zatem nie będą występowały ŻADNE problemy z stabilnością zegara RTC, gdy:
    -w pętli głównej procesor będzie wprowadzany do trybu IDLE
    --w przerwaniu od TIMERA co 4ms odświeżane są wyświetlacze LED
    - Jest zgłaszane co przerwanie od licznika TIMER2 pracującego
    w trybie asynchronicznym
    Czy czas wybudzania procesora nie będzie zbyt długi?

    0
  • #11 08 Wrz 2012 06:08
    dondu
    Moderator Mikrokontrolery Projektowanie

    bipolunipol napisał:
    Czy czas wybudzania procesora nie będzie zbyt długi?

    W trybie IDLE wstrzymywany jest tylko CPU poprzez odcięcie sygnału zegarowego.

    Czytajmy datasheet'y napisał:
    Idle Mode
    When the SM2..0 bits are written to 000, the SLEEP instruction makes the MCU enter Idle mode, stopping the CPU but allowing SPI, USART, Analog Comparator, ADC, Two-wire Serial Interface, Timer/Counters, Watchdog, and the interrupt system to continue operating. This sleep mode basically halts clkCPU and clkFLASH, while allowing the other clocks to run.
    ...
    If an interrupt occurs when the MCU is in sleep mode, the interrupt execution response time is increased by four clock cycles.

    0
  • #12 08 Wrz 2012 15:43
    snnaap
    Poziom 25  

    bipolunipol napisał:
    lukasz_elektronika napisał:
    Według niej w trybie idle zatrzymany zostaje zegar CPU, zegar Timerów działa nie przerwanie.

    Zatem nie będą występowały ŻADNE problemy z stabilnością zegara RTC, gdy:
    -w pętli głównej procesor będzie wprowadzany do trybu IDLE
    --w przerwaniu od TIMERA co 4ms odświeżane są wyświetlacze LED
    - Jest zgłaszane co przerwanie od licznika TIMER2 pracującego
    w trybie asynchronicznym
    Czy czas wybudzania procesora nie będzie zbyt długi?


    Witam

    A opisz z wolna jaki jest algorytm pracy tego urządzenia.
    Co to jest w ogóle za urządzenie i czemu akurat chcesz używać tryby oszczędzania energii?

    0
  • #13 09 Wrz 2012 22:30
    bipolunipol
    Poziom 19  

    Jest to zegar zasilany z baterii - wyświetlacze załączane na krótki czas po naciśnięciu przycisku, by można było ujrzeć godzinę .

    W pętli głównej jest realizowana zamiana wartości w zmiennych bajtowych wskazujących godzinę na postać, którą mogę wyświetlić na wyświetlaczu LED. W przerwaniu od TIMER0 jest kod odpowiedzialny za multipleksowanie wyświetlaczy i wyświetlanie na nich odpowiednich wartości oraz za obsługę przycisków i kilku zewnętrznych elementów.

    A w zmiennych _sec, min i hour generowanych automatycznie przez kompilator jest zliczany czas - co sekundę jest inkrementowana zmienna _sec. Odpowiada za to TIMER2 w trybie asynchronicznym pracujący (podpięty kwarc zegarkowy)

    W tryb Idle procesor jest wprowadzany w pętli głównej (na jej końcu), po zamianie wartości w zmiennych wygenerowanych - _sec, _min, _hour do postaci na wyświetlacz LED.

    0
  • #14 10 Wrz 2012 09:35
    snnaap
    Poziom 25  

    To obawiam się, że tryb Idle nie da ci dużej oszczędności energii.
    Jakim napięciem zasilasz uK oraz jak masz skonfigurowany oscylator?
    W najlepszym przypadku (Vcc=3V i 1Mhz) w stanie uśpienia (tryb Idle) uK będzie pobierał ok 300uA.
    Przy tych samych założeniach w trybie Power-save uK będzie pobierał ok 10uA.

    0
  • #15 10 Wrz 2012 23:12
    bipolunipol
    Poziom 19  

    snnaap napisał:
    To obawiam się, że tryb Idle nie da ci dużej oszczędności energii.

    ok 3-4 mA oszczędzam, układ średnio pobiera prąd około 1.4mA (procesr co chwilę wybudzany).
    snnaap napisał:
    Jakim napięciem zasilasz uK oraz jak masz skonfigurowany oscylator?

    5V (nie mogę innym), 4MHz

    0
  • #16 11 Wrz 2012 10:42
    snnaap
    Poziom 25  

    Coś dużo te 1.4mA.
    Zastosowałeś się do wszystkich zaleceń z noty w sprawie oszczędzania energii?
    Komparator wyłączony, ADC, wszystkie nieużywane piny jako wejścia z wewnętrznym podciągnięciem?
    A dlaczego aż 4 MHz- procek nie wyrabia się przy 1Mhz?

    0
  • #17 11 Wrz 2012 12:29
    30402
    Użytkownik usunął konto  
  • #18 11 Wrz 2012 16:53
    bipolunipol
    Poziom 19  

    snnaap napisał:
    Komparator wyłączony, ADC
    snnaap napisał:
    Coś dużo te 1.4mA


    Komparator wyłączony, ale ADC cały czas pracuje.

    0
  • #19 12 Wrz 2012 00:05
    bipolunipol
    Poziom 19  

    snnaap napisał:
    dlaczego aż 4 MHz- procek nie wyrabia się przy 1Mhz?

    przy 4MHz szybciej wykona program i przejdzie do uśpienia - więc chyba naa to samo wyjdzie [przy 1MHz program wykona się 4 razy wolniej]. Ale spróbuję. ustawić 1MHz i po zakończeniu pomiarów przez ADC - Getadc=x, wyłączać przetwornik.

    0
  • #20 12 Wrz 2012 09:46
    dondu
    Moderator Mikrokontrolery Projektowanie

    bipolunipol napisał:
    przy 4MHz szybciej wykona program i przejdzie do uśpienia - więc chyba naa to samo wyjdzie [przy 1MHz program wykona się 4 razy wolniej]. Ale spróbuję. ustawić 1MHz i po zakończeniu pomiarów przez ADC - Getadc=x, wyłączać przetwornik.

    To nie takie proste :) Nie bierzesz pod uwagę źródła zasilania.
    Razem z mikrokontrolerem i programem stanowią nierozerwalną część: http://mikrokontrolery.blogspot.com/2011/01/bateria-zasila-mikrokontroler-czesc-1.html

    0
  • #21 12 Wrz 2012 19:43
    30402
    Użytkownik usunął konto  
  • #22 12 Wrz 2012 21:03
    dondu
    Moderator Mikrokontrolery Projektowanie

    Saabotaz napisał:
    Jeśli procesor obsługuje multipleksowanie wyświetlania i inne bzdety to nie nie ma czegoś takiego jak "szybciej wykona program" bo i tak musi pozostać w stanie działającym.

    Oj, zawsze znajdzie się moment, gdy można uśpić. Nie zawsze do najgłębszego snu, ale jednak - multipleksowanie wyświetlacza, to kupa wolnego czasu na sen :)

    Poza tym można usypiać głęboko gdy się tylko da, a w momencie ważnych zadań usypiać tylko do IDLE. To kwestia przemyślenia projektu i odpowiednio napisanego kodu. To wbrew pozorom nie jest trudne, ale trzeba wszystko co się da oprzeć o przerwania i skalkulować, czy warto się trudzić.

    0
  • #23 13 Wrz 2012 01:03
    bipolunipol
    Poziom 19  

    Saabotaz napisał:
    Jeśli procesor obsługuje multipleksowanie wyświetlania i inne bzdety to nie nie ma czegoś takiego jak "szybciej wykona program" bo i tak musi pozostać w stanie działającym.

    Gdzie mierzysz te 1,4mA? Już za stabilizatorem czy przed? Daj jakiś schemat bo wróżka Jadwiga bez tego nic więcej nie powie.
    Zaraz się okaże że włożyłeś gdzieś dzielnik R do pomiaru napięcia baterii i on ci żre swoje mA.

    1. Procesor obsługuje wyświetlacze w procedurze wywoływanej po naciśnięciu przycisku - rzadko.
    2. W czasie normalnej pracy TIMER2 wybudza procesor, licznik sekund jest zwiększany. Po wybudzeniu wykonywany jest też CIĄG INSTRUKCJI - pomiar wartości przez ADC oraz OPERACJE MATEMATYCZNE na tych wartościach zmierzonych, po czym procesor jest usypiany.
    Saabotaz napisał:
    nie ma czegoś takiego jak "szybciej wykona program"

    jest coś takiego - szybciej wykona ciąg operacji matematycznych i się uśpi.
    Saabotaz napisał:
    Gdzie mierzysz te 1,4mA? Już za stabilizatorem czy przed?

    Nie ma stabilizatora - układ zasilany wprost z baterii.
    Saabotaz napisał:
    Zaraz się okaże że włożyłeś gdzieś dzielnik R do pomiaru napięcia baterii i on ci żre swoje mA.

    Nic takiego nie ma. 0.1mA pobiera inny układ, więc ten prąd można odjąć.

    1.4mA pobiera przy cały czas włączonym ADC. Spróbuję wyłączyć ten przetwornik i zmierzę wartość prądu. Tylko nie wiem, czy gdy procesor nagle będzie po wybudzeniu potrzebował zmierzyć napięcie, to czy wystarczy dać kilka NOP-ów po włączeniu przetwornika - przed wykonaniem pomiarów? Czy jest to zbędne / jakie opóźnienie minimalne jest zalecane(stany nieustalone po załączeniu zasilania przetwornika itp...)?

    0
  • #24 13 Wrz 2012 11:20
    dondu
    Moderator Mikrokontrolery Projektowanie

    bipolunipol napisał:
    ...szybciej wykona ciąg operacji matematycznych i się uśpi.

    Widzę, że nie przeczytałeś trzy częściowego artykułu którego link podałem Ci wyżej.

    0
  • #25 13 Wrz 2012 16:50
    bipolunipol
    Poziom 19  

    Przeczytałem - lepiej nie pobierać gwałtownie dużego prądu - zmienię na 1000000Hz

    0
  • #26 13 Wrz 2012 16:59
    dondu
    Moderator Mikrokontrolery Projektowanie

    A tak naprawę trzeba niestety testować, bo znacznie zależy to od charakterystyki źródła zasilania.

    0
  • #27 15 Wrz 2012 01:59
    bipolunipol
    Poziom 19  

    Udało mi się zejśc do Iśr= 1mA wyłączając na czas uśpienia przetwornik i zmniejszając częstotliwość oscylatora. Da się jeszcze niżej zejść
    kod

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #28 15 Wrz 2012 08:12
    dondu
    Moderator Mikrokontrolery Projektowanie

    Według datasheet sam mikrokontroler w IDLE powinien mieć mniej niż 0,6mA przy 5V u 1MHz.
    Nie piszesz czy mierzysz tylko mikrokontroler, czy całe urządzenie więc sam musisz to ocenić.

    A zamiast pytać sprawdzaj na wykresach w datasheet dział: Electrical Characteristics

    0
  • #29 15 Wrz 2012 10:04
    bipolunipol
    Poziom 19  

    Sam procesor. Jest to pobór prądu średni- procesor wybudza się co 4 ms, więc chyba jest ok.

    0
  • #30 15 Wrz 2012 10:57
    dondu
    Moderator Mikrokontrolery Projektowanie

    W swoim programie wyłącz timer wybudzający, a resztę pozostaw tak, by mikrokontroler wszedł w IDLE bez wybudzania i wtedy dokonaj pomiaru.

    0
  Szukaj w 5mln produktów