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

ATmega + tryb u¶pienia - moje pytania

bestmlody 03 Lis 2009 15:05 3547 13
  • #1 03 Lis 2009 15:05
    bestmlody
    Poziom 14  

    Przeczytałem kilka postów na temat u¶pienia, przejrzałem datasheet'a od mojej ATmegi8 ale mam kilka pytań. Wiem, że funkcj± set_sleep_mode wybieram tryb oszczędzania, a funkcj± sleep_mode() po prostu go wł±czam.
    1. czy jest funkcja powracaj±ca procka do normalnej pracy,
    2. czy dobrze rozumiem tabele na str. 35, że przycisk wł±czaj±cy może być tylko na INT0, INT1.
    3. Płytka już jest gotowa i microswitch jest na innym wej¶ciu niż INT0, INT1, więc zostaje mi tylko tryb Idle, dobrze to rozumiem?
    Jak w takim razie zastosować, ten przycisk to wyprowadzenia ATmegi z u¶pienia?

    0 13
  • #2 03 Lis 2009 15:33
    94075
    Użytkownik usun±ł konto  
  • #3 03 Lis 2009 15:43
    wader_669
    Poziom 28  

    Ja sie bawilem do teraz 2 trybami.
    Jeden to powerdown, gdzie mozesz wyprorwadzic procka z uspienia int-ami.
    Drugie to powersave, gdzie mozesz wyprowadzic procka z uspienia int-ami i przerwaniami od timerwo, komparatora itp.

    0
  • #4 03 Lis 2009 15:44
    bestmlody
    Poziom 14  

    Moje urz±dzonko wykorzystuje ADC, mierzy rezystancje (napięcie) na potencjometrze i wy¶wietla to na 3 cyfrowym wy¶wietlaczu LED. Jest to miernik poziomu wody w zbiorniku. W momencie wci¶nięcia przycisku obudzę układ i wy¶wietli mi stan. Pozostanie wł±czony przez np. 5 min i po tym czasie znów go u¶pię. Ale zupełnie nie wiem jak się go budzi, nie wiem jak to ugryĽć...
    Jaki procesor? napisałem przecież....

    0
  • #5 03 Lis 2009 15:58
    94075
    Użytkownik usun±ł konto  
  • #6 03 Lis 2009 16:05
    bestmlody
    Poziom 14  

    no dobrze, jest to jakie¶ rozwi±zanie, to jak sie budzi tym timerem?

    0
  • #7 03 Lis 2009 16:05
    wader_669
    Poziom 28  

    Napisal jaki procesor atmega8, mniejsze z tym.
    No jak masz zajete wyjscia int na cos innego, to pozostaje ci to co kolega mowi, ale wtedy to tylko w trybie powersave a nie powerdown (gdzie mniej natezenia pobiera). Wszystko na to wychodzi, ze najlepiej by bylo to zrobic na intach.
    __________________________________________________________
    Ustawiasz timer na przerwanie co okreslony czas i przerwanie go budzi

    0
  • #8 03 Lis 2009 16:12
    94075
    Użytkownik usun±ł konto  
  • #9 03 Lis 2009 16:24
    bestmlody
    Poziom 14  

    w tym momencie wykorzystuje do multipleksowania timer1 czyli B (chyba), a mam wykorzystać pierwszy, czyli timer0 czyli A. W obsłudze tego przerwania nic ma nie być?

    0
  • #10 03 Lis 2009 16:45
    wader_669
    Poziom 28  

    jak nie osiagniesz idealnego czasu co ile ma sie budzic procek za pomoca dzielnika, to mozesz jeszcze w przerwaniu ustawid dokladniej co ile ma nastapic przepelnienie

    0
  • #11 03 Lis 2009 17:21
    bestmlody
    Poziom 14  

    nic nie rozumiem :( "troche" mnie to przerasta...
    "idealnego czasu" ?? to jak nastawię timer0 na 50Hz to nie będzie idealnie??
    A sk±d układ ma wiedzieć, że ma się wybudzić od timera0 a nie od timera1 odpowiedzialnego za multipeksowanie.

    0
  • #12 03 Lis 2009 17:46
    wader_669
    Poziom 28  

    aha, uzywasz juz timera do multipleksowania. To spoko jak jest wywolywanie przerwanie to wraca spoworotem do petli (tak jest przynajmniej w bascomie).

    Dodano po 28 [sekundy]:

    Dodaj do petli glownej tryb powersave i wytestuj!

    0
  • #13 03 Lis 2009 20:37
    bestmlody
    Poziom 14  

    niestety wył±czyło się moje urz±dzonko skutecznie, zaraz spróbuje z innymi trybami

    Dodano po 14 [minuty]:

    a więc wyniki badań sa następuj±ce: 13,2 mA w trybie IDLE i 13mA z wył±czonym oszczędzaniem. Można przyj±ć to samo. Wy¶wietlacz był wyjęty, więc nie miało wpływu jaka cyfra się wy¶wietla.
    Czy je¶li uruchomiłbym jakim¶ cudem tryb POWER_SAVE to różnica, będzie znaczna? Czy to ma sens?

    Dodano po 20 [minuty]:

    w trybie ADC Noise Reduction bierze 13,3mA, czyli żadnej oszczędno¶ci.

    Dodano po 35 [minuty]:

    w nocie katalogowej ATmegi8 na stronie 35 jest tabela i tam jest napisane, że obudzić go może TIMER2, ja do multipleksowania używam jednak timera1 kanał A, bo przerwanie mam ISR(TIMER1_COMPA_vect)
    No ale w tej samej nocie gdy przejdziemy do liczników nigdzie nie ma mowy o timerze2, cały czas w opisach jest timer0 i timer1, kanały A i B, pogubiłem się.

    Code:

    TCCR1B |= (1 << WGM12); // Ustawia timer1 w tryb CTC
    OCR1A = 5555; // Ustawia warto¶ć poż±dan± na 180Hz dla preskalera 1
    TCCR1B |= (1 << CS10);  // Ustawia timer z preskalerem Fcpu/1
    TIMSK |= (1 << OCIE1A); // Zezwolenie na przerwania dla CTC


    czy kto¶ mógłby mi wł±czyć, podać te 4 linijki dla timera2?

    Dodano po 1 [godziny] 18 [minuty]:

    Jak na razie wył±czam wy¶wietlacz funkcj± cli();
    całe urz±dzenie to pr±d ~80mA więc po 5min gdy się wył±czy wy¶wietlacz i mam 13mA to już duża różnica.

    0
  • #14 15 Lis 2009 15:40
    jezjacek
    Poziom 14  

    Mam int0 w stanie wysokim. Rozwarcie przycisku powoduje działanie układu (Atmega 8 wew 1MHz, zamek na kartę telefoniczn± z Elektrody). Czy mogę wprowadzić procesor w stan u¶pienia i czy będzie on wybudzany także rozwarciem przycisku? Czy oszczędzanie energii powoduje również zmniejszenie natężenia czy (i) napięcia płyn±cego przez port? W stanie spoczynku układ pobiera 8 mA. Czyli 1 mA procesor, 7 mA port. Je¶li w stanie u¶pienia ma też płyn±ć te 7 mA to nie ma to sensu.

    0