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

ATMega8 - Opóźnienie powodowane usypianiem procesora (TIMER, ADC)

warez 11 Lip 2014 23:11 1113 4
REKLAMA
  • #1 13788672
    warez
    Poziom 10  
    W swoim programie wykorzystuję m. in. TIMER i przetworniki ADC.
    Timer działa w trybie CTC, dane z przetwornika pobieram funkcją adc_get():

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dane z przetwornika są pobierane w pętli głównej, a timer ma za zadanie liczyć realny czas. Problem w tym, że kiedy procesor wchodzi w stan uśpienia timer się zatrzymuje, co w efekcie powoduje spore opóźnienie (timer "gubi" kilka sekund na jednej minucie).
    Zastosowałem zewnętrzny kwarc 16MHz i po wykomentowaniu wywołania adc_get() odmierzanie czasu daje efekty, jak na moje potrzeby, bardzo zadowalające (18 minut testu bez zauważalnych opóźnień / przyspieszeń).

    Moje pytanie brzmi czy mogę pogodzić precyzyjny odczyt z ADC (z uśpieniem) i dokładny timer czy muszę wybrać albo precyzyjne ADC i niedokładny timer albo standardowy odczyt z ADC i dokładny timer?

    Czy wywołanie mojej funkcji adc_get() będzie zawsze zajmowało tyle samo czasu czy czas jej wykonania jest od czegoś zależny? Ewentualnie czy można w jakiś sposób taki czas obliczyć? Wtedy mógłbym wyskalować timer do zadowalającej precyzji poprzez wpisanie niższej wartości w rejestr OCR1A. Mogę to oczywiście robić eksperymentalnie, ale wymagałoby to sporo czasu.

    Z góry dziękuję za wszelką pomoc. Jeżeli taki temat był już gdzieś poruszany to proszę o link, ponieważ nie udało mi się znaleźć nic na ten temat.
  • REKLAMA
  • #2 13788715
    excray
    Poziom 41  
    Atmega 8 ma 3 timery więc który timer Ty wykorzystujesz?
  • REKLAMA
  • #3 13788725
    warez
    Poziom 10  
    Wykorzystuję TIMER1
  • REKLAMA
  • Pomocny post
    #4 13789047
    Konto nie istnieje
    Poziom 1  
  • #5 13791871
    warez
    Poziom 10  
    Dziękuję bardzo za pomoc, problem rozwiązany.
REKLAMA