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.

atmega8 i wybudzanie ze stanu idle/powerdown

szeryfff 21 Lut 2008 21:26 2383 11
  • #1 21 Lut 2008 21:26
    szeryfff
    Poziom 24  

    Witam!
    Program pisany w bascom'ie. Urzadzenie bedzie podlaczone w aucie. Ogolne zaloznie jest takie, zeby procek budzil sie po przekreceniu stacyjki, a podczas testow okazalo sie ze ciagle podanie stanu niskiego na intX nie pozwala na prace procka. I stad moje pytanie: czy bawic sie w jakis uklad, ktory po przekreceniu stacyjki poda impuls na intX, czy starac sie przerobic program zeby budzenie po przekreceniu stacyjki nie bylo potrzebne?
    Pozdrawiam!

    Przeniosłem z Programowanie Ogólne - krzychoocpp

    0 11
  • #2 21 Lut 2008 22:16
    Pawel_Piatek
    Poziom 10  

    Witam.
    Takie małe pytanko odnośnie robienia układu który po przekręceniu kluczyka w stacyjce poda impuls zamiast ciągłego poziomu niskiego... Po co robić osobny układ? Generalnie to ATmegi mają taki układ wbudowany, wystarczy tylko wybrać opcję wyzwalania zboczem (do wyboru narastające i opadające) wpisując odpowiednią wartość do rejestru MCUCR.
    Pozdrawiam.

    0
  • #3 21 Lut 2008 22:33
    szeryfff
    Poziom 24  

    Masz racje, ale wyzwalanie zboczem dziala tylko z idle (w sumie nie wiem jakby to zadzialo w moim przypadku, ale mozna pokombinowac), natomiast w przypadku powerdown procka obudzi tylko stan niski. I na tym bardziej mi zalezy, bo wtedy jest znacznie mniejsze zuzycie pradu :)

    Dodano po 12 [minuty]:

    Hm... to juz nawet nie chodzi o te zbocza, po prostu jak na intX mam caly czas stan niski, to procek nie pracuje. Wiec pozostaje tylko jakis uklad, albo zmiana kodu.
    Co radzicie?

    0
  • #4 21 Lut 2008 23:28
    Dr_DEAD
    Poziom 28  

    Jak INTX ma cały czas stan niski to przerwanie jest cały czas wywoływane, a procesor wykonuje jedną instrukcję pentli głównej na jedną obsługę przerwania - czyli działa tylko że bardzo wolno.

    A rozwiązanie Twojego problemu jest proste. Gdy przyjdzie przerwanie od INTX w stanie niskim to przełączasz to budzisz procesora i przełączasz to przerwanie na stan wysoki i już kolejne tak szybko nie przyjdzie. Chyba że ktoś wyłączy zapłon, wtedy dostaniesz przerwanie od stanu wysokiego na INTX i w obsłudze tego przerwania przełączasz przerwanie na stan niski i usypiasz procka.

    0
  • #5 22 Lut 2008 00:04
    szeryfff
    Poziom 24  

    Pewnie madrze piszesz, ale nie za bardzo Cie zrozumialem :) Moglbys napisac to troszke jasniej?
    Dodam tylko ze po przekreceniu stacyjki na intX jest stan niski tak dlugo, az nie wylacze auta,a chcialbym zeby przerwani wykonalo sie tylko raz, tzn. obudzilo procka.
    Pozdrawiam

    0
  • #6 22 Lut 2008 09:02
    Dr_DEAD
    Poziom 28  

    No to może krok po kroczku:
    Cały mój poprzedni post opiera sie na założeniu, że przerwanie może konfigurować samo siebie.
    Czyli na przykład, gdy jesteś w obsłudze przerwania od INT0, to możesz wyłączyć przerwanie INT0. Nstępnie wychodzisz z obsługi przrwania INT0 i wiesz że już ono sie nie obsłuży następnym razem bo jest wyłączone.

    0
  • #7 22 Lut 2008 09:16
    snow
    Poziom 28  

    Tak się zastanawiam po co tutaj w ogóle wchodzić w stan powerdown skoro można podłączyć całe zasilanie procesora pod sygnał ze stacyjki? Wtedy po przekręceniu kluczyka będzie się procesor uruchamiał. Ograniczy to jeszcze bardziej zużycie prądu. Chyba że jeszcze ma być budzenie go innym sygnałem niż przekręcenie stacyjki.

    0
  • #8 22 Lut 2008 11:10
    Dr_DEAD
    Poziom 28  

    Usypianie ma tą zaletę, że nie traci się zawrtości ram aż do wymiany akumulatora a co za tym idzie nie trzeba wykorzystywać EEPROM'u.

    0
  • #9 24 Lut 2008 18:16
    szeryfff
    Poziom 24  

    Witam po chwilowej przerwie. Korzystam z usypiania, bo przy wylaczonej stacyjce tez sie cos dzieje :)
    Mam jeszcze pytanie do Dr_DEAD....
    Czy jezeli wykorzystuje intX do wybudzania procka, to czy moge uzywac tego wejscia normalnie w kodzie? Bo chcialbym jeszcze w kodzie sprawdzac czy stacyjkla jest wlaczona, i jezeli jest to ma cos robic, a jezeli to nie ma usypiac, i znowu budzic przy wlaczeniu stacyjki.
    I nastepne moje pytanie... jezeli w obsludze przerwania wylacze przerwanie, to czy normalnie bede mogl je jeszcze wlaczyc przed wylaczeniem stacyjki?

    0
  • #10 24 Lut 2008 18:28
    szymtro
    Poziom 30  

    A czy ty aby na pewno wiesz co robisz? Badałeś pobór prądu przez cały układ czy tylko bierzesz pod uwagę samego uC?

    Zrobiłem już kilka układów z avr do aut i podobnych i w ani jednym pobór prądu w stanie sleep nie był większy niż 4mA licząc całkowity z zasilania 12V.

    Popatrz jeszcze raz w dokumentację. M8 ma trzy tajmery z których każdy może wybudzić ze stanu sleep. Masz tylko ustawić mu sensowne prescale i przerwanie od ovf. I sprawdź sam jaki wpływ na pobór prądu ma 16 czy 64 przerwania na sekundę.

    W pętli głównej dajesz czytanie czego tam chcesz i na koniec sleep enable i sleep i już. Jak się obudzi zacznie od wykonania przerwania timera i następnie znowu skan pętli głównej.

    LDO i to dobre w takim układzie jest obowiązkiem.

    0
  • #11 24 Lut 2008 19:07
    Dr_DEAD
    Poziom 28  

    szeryfff napisał:

    Czy jezeli wykorzystuje intX do wybudzania procka, to czy moge uzywac tego wejscia normalnie w kodzie?

    Przeznaczenie pinu możesz zmieniać w każdej chwili działania programu. Ten sam pin może być wejściem, później wyjściem a na końcu przerwaniem.
    szeryfff napisał:

    I nastepne moje pytanie... jezeli w obsludze przerwania wylacze przerwanie, to czy normalnie bede mogl je jeszcze wlaczyc przed wylaczeniem stacyjki?

    Tak samo jak je wyłączyłeś możesz je włączyć.

    Dodano po 3 [minuty]:

    szymtro napisał:

    LDO i to dobre w takim układzie jest obowiązkiem.

    szymtro a po co nam LDO (Low Drop-Out) w takim układzie? Chyba nie ze względu na pobór prądu, bo zbieżność LDO z niskim poborem prądu to raczej przypadek.

    0
  • #12 24 Lut 2008 19:32
    szeryfff
    Poziom 24  

    Wydaje mi sie ze wiem co robie, badalem pobor prady, podczas normalnej pracy jest ok 14mA, podczas idle jest 7mA, a przy powerdown jest jest duzo ponizej 1mA.
    A jakbym chcial korzystac z timerow do wybudzania to bym skorzystal :) Nie mam wielkiego doswiadczenia w programowaniu, dlatego pytam o rozwiazanie mojego problemu.

    0