Oj coś koledzy krążycie wokół tematu a nie widzę nigdzie pełnej odpowiedzi.
Niektóre są za to błędne albo upraszczające.
F_CLK_ADC, to tak jak ktoś pisał, tylko częstotliwość taktowania ADC. A że jest to przetwornik typu SAR (z sukcesywną aproksymacją) to konwersja 1 próbki trwa n cykli zegara F_CLK_ADC.
W przypadku tego ADC jest to:
- 25 cykli dla pierwszej konwersji po włączeniu modułu ADC,
- 13 cykli dla każdej kolejnej konwersji.
I teraz tak. F_CLK_ADC jest tylko luźno powiązany z częstotliwością próbkowania. O tyle jest powiązany, że F_CLK_ADC ogranicza od góry maksymalną częstotliwość próbkowania. Natomiast od dołu nie ogranicza jej praktycznie nic.
Max F_SAMPLE wynosi F_CLK_ADC / 13 i to tylko gdy wyzwolimy ADC w tryb "free running mode" i dla 1 kanału - wówczas ADC sam rozpoczyna kolejną konwersję bezpośrednio po zakończeniu poprzedniej. My mamy wtedy za zadanie zdążyć odczytać wynik konwersji i coś z tym wynikiem zrobić zanim skończy się kolejna konwersja
A jeśli chcemy sami dokładnie ustalić inną częstotliwość próbkowania, to tak jak ktoś pisał, wyzwalamy konwersje w przerwaniu od Timera. Timer konfigurujemy np. na pracę w trybie CTC z pożądaną przez nas częstotliwością generowania przerwań (częstotliwość ta zależy od F_CPU, preskalera zegara, wartości rejestru COMPx - tak jest w przypadku zwykłych Atmeg)
Warto tu minimalizować jitter, czyli dbać o to, żeby kolejne konwersje były wyzwalane w jak najdokładniej odmierzonych interwałach czasowych, co innymi słowy oznacza, że dokładny jest zegar samplowania.
Żeby minimalizować jitter należy:
- jeśli w przerwaniu, w którym wyzwalamy konwersje robimy też inne rzeczy, to wyzwolenie konwersji powinno być pierwszą instrukcją przerwania;
- ISR pozostałych używanych przerwań powinny być możliwie krótkie, albo musimy zadbać, żeby nigdy nie wypadły nam w momencie występowania przerwania od naszego timera, coby nam nie opóźniały jego wykonania.
W przypadku AVR XMEGA powyższego problemu z przerwaniami można uniknąć, bo do wyzwalania konwersji można użyć Event System. Wówczas bez względu na to, jak bardzo opóźnia nam się wejście w przerwanie od timera, konwersja ADC jest wyzwalana od razu w momencie ustawienia się flagi od timera.
Dodano po 11 [minuty]:
kamyczek napisał: Przy sygnałach zmiennych trzeba dążyć ,by pomiar był możliwie krótki i do tego służy dzielnik przetwornika
Tutaj też jest pewien kompromis. Oczywiście, że w trakcie fazy samplowania sygnału (w układzie sample & hold) sygnał nie powinien znacząco zmieniać wartości, bo to ogranicza dokładność pomiaru.
Ale jeśli sygnał zmienia swoją wartość w trakcie tej fazy, to znaczy tylko tyle, że wynikowa częstotliwość próbkowania jest już na pewno zbyt mała (a jest ona przecież co najmniej 13 razy mniejsza niż F_CLK_ADC).
Z drugiej strony - jeśli F_CLK_ADC jest zbyt duża, to źródło sygnału może nie zdążyć poprawnie naładować pojemności Csample. Czas samplowania to np. w przypadku XMEGA 1/2 cyklu CLK_ADC. Nie wiem szczerze mówiąc jak jest w innych przetwornikach.
Zależności są takie:
- im większa impedancja wyjściowa źródła sygnału, tym dłuższy czas ładowania pojemności Csample
- oczywista oczywistość

- im większa Csample tym dłuższy czas jej ładowania
- im większa F_CLK_ADC tym mniej dokładne naładowanie Csample
Dlatego jeśli nasz sygnał próbkujemy ze stosunkowo niską częstotliwością, to nie zawsze dobrze jest ustalać maksymalną możliwą F_CLK_ADC.
A to na podparcie moich wywodów - co prawda noty dotyczą rodziny XMEGA, ale fizyka zjawiska jest taka sama

:
XMEGA A Manual - Figure 25-13, strona 297
I jeszcze to:
AVR1300: Using the Atmel AVR XMEGA ADC - punkt 3.8 i wykres na stronie 15.