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] ADC - stała częstotliwość próbkowania

DXFM 04 Sty 2009 12:19 3234 11
REKLAMA
  • #1 5947290
    DXFM
    Poziom 20  
    Witajcie.
    Za pomocą AVR ATMEGA8 chcę próbkować sygnał analogowy ze stałą częstotliwością, na przykład Fs=12kHz. Interesują mnie próbki 8-mio bitowe. Wydaje mi się, że są dwie możliwości.

    1. W trybie free running użyć kwarcu o częstotliwości Fs * 13 (cykli przetwarzania) * preskaler. Czy wtedy przerwania od przetwornika będę dostawał po każdym zakończeniu przetwarzania, a próbkowanie będzie na pewno regularne?

    2. W trybie na żądnie - zrobić tak, aby przetwarzanie trwało krócej niż 1/Fs. Zrezygnować z obsługi przerwania od zakończonej konwersji, a wykorzystać obsługę timera, który periodycznie z żądaną częstotliwością wywołuje procedurę, która:
    a) przeczyta ADCH
    b) uruchomi 'ręcznie' kolejną konwersję
    Oczywiście uwzględniam czas od momentu zgłoszenia przerwania do chwili uruchomienia kolejnej konwersji.

    Drugi schemat bardziej mi się podoba, gdyż można łatwiej dostosować częstotliwość próbkowania do własnych potrzeb, to znaczy bez zmiany częstotliwości kwarcu, który na przykład będzie pasował do prędkości pracy USART.

    Poprawcie mnie, jeśli mój tok rozumowania jest błędny.
  • REKLAMA
  • #2 5947308
    MarasK
    Poziom 18  
    drugi z pewnością poprawny
  • #3 5947765
    kasaidolar
    Poziom 19  
    Zdecydowanie druga. Robisz sobie przerwanie od timera na tyle ile chcesz i w przerwaniu odpalasz konwersje i zczytujesz co zmierzyl ADC. Bedziesz mial jeszcze jakies przerwania?
  • #4 5949033
    kubus_puchatek
    Poziom 18  
    tylko druga metoda. rozrzut pomiaru zmieści się w 2 cyklach rozkazowych. co jest niezauważalne
  • REKLAMA
  • #6 5951239
    MarasK
    Poziom 18  
    W jednym z sąsiednich wątków ktoś pisać o tym, że pierwszy pomiar trwa dłużej (25taktów). Nie wiadomo jak długo ma trwać 'cykl pomiarowy' - może to mieć znaczenie.

    Dlatego druga metoda efektywniejsza. Dodatkowym atutem jest możliwość użycia dowolnego kwarcu (powyżej pewnego progu).
  • REKLAMA
  • #7 5951737
    Freddie Chopin
    Specjalista - Mikrokontrolery
    efektOwniejsza to moze, bo na pewno nie efektywniejsza... korzysta z 2 peryferiow (timer i ADC) oraz kawalka dodatkowego kodu dla timera. metoda pierwsza dziala wykorzystujac jedynie ADC i zadnego dodatkowego kodu nie potrzebuje (nie licze tego w przerwaniu od ADC, bo ten i tak musialby byc w obydwoch przypadkach).

    a ze pierwszy pomiar trwa dluzej... no i?

    4\/3!!
  • #8 5952045
    DXFM
    Poziom 20  
    Dziękuję wszystkim za odpowiedzi.

    Freddie Chopin napisał:
    efektOwniejsza to moze, bo na pewno nie efektywniejsza... korzysta z 2 peryferiow (timer i ADC) oraz kawalka dodatkowego kodu dla timera. metoda pierwsza dziala wykorzystujac jedynie ADC i zadnego dodatkowego kodu nie potrzebuje (nie licze tego w przerwaniu od ADC, bo ten i tak musialby byc w obydwoch przypadkach).

    a ze pierwszy pomiar trwa dluzej... no i?

    4\/3!!


    Momencik. Sugerujesz, że w drugiej metodzie muszę wykorzystać dwa przerwania - od zakończenia przetwarzania przez ADC i timera? Z dokumentacji wynika, że rejestr danych ADC mogę czytać w dowolnej chwili po zakończeniu przetwarzania w trybie 'ręcznym'. Zatem uważam, że nic nie stoi na przeszkodzie, aby w równych odstępach czasowych wyznaczonych przez timer odczytywać wartości. Chyba że chodziło Ci o wprowadzenie w ten sposób opóźnienia odczytania wartości i udostępnienia jej dalej w systemie. W moim zastosowaniu opóźnienie nawet dłuższe niż jedna próbka nie robi różnicy.
    Nie przeszkadza mi też 'zużycie' jednego timera.
    Próbki będą zbierane przez większość czasu pracy programu.
  • REKLAMA
  • #10 5952984
    DXFM
    Poziom 20  
    Freddie Chopin napisał:
    mozesz uzyc przerwania, mozesz go nie uzyc. tak czy siak potrzebny bedzie dodatkowy kod do odpalania konwersji - rowniez i to byloby zalatione w metodzie pierwszej.

    4\/3!!


    Raczej muszę użyć przerwania do pobierania próbek, gdyż będą jeszcze inne zadania do wykonania w programie głównym.
    Z Twojej wypowiedzi nie rozumiem stwierdzenia: "rowniez i to byloby zalatione w metodzie pierwszej". Chodzi o dodatkowy kod wyzwalania przetwornika, który w metodzie pierwszej nie jest potrzebny po każdej konwersji i o co jeszcze?

    Szkoda, że w AVR przetwornik nie może być wyzwalany którymś licznikiem...
  • #12 5954348
    DXFM
    Poziom 20  
    Balu napisał:
    Może:>
    Napisz w ISRze timera uruchomienie konwersji?

    Chodzi o coś jeszcze innego niż: mój pierwszy post, punkt 2, podpunkt b ?
    :)
REKLAMA