Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
NOVATEK-ELECTRO POLSKA SP. Z O.O.NOVATEK-ELECTRO POLSKA SP. Z O.O.
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Bascom - tryb powerdown. Obniżenie poboru prądu.

15 Aug 2012 16:53 4266 28
  • Level 19  
    Witam.
    Mam następujące pytania:

    1. Po użyciu w kodzie (Bascom) polecenia Powerdown procesor przechodzi w tryb uśpienia. Aby go wybudzić, wywołuję zewnętrzne przerwanie np. INT0. Czy procesor wtedy kontynuuje wykonywanie dalszych rozkazów, z miejsca gdzie został uśpiony?

    Przykład:
    czy program będzie po wybudzeniu wykonywany z miejsca program / m2?

    Code:

    Do
    //program /m1
    Powerdown
    // program /m2
    .
    .
    .
    Loop
    End


    2. W jaki sposób można dodatkowo obniżyć do minimum pobór prądu przez mikroprocesor Atmega8? Ustawiłem niską częstotliwość taktowania, program jest przemyślany. Czy wewnętrzne struktury w procesorze, takie jak nieużywany przetwornik, komparator itp trzeba w programie wyłączać (nie są w nim używane), czy Bascom robi to automatycznie gdy nie odwołują się do nich żadne polecenia?
  • NOVATEK-ELECTRO POLSKA SP. Z O.O.NOVATEK-ELECTRO POLSKA SP. Z O.O.
  • Helpful post
    User removed account  
  • NOVATEK-ELECTRO POLSKA SP. Z O.O.NOVATEK-ELECTRO POLSKA SP. Z O.O.
  • Level 19  
    Zastosowałem się do tych wskazówek i pobór prądu wynosi około 1mikro Amper. Zapewniłem odpowiednią filtrację zasilania, AVCC i AGND zostały też podłączone do zasilania. Wszystkie końcówki skonfigurowałem jako wyjścia podczepione do masy z wyjątkiem pinów portu C. Tam przy jakiejkolwiek konfiguracji innej niż piny wejściowe wiszące w powietrzu, pobór prądu wzrastał gwałtownie do około 1mA. Oczywiście, DO TYCH PORTÓW NIE SĄ PODŁĄCZONE ŻADNE UKŁADY/ELEMENTY.
    Wszystko działa dobrze, występuje tylko pewien problem. Procesor co pewien czas się zawiesza - nie reaguje na zewnętrzne przerwanie z INT0. Co może być tego przyczyną?
    Dodam, że kiedyś (dawno temu) przez pomyłkę na wyjściach portu C lub D tego procesora zostały ustawione stany niskie (port wy) - przy czym piny były podłączone bezpośrednio do VCC - przez co procesor się trochę nagrzał. Taki stan trwał przez 10 minut, procesor poprawnie działa oprócz tego co wyżej napisałem.

    Dodam też, że procesor Atmega 8 zasilany jest z baterii AA x 2 - napięcie wynosi około 3.28V. Procesor po naciśnięciu przycisku, generuje impulsy sterujące diodą IR. W czasie generacji, napięcie spada o 0.2V. Czy jest możliwe, że jest wtedy za niskie do tego egzemplarza?

    Dodam, że procesor taktowany jest z wewnętrznego generatora o f=1MHz.


    kod:
    Code: basic4gl
    Log in, to see the code


    Schemat: Bascom - tryb powerdown. Obniżenie poboru prądu.

    INFORMACJA: NA SCHEMACIE JEST BŁĄD: NIE JEST PODŁĄCZONE ZASILANIE DO BRAMEK. BLISKO UKŁADU SCALONEGO JEST KONDENSATOR 100NF.


    Co może byc tego przyczyną?

    Dodano po 34 [minuty]:

    Po zawieszeniu procesora pomaga sprzętowy reset.
  • Helpful post
    Level 43  
    Saabotaz wrote:

    4) Przed wejściem w powerdown ustaw piny jako wejścia (wszędzie tam gdzie to możliwe), procesor nie będzie niepotrzebnie "wysyłał" napięcia na zewnątrz

    Wcale nie. "Wysyłanie" napięcia nie powoduje strat mocy. W końcu to samo napięcie.
    Z kolei skonfigurowanie wejść jako piny wejściowe (żeby nie "wysyłały" napięcia :D) owszem pobiera prąd. A to z powodu pływania napięcia na pinach ustawionych jako Hi-Z. Napięcia inne niż GND/VCC na pinach powodują przepływ prądu przez bufory wejściowe.
    Zatem piny należy ustawić jako wyjściowe, o ile to możliwe. A jak niemożliwe to jako wejścia ale z podciąganiem/ściąganiem.

    bipolunipol wrote:
    Wszystkie końcówki skonfigurowałem jako wyjścia podczepione do masy z wyjątkiem pinów portu C.

    Ale poza pinem PotrB.1 chyba?
    A co do portu C to dziwna sprawa.
  • Helpful post
    VIP Meritorious for electroda.pl
    Ogólnie jeśli procesor Ci się przysmażył to sobie daj z nim moim zdaniem spokój - może mieć różne niespodzianki.
  • Level 19  
    Spróbowałem odpalić ten program na 3 nowych procesorach atmega8, ale nie działa w przeciwieństwie do tego uszkodzonego - nawet dioda Ir się nie zapala. Fuse-bity są nastawione identycznie. Co jest nie tak z programem?

    Dodano po 6 [minuty]:

    A gdy usunę polecenie powerdown to wszystko pracuje ok. Dlaczego?
  • Helpful post
    User removed account  
  • VIP Meritorious for electroda.pl
    To był cud że ten program działał... Taka kobyła w przerwaniu? W dodatku jeszcze to Disable INT0 wewnątrz samego przerwania INT0 (w Bascomie takie operacje === problemy). Dalej nie Stop Ac, ale chyba miałeś na myśli Config ACI = Off.
    Ogólnie powinno to raczej wyglądać tak:
    Code:

    (...)
    Enable INT0
    Do
    Powerdown
    'tu sprawdzamy te przyciski, który wciśnięty i nadajemy rc5
    Loop
  • Helpful post
    User removed account  
  • VIP Meritorious for electroda.pl
    Niestety jeśli INT nie będzie skonfigurowany na aktywowanie stanem (niskim lub wysokim) to niestety aktywowanie zboczem (z tego co pamiętam) nie umożliwi wybudzenia procesora.
    Powinieneś tak czy inaczej to nadawanie dać do pętli głównej i np. zrobić to tak:
    Code:

    (...)
    Do
    Enable INT0
    Powerdown
    DISisable INT0
    'tu sprawdzamy te przyciski, który wciśnięty i nadajemy rc5
    Loop


    PS. Nie zna Kolega składni CONFIG PORTB = INPUT zamiast konfigurowania 8 razy poszczególnych pinów?
  • Helpful post
    User removed account  
  • Helpful post
    VIP Meritorious for electroda.pl
    Co do nadawania RC5 to ten rozrzut czasowy nie jest aż taki, żeby wyjść poza zakres tolerancji raczej, a z przysiadaniem napięcia to niech autor pokaże schemat - nie wiadomo czy i jaki wzmacniacz siedzi między procesorem i diodą IR.
    Niestety moim zdaniem program jest zły, bo w przerwaniu (z tego co kiedyś ostro testowałem) nie ma sensu wyłączać samego siebie, gdyż ustawienie flagi i tak blokuje kolejne wystąpienia przerwania do momentu zakończenia jego obsługi. Za to takie operacje podczas moich testów (TYLKO PRZERWANIA, były tylko przerwania i miganie ledami) prowadziły czasem do dziwnych efektów.
    Dalej obstaję, że lepszym rozwiązaniem byłoby przerzucenie tego całego sedna programu do pętli głównej, a przerwanie wykorzystywać tylko do budzenia kości.
  • Level 19  
    piotrva wrote:
    Dalej nie Stop Ac, ale chyba miałeś na myśli Config ACI = Off.

    Według pomocy Bascoma, to polecenie wyłącza komparator w uP.
    Saabotaz wrote:
    Ustawiłeś nowym procesorom BODLEVEL na 2.7V (czy jakoś tak) i BDOEN = enable?

    Nie. Spróbuję ustawić.
    Saabotaz wrote:
    Disable INT0 w przerwaniu nic złego nie zrobi.
    piotrva wrote:
    W dodatku jeszcze to Disable INT0 wewnątrz samego przerwania INT0 (w Bascomie takie operacje === problemy).

    Raczej nigdy takich problemów nie miałem - w książce Bascom M.Wiązani takie wstawki są w przerwaniach często spotykane.
    piotrva wrote:
    Co do nadawania RC5 to ten rozrzut czasowy nie jest aż taki, żeby wyjść poza zakres tolerancji raczej, a z przysiadaniem napięcia to niech autor pokaże schemat - nie wiadomo czy i jaki wzmacniacz siedzi między procesorem i diodą IR.

    Schemat jest w moim 2 poście. Jeżeli procesor się "zawiesza" to żadne ramki danych nie są wysyłane - przez diodę nie przepływa prąd i nie świeci (sprawdzone kamerą) - tranzystor jest zatkany.
    Saabotaz wrote:
    To że baterie dają ze 3,2V to nie znaczy że tyle jest podczas włączonej LED IR, bo napięcie może przysiadać.

    Tak jak napisałem wcześniej - w czasie nadawania napięcie spada max. o 0.2-0.3V. Baterie nowe.

    piotrva wrote:
    PS. Nie zna Kolega składni CONFIG PORTB = INPUT zamiast konfigurowania 8 razy poszczególnych pinów?

    Znam, ale ja tam wole tak konfigurować porty :D
    Saabotaz wrote:
    ) Jesli procesor nie chce czasem wyjść z powerdown to zrób test - odepnij wyjście bramki od int, ręcznie kabelkiem wymuś stan niski na int i zobacz czy procesor wystartuje

    Próbowałem - to samo.
    piotrva wrote:
    Powinieneś tak czy inaczej to nadawanie dać do pętli głównej i np. zrobić to tak:
    Kod:

    (...)
    Do
    Enable INT0
    Powerdown
    DISisable INT0
    'tu sprawdzamy te przyciski, który wciśnięty i nadajemy rc5
    Loop


    Próbowałem w taki sposób, i niestety to samo.

    ----------------------------------------------------------
    Informacja:
    Jeżeli wywalę polecenie Powerdown to układ zawsze działa prawidłowo - niezależnie od użytego egzemplarza procesora ATMEGA8.
    ----------------------------------------------------------

    piotrva wrote:
    Dalej obstaję, że lepszym rozwiązaniem byłoby przerzucenie tego całego sedna programu do pętli głównej, a przerwanie wykorzystywać tylko do budzenia kości.

    Próbowałem, jak pisałem. Program działa gdy nie ma polecenia Powerdown.

    Dołożyłem dodatkowo kondensatory tłumiące drgania styków przy przyciskach - bez skutku.

    Saabotaz wrote:
    Nadawanie RC5 też nie może się rozjechać czasowo. Wewnętrzny generator RC też ma swój rozrzut i to inny w każdej sztuce procesora.


    Bez Polecenia POWERDOWN w programie, układ niezależnie od egz. procesora działa dobrze i rozrzut jest na tyle mały, że bez problemu komendy rozpoznaje TV.

    Czemu zatem tak jest, że gdy dołączę do programu polecenie POWERDOWN - procesor "wariuje"?

    Dodano po 8 [minuty]:

    Aktualny kod:

    Code: basic4gl
    Log in, to see the code


    Dodano po 3 [minuty]:

    piotrva wrote:
    Niestety moim zdaniem program jest zły, bo w przerwaniu (z tego co kiedyś ostro testowałem) nie ma sensu wyłączać samego siebie, gdyż ustawienie flagi i tak blokuje kolejne wystąpienia przerwania do momentu zakończenia jego obsługi. Za to takie operacje podczas moich testów (TYLKO PRZERWANIA, były tylko przerwania i miganie ledami) prowadziły czasem do dziwnych efektów.


    Pytanie dodatkowe:
    Czy jeżeli zostaje wywołane przerwanie np INT0 - to po jego wywołaniu jest wyłączany tylko globalny system przerwań, a po jego ukończeniu - włączany?
  • User removed account  
  • Level 19  
    Saabotaz wrote:
    w twoim ostatnim programie w przerwaniu wpisz: Disable Int0

    Tak yrobiem, dalej procesora nie można obudzić. Gdy usunę komendę Powerdown wszystko działa ok.

    Dodano po 3 [godziny] 51 [minuty]:

    Już nie mam pojęcia co może być nie tak. Może jest to wina kompilatora - 2.0.5.0?
    Mam pytanie - czy ktoś za np. 100 punktów mógłby przepisać ten prosty kod do języka C i w jego kompilatorze skompilować taki kod do postaci hex lub bin? Jeżeli kod będzie pracował dobrze - osoba otrzyma 100 punktów. Oczywiście powinno być zapewnione jak najniższe zużycie energii. Schemat urządzenia wcześniej podałem.
  • User removed account  
  • Level 19  
    Czy jest możliwe że zasilanie procesora napięciem trochę wyższym niż 3 V - 3.2V może powodować problemy z jego wybudzaniem?

    Dodano po 5 [minuty]:

    Wersja procesora:ATMEGA8A-PU
  • User removed account  
  • Level 19  
    Saabotaz wrote:
    Wciąż nie wiem czy ustawiłeś BODLEVEL na 2,7V i czy BDOEN = enable. Racz to sprawdzić.


    Przy ustawionym BODEN i BODLEVEL - układ pobiera prawie 1,2mA prądu - zbyt dużo.

    Dodano po 41 [sekundy]:

    Teoretycznie według dokumentacji ta wersja procesora pracuje od napięcia 2.7V.
    Wgrałem ten kod i układ pracuje OK, zawiesza się bardzo rzadko - należy wtedy odłączyć zasilanie od procesora i ponownie je włączyć . Usunąłem dodatkowo kondensator 100mikroF (schemat)- przez to, że ładujący się kondensator powodował stopniowe narastanie napięcia przez dużą rezystancję wewnętrzną baterii. Dodałem też kondensator z podciągniętego pinu reset do masy - 100n.
    Code: basic4gl
    Log in, to see the code


    Tylko zastanawia mnie, dlaczego układ się zawiesza?
    Widocznie albo jest to problem z niskim napięciem - sprawdzę, lub kiepskim Bascomem (dziwne problemy). Najlepiej chyba przesiąść się na C. Lub wadliwymi procesorami, ale raczej wątpię.
  • User removed account  
  • VIP Meritorious for electroda.pl
    Naukę C polecam - nie będziesz musiał walczyć z Bascomem. Polecam książki http://Atnel.pl w pierwszej masz nawet projekt takiego energooszczednego pilota rc5 na kości attiny2313. Poza tym czemu przerwanie generujesz takimi bramkami? Nie wystarczyłoby 4x 1n4148?
  • Level 19  
    piotrva wrote:
    Poza tym czemu przerwanie generujesz takimi bramkami? Nie wystarczyłoby 4x 1n4148?

    No niby można, ale niech już zostanie jak jest.
    Saabotaz wrote:
    1) Teoretycznie według dokumentacji na niskie napięcia są procesory z literką L. Przetestuj swój układ na 5V. To że ci teraz działa to nie gwarantuje że działa poprawnie.
    2) Na początku Portd.2 = 1 zamień na Portd.2 = 0, nie zrobiłeś tego i masz nadzieję że stan domyślny dla PD2 będzie 0, a tak być nie musi
    3) Bez ustawionych BDOEN/LEVEL to TY masz zagwarantować poprawny reset i zabezpieczenie przed zbyt niskim napięciem. Niemożliwe że to żre 1,2mA

    Spróbuję sprawdzić.
  • Level 19  
    • Operating Voltages
    – 2.7V - 5.5V (ATmega8L)
    – 4.5V - 5.5V (ATmega8)


    Pewnie dlatego procesor działał nieprawidłowo, ponieważ napięcie dla wersji normalnej było za niskie - powinno wynosić min. 4.5V - u mnie było prawie 1.5V niższe.
  • Level 26  
    Zmień w ogóle koncepcję na prawidłową:
    - połączone końcówki microswitchy nie do masy tylko do INT0,
    - po starcie programu porty microswitchy jako wyjścia ze stanem 0 a INT0 jako wejście podciaganiem, potem usypiamy procek i czekamy na przerwanie INT0 wyzwolone stanem niskim - LOW LEVEL,
    - po wejściu do przerwania port INT0 jako wyjście ze stanem 0 a porty microswitchy jako wejścia z podciąganiem -> to umożliwi odczyt który microswitch został wciśnięty,
    - wysyłamy wtedy, w przerwaniu, rozkaz RC5 i powracamy do domyślnym ustawień portów,
    - wychodzimy z przerwania,
    - przechodzimy do powerdown (w pętli głównej) która sprowadza się do:

    Code: basic4gl
    Log in, to see the code


    TYLE! robiw
  • Level 16  
    Pozwolę się przyłączyć do tematu. Jeśli używam przycisku do wybudzania z powerdown to czy powinienem jeśli ustawiam stan niski jako reakcję (lov lewel) używać kondensatora i rezystora w celu wyeliminowania drgań styków czy jest to bez znaczenia.
  • VIP Meritorious for electroda.pl
    Zależy co ten przycisk jeszcze ma robić. Jeśli ma potem pełnić jakieś funkcje to jeśli masz programową eliminację drgań styków to nie jest to konieczne. Ale zależy to od konkretnej aplikacji.
  • Level 16  
    Zasadniczo przycisk ma wybudzać z powerdown a potem normalnie ma służyć jako przycisk funkcyjny z programową eliminacją drgań styków to znaczy czeka on 20ms.