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.

Re: AVR-C Dydaktyczny kod: uśpienie / wybudzenie mikrokontrolera

yogi009 02 Wrz 2017 00:07 1296 16
  • #1 02 Wrz 2017 00:07
    yogi009
    Poziom 42  

    W celu własnej edukacji chciałbym spytać o jakiś dydaktyczny kod źródłowy w C powodujący wejście mikrokontrolerka w stan uśpienia, a potem jego wybudzenie (w reakcji np. na przytrzymanie microswitch'a przez 2 sekundy).

    Projekt zakłada wykorzystanie tego kodu do włączania/wyłączania lampki rowerowej z użyciem jakiegoś skrajnie prostego (i małego) mikrokontrolera (Attiny5, 9, 11 - coś w tym stylu). Jeden microswitch na wejściu, jeden LED na wyjściu (z wyjściami to już sobie poradzę), przycisk naciskany chwilowo pozwoli na zmianę trybu świecenia LED, a dłuższe przyciśnięcie ma właśnie uśpić/wybudzić mikrokontroler. Być może źle kombinuję, ale wersje L tych scalaczków mają bardzo mały pobór prądu w stanie uśpienia.

    0 16
  • Pomocny post
    #2 02 Wrz 2017 02:27
    2675900
    Użytkownik usunął konto  
  • #3 02 Wrz 2017 12:47
    yogi009
    Poziom 42  

    Ok, rozumiem. W sumie wystarczy mi tylko funkcja usypiania mikrokontrolera po dłuższym przytrzymaniu klawisza. Wybudzanie tak, jak piszesz. Jeszcze raz dopytam, czy ktoś może podrzucić jakieś proste, dydaktyczne przykłady kodu źródłowego?

    0
  • #4 02 Wrz 2017 13:25
    2675900
    Użytkownik usunął konto  
  • #6 02 Wrz 2017 14:25
    yogi009
    Poziom 42  

    Kolego Piotrus_999, to może jednak źle definiuję pewne sprawy. Zostawmy na chwilę to usypianie i jeszcze raz wróćmy do meritum. Mam lampkę rowerową, jeden switch, kilka zaprogramowanych sekwencji mrugania i być może sterowanie jasnością (sprzętowy PWM). Najprościej (czyli bez zgłębiania wiedzy z dziedziny AVR C) byłoby dodać stały włącznik zasilania (bateryjnego). Jednak wszelkie podstawowe lampki działają z jednym switchem, który zarówno włącza/wyłącza urządzenie, jak też daje możliwość zmiany trybu pracy. Czy dobrze rozumuję, że trzeba tu wykorzystać stan uśpienia mikrokontrolera? Jeżeli tak, to uśpienie (wyłączenie lampki) nie może się odbywać po dłuższym nieużywaniu klawisza. System musi oczekiwać na naciśnięcie switch'a analizując, czy jest to krótkie naciśnięcie, czy dłuższe przytrzymanie. Przynajmniej tak to widzę od strony logiki algorytmu. Włączenie także byłoby lepsze po dłuższym przytrzymaniu klawisza, pozwoli to wyeliminować niepożądane włączanie po krótkim, losowym przyciśnięciu mikroswitch'a.

    0
  • Pomocny post
    #7 02 Wrz 2017 15:42
    2675900
    Użytkownik usunął konto  
  • #8 02 Wrz 2017 20:48
    yogi009
    Poziom 42  

    Czyli procesor usypia, ale jego wyjścia cały czas trzymają ustawiony stan? No... to temat jest rozwiązany. Dziękuję bardzo za cenne wskazówki.

    0
  • Pomocny post
    #9 02 Wrz 2017 21:04
    2675900
    Użytkownik usunął konto  
  • Pomocny post
    #10 03 Wrz 2017 09:08
    22053
    Użytkownik usunął konto  
  • #11 03 Wrz 2017 15:36
    yogi009
    Poziom 42  

    Dzięki Kolego R-MIK. Na moim poziomie wiedzy w tym zakresie to najlepsza podpowiedź.

    0
  • Pomocny post
    #12 03 Wrz 2017 22:33
    dasej
    Poziom 30  

    Witam.

    Dołóż kwarc 32kHz i usypiaj procesor całkowicie.
    Ustawiając odpowiednio Timer będziesz go budziła np. co sekundę.
    W trakcie "pobudki" procesora sprawdzaj stan klawisza czy jest wciśnięty.
    Zatrzymując wszystkie zbędne peryferia w procesorze uda Ci się zjechać z poborem prądu poniżej 2uA.

    0
  • Pomocny post
    #13 03 Wrz 2017 23:02
    22053
    Użytkownik usunął konto  
  • Pomocny post
    #14 03 Wrz 2017 23:36
    dasej
    Poziom 30  

    Jeżeli procesor ma zadziałać na INT to musi chodzić główny zegar, czy się mylę.
    W trybie asynchronicznym wyłączamy wszystkie zasilania peryferiów łącznie z głównym zegarem.

    Jak już stosowałeś to rozwiązanie to podaj ( jestem ciekaw ) jaki uzyskałeś pobór prądu.

    Szczerze mówiąc to bez znaczenia czy procesor nic nie robi czy się budzi co sekundę,
    raczej przy zasilaniu bateryjnym chodzi o jak największą oszczędność energii.

    Z wyliczeń wychodzi że to co zrobiłem pozwoli procesorowi działać i nadawać informacje radiem (RFM69)
    przez minimum 5 lat z baterii LS14250 (1.2Ah 3.6V).
    Obecnie działa już rok i napięcie nadal jest nominalne.

    0
  • Pomocny post
    #15 04 Wrz 2017 07:43
    dondu
    Moderator Mikrokontrolery Projektowanie

    dasej napisał:
    Jeżeli procesor ma zadziałać na INT to musi chodzić główny zegar, czy się mylę.

    Nie musi, dlatego są to tak ważne przerwania:

    Re: AVR-C Dydaktyczny kod: uśpienie / wybudzenie mikrokontrolera


    dasej napisał:
    Jak już stosowałeś to rozwiązanie to podaj ( jestem ciekaw ) jaki uzyskałeś pobór prądu.

    Z włączonym timerem 2: http://mikrokontrolery.blogspot.com/2011/04/SmartPIP-decyzje-strategiczne.html
    i pomiary: http://mikrokontrolery.blogspot.com/2011/04/SmartPIP-Licznik-czasu-testowanie.html

    dasej napisał:
    Z wyliczeń wychodzi że to co zrobiłem pozwoli procesorowi działać i nadawać informacje radiem (RFM69) przez minimum 5 lat z baterii LS14250 (1.2Ah 3.6V).
    Obecnie działa już rok i napięcie nadal jest nominalne.

    Wybrałaś bardzo dobrą baterię, ale należy pamiętać o:

    Cytat:
    Maximum recommended continuous current 35 mA
    (Higher currents are possible, consult Saft)

    co być może w Twoim projekcie nie ma znaczenia.


    yogi009 napisał:
    Ok, rozumiem. W sumie wystarczy mi tylko funkcja usypiania mikrokontrolera po dłuższym przytrzymaniu klawisza. Wybudzanie tak, jak piszesz. Jeszcze raz dopytam, czy ktoś może podrzucić jakieś proste, dydaktyczne przykłady kodu źródłowego?

    Proszę bardzo: http://mikrokontrolery.blogspot.com/2011/04/S...PIP-elektroniczny-dreczyciel-spis-tresci.html

    Przeczytaj także te 3 artykuły: http://mikrokontrolery.blogspot.com/2011/01/bateria-zasila-mikrokontroler-czesc-1.html

    Watchdog, to także dobre rozwiązanie w niektórych przypadkach.

    0
  • #16 04 Wrz 2017 10:58
    yogi009
    Poziom 42  

    Zacny materiał i - jak widzę - systemowe podejście do tematu. Wielkie dzięki.

    0
  • #17 04 Wrz 2017 11:15
    22053
    Użytkownik usunął konto