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

[ATtiny44]Po wyjściu z power-down nie działa PWM

zbuffer 24 Sty 2012 20:53 1645 13
  • #1 10443705
    zbuffer
    Poziom 10  
    Witam!

    Mam dość dziwny problem. Buduję prostego pilota do wyzwalania migawki aparatu w odstępach czasowych, z użyciem podczerwieni.
    Pilot działa prawidłowo dopóki nie uruchomię trybu power-down. Używam ATtiny44. Nieprawidłowość działania polega na tym, że wszystko wygląda tak samo jak przed power-down ale migawka nie jest wyzwalana.
    Z tego co widzę problem leży w PWMie, który zrobiony jest na Timerze 0 w trybie CTC z przełączaniem wyjścia. Służy on oczywiście do tworzenia sygnału nośnego o częstotliwości 38.4 kHz (taka akurat jest w pilotach Nikona). Otóż po zmierzeniu multimetrem okazało się, że bez użycia trybu power-down sygnał prostokątny jest prawidłowo generowany (38.38 kHz), natomiast po wyjściu z trybu power-down na nóżce dzieją się jakieś dziwne rzeczy....ciężko nawet powiedzieć czy nóżka się przełącza czy miernik pokazuje jakieś zakłócenia bo częstotliwości skaczą i są bardzo niskie (kilkaset herców). Różnicy nie widać na gołe oko bo sekwencje impulsów są generowane tak jak normalnie i najwidoczniej stan nóżki musi się zmieniać na wysoki.

    Załączam kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Liczę na jakieś pomysły bo już próbowałem wszystkiego co mi przyszło do głowy:/

    Pozdrawiam
  • #2 10445243
    n6210
    Poziom 29  
    Tak na szybko - może po wyjściu ze sleep zaprogramuj timer i (ewentualnie port) ponownie (tak jak przy initializacji na początku kodu).
  • #3 10445416
    zbuffer
    Poziom 10  
    Próbowałem. Zrobiłem to nawet teraz drugi raz. Nic się nie zmieniło :/
    Jak w kodzie jest linijka sleep_cpu() to nie działa, jak jej nie ma wszystko jest ok...
  • #4 10445459
    excray
    Poziom 41  
    Spróbuj wyzerować preskaler dla timera. Ma on swój oddzielny rejestr GTCCR.
  • #5 10445505
    zbuffer
    Poziom 10  
    Nie wiem o który prescaler Ci chodzi ale funckja, która uruchamia nadawanie impulsów PWM (pulseOn()) ustawia prescaler a funckja pulseOff() go zeruje. Poza tym na początku jest wyzerowany a robienie całego ustawienia sprzętu łącznie z tym zerowaniem po wyjściu z uśpienia nic nie zmienia.
    Jeśli natomiast chodzi o prescaler zegara systemowego to dodałem linijkę, która ustawia go na 0.
    Również nic się nie zmieniło.
  • #6 10445513
    excray
    Poziom 41  
    Nie. Chodzi mi o prescaler timerów. Sprawdź w datasheet rejestr GTCCR
  • #7 10445544
    zbuffer
    Poziom 10  
    Ok sprawdziłem - nic to nie dało...
  • #8 10446259
    Konto nie istnieje
    Konto nie istnieje  
  • #9 10449005
    zbuffer
    Poziom 10  
    Cały czas generowany jest nieprawidłowy sygnał. Zrobiłem teraz tak, że po prostu uruchamia się PWM. Po wyjściu z power-down. Jeżeli power-down jest w komentarzu to po prostu od razu włącza się PWM.
    Zmierzyłem dokładnie i wynik jest taki:
    Bez power-down częstotliwość prawidłowa 38.38 kHz.
    Po power-down częstotliwość niższa i mało stabilna ok. 30-32 kHz.
    Wygląda jakby się coś rozkalibrowywało w generatorze zegara...
    Używam kwarca 3.84 MHz.
  • #10 10449893
    kamyczek
    Poziom 38  
    Proszę wymienić kwarca może oscylator źle startuje . To by tłumaczyło problemy proszę sprawdzić ustawienia CKSEL . Te mikrokontrolery są na tyle stabilne na wewnętrznym oscylatorze RC że po kalibracji bez problemu pracuje nawet UART więc wywalił bym kwarca i przesiadł się na wewnętrzny układ RC
  • #11 10449994
    snnaap
    Poziom 25  
    The various choices for each clocking option is given in the following sections. When the CPU
    wakes up from Power-down the selected clock source is used to time the start-up, ensuring stable
    Oscillator operation before instruction execution starts.

    Jak masz ustawione CKSEL0 SUT1:0??

    PS. To są uroki wprowadzania uK w tryb Power Down
  • #12 10468681
    zbuffer
    Poziom 10  
    Przełączyłem sie na wewnętrzny oscylator RC i dobrałem wartość bajtu kalibracyjnego tak żeby częstotliwość była ok i wszystko działa. Nie ma żadnych problemów po wyjściu z power-down i okazało się dodatkowo, że wychodzi z niego dużo szybciej. Wygląda na to, że procesor miał problem z ustabilizowaniem zegara przy wyjściu z pd i po dłuższym czasie dawał za wygraną pozawalając na niestabilną pracę.
  • #13 10468755
    snnaap
    Poziom 25  
    zbuffer napisał:
    Przełączyłem sie na wewnętrzny oscylator RC i dobrałem wartość bajtu kalibracyjnego tak żeby częstotliwość była ok i wszystko działa. Nie ma żadnych problemów po wyjściu z power-down i okazało się dodatkowo, że wychodzi z niego dużo szybciej. Wygląda na to, że procesor miał problem z ustabilizowaniem zegara przy wyjściu z pd i po dłuższym czasie dawał za wygraną pozawalając na niestabilną pracę.


    Jaki czas mijał od momentu wybudzenia uK z uśpienia do czasu wysłania paczki danych, jak były ustawione fusy bits?
  • #14 10468819
    zbuffer
    Poziom 10  
    Ciężko powiedzieć jaki czas bo polegało to na tym, że naciskałem przycisk, który jednocześnie wybudzał, następnie powodował sprawdzenie stanu przełącznika (bo było parę trybów) i przechodził do nadania jednego sygnału (w trybie "manual", w innych jeszcze było odczytanie ADC i dopiero start sekwencji). Generalnie trzeba było przytrzymać przycisk ok. 0,5 s żeby nastąpiło nadanie sygnału w trybie manualnym. Jeśli chodzi o tryb działania to ustawiałem zgodnie z DS i próbowałem opcji fast i slow rising power. W żadnym wypadku nie przypominało to ani 4ms ani 64 ms opóźnienia tylko duuużo więcej. Teraz używam opcji 4ms z wewnętrznym RC i przycisk powoduje niemal natychmiastowe wysłanie sygnału.
REKLAMA