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

[attiny2313A] sleep mode i wybudzanie z użyciem przycisków. [C]

saikomiki 28 Wrz 2011 19:09 2532 5
REKLAMA
  • #1 9973067
    saikomiki
    Poziom 11  
    Witam, zrealizowałem program do pilota RC_5, który ma posłużyć do sterowania końcówką mocy (5 przycisków, vol+, vol-, wybór potencjometru L/R/oba na raz, ON/OFF i przycisk mute).

    Programik śmiga aż miło, nie ma w nim błędów, problem leży w poborze mocy. Pobór prądu ~9 mA przy napięciu 3,15[V] (dwie baterie AAA) z przybliżonego wyliczenia (założyłem pojemność ok. 1000mAh na baterię) daje mi niewiele więcej niż 9 dni działania. Stąd pojawiła się konieczność redukcji fclk (z 8MHz do 1Mhz, mniej nie dało radę, bo układ pracuje na wewnętrznym oscylatorze) i wprowadzenia jakiegoś sleep mode.

    moje pytanie: Jak i czy w ogóle da rade zrobić tak, by procek normalnie był uśpiony, a "budził się" tylko w przypadku naciśnięcia KTÓREGOKOLWIEK przycisku?

    Dodam, że przyciski mam podłączone do portu PD4.. PD0.

    w nocie katalogowej znalazłem zapis: "only an External Reset, a Watchdog Reset, Brown Out Reset, USI st. cond. interrupt, external interrupt, or a pin change interrupt can wake up the MCU.

    Na moje jedyną sensowną dla mnie rzeczą jest ten pin change intterupt, ale co to w ogóle jest i jak to użyć, bo ni cholerki nie mogę tego zakumać?
  • REKLAMA
  • Pomocny post
    #2 9973088
    tadzik85
    Poziom 38  
  • REKLAMA
  • #3 9973188
    saikomiki
    Poziom 11  
    zapomniałem napisać, że cały program mam napisany w C, i nic poza tym językiem nie kumam, a już w szczególności assemblera.

    Chyba nie do końca rozumiem, jak to ma działać (to co w linku).
    [attiny2313A] sleep mode i wybudzanie z użyciem przycisków. [C]

    napisane jest, że pull-up'y są załączone do PD2 i do PB3..0 (skonfigurowane jako wejścia).

    Skoro na obu jest stan wysoki, jak po przyciśnięciu przycisku te PD2 jest zerowane? wybaczcie, ale dalej nie kumam...
  • REKLAMA
  • Pomocny post
    #4 9973243
    tadzik85
    Poziom 38  
    Pytałeś o wybudzanie procesora, odpowiedz masz w linku dla przykładu klawiatury matrycowej. W ogóle lepiej zastosuj power-down A wybudzić możesz tylko stanem niskim przerwania int0.

    A jeśli chodzi o przerwania pin change warto zapoznać sie z rejestrami z tym związanymi a wszystko stanie się jasne. Chodzi o to ze przerwania zostaje wywołane, jeśli choć jeden pin z włączonych PCINT zmieni stan zostaje wywołane przerwanie jedno. Cała filozofia.
  • REKLAMA
  • Pomocny post
    #5 9973331
    mirekk36
    Poziom 42  
    Może poczytaj ten temat i podejrzyj jak tam coś takiego zrobiłem - może to cię natchnie ? ;)

    https://www.elektroda.pl/rtvforum/topic1139494.html

    Dodano po 1 [minuty]:

    aha i dodam że wcale nie musiałem redukować taktowania do 1MHz ;) jest moje ulubione 8MHz a pilot śmiga już wiele wiele miesięcy praktycznie nie zużywając "bakterii" ;)
  • #6 9973811
    saikomiki
    Poziom 11  
    kolego mirek, chciałbym wiedzieć (o ile można, bo widziałem, że kodu nie zabardzo mogłeś/chciałeś podać) czy ten sposób łączenia przycisków Twój działa tak, że PD2 (INT0) w czasie "odgadywania", który przycisk został wciśnięty jest utrzymywany w stanie "1", a piny PB6..1 mają wyłączone pull-up'y? To tak dla pewności, bo nadal z tym walczę i nie działczy.

    Póki co chyba nie rozumiem, jak działają te przerwania od INT0, poczytam dokładniej notę katalogową attiny, zobaczę co z tego wyjdzie.
REKLAMA