Poprzedni temat «» Następny temat
ADC free running - idea
Autor Wiadomość
siekierzyński 
Że niby co?



Wiek: 27
Dołączył: 01 Cze 2010
Posty: 416
Skąd: Nareszcie Polska
Wysłany: 2015-07-07, 09:45   ADC free running - idea

Witam,

czy ktoś mógł by mi wytłumaczyć jak są dokonywane pomiary przy Free Running Mode w przetworniku ADC. czy to jest tak, że jest zczytywna wartosć z pierwszego ADC, potem jest to przełączane na kolejny itd? Gdzie to jest zapisywane? I czy da isę ograniczyć, żeby były sprawdzane tylko wyjścia np. 0-3 - w co wątpię.

Pozdrawiam
 
     
Ertew 
-.^



Wiek: 26
Dołączył: 03 Lip 2005
Posty: 1347
Skąd: Leszno
Wysłany: 2015-07-07, 17:03   

Jeśli mówimy o rodzinie Tiny lub Mega to mylisz się. Tryb free running nie służy do pomiarów wielokanałowych a do odczytywania możliwie najbardziej aktualnych wartości z jednego wybranego pinu. Ten tryb stosuje się gdy:
- Potrzebujemy jak najszybciej dokonywać pomiarów, np. do analizy sygnału audio.
- Może zajść nagła potrzeba sprawdzenia napięcia i lepiej mieć wartość zmierzoną kilka ms wcześniej niż wyzwolić ADC i czekać na kolejny pomiar.

W teorii jeśli chcesz dokonywać pomiarów wielokanałowych, lepiej w przerwaniu 'koniec konwersji ADC' przestaw kanał, ręcznie odpal konwersję po czym odbierz wynik poprzedniego pomiaru.

W praktyce, da się pracować tak jak chcesz, ale wymaga to trochę więcej gimnastyki. Musisz dokładnie przeczytać rozdział dotyczący przełącznika kanałów bo może się on różnić w zależności od konkretnego uC. Zgodnie z moją wiedzą, musisz zrozumieć poniższą ideę i przenieść ją na kod:
- Konwersja trwa, gdy uC zmienia rejestr przełącznika kanałów (umownie z kanału 1 na 2). Zmiana zachodzi tylko w rejestrze, przełącznik kanału dalej posiada starą wartość.
- ADC kończy konwersję dla wejścia 1, generuje przerwanie.
- Przełącznik kanału przełącza się na wybrany kanał dopiero gdy ADC nie pracuje, po czym ADC automatycznie rozpoczyna kolejną konwersję.
- uC zbiera wynik konwersji (kanał 1), zmienia rejestr przełącznika kanałów (umownie kanału 2 na 3). Cykl się zamyka.



Jeśli mówimy o XMega, sprawa ma się nieco inaczej. Tutaj masz kontroler DMA który podobno można tak ustawić by sam odpalał pomiary na kolejnych kanałach. Sprawa robi się ciekawsza gdy masz uC z kilkoma ADC.
 
 
     
siekierzyński 
Że niby co?



Wiek: 27
Dołączył: 01 Cze 2010
Posty: 416
Skąd: Nareszcie Polska
Wysłany: 2015-07-07, 17:09   

Czyli krótko mówiąc w mega i ttiny tryb free running jest do ciągłego pomiaru tego samego kanału. Czyli robię pomiar na kanale, zapisuję wynik do rejestru, wysyłam przerwanie i zabieram się za pomiar od nowa tego samego kanału, zapisuję wynik... I tak w kółko. Dobrze rozumiem?

To faktycznie lepiej, po pomiarze w przerwaniu samemu zmienić nr kanału i zlecić pomiar.
 
     
Ertew 
-.^



Wiek: 26
Dołączył: 03 Lip 2005
Posty: 1347
Skąd: Leszno
Wysłany: 2015-07-08, 18:30   

Tak, tym razem dobrze zrozumiałeś. Obie idee są słuszne, a za cenę znacznego skomplikowania kodu zyskujesz kilka taktów uC czasu. Wybór należy do Ciebie.

Jest jeszcze jedno wyjście. W trybie free running, w każdym przerwaniu możesz zwiększyć przełącznik kanału o jeden (przyjmijmy że na wartość x, od 0 do 3) i z buforu ADC odczytujesz wartość do zmiennej x (również 4 zmienne). W ten sposób (jeśli nie zgubisz zgłoszenia przerwania) za każdym razem uC będzie popełniać ten sam błąd i dane odczytywane z kanału 1 będą zawsze trafiać do zmiennej 3. Możesz zatem olać obliczenia i po prostu na etapie uruchomienia odpowiednio podpiąć piny ADC do sygnałów badanych.
 
 
     
siekierzyński 
Że niby co?



Wiek: 27
Dołączył: 01 Cze 2010
Posty: 416
Skąd: Nareszcie Polska
Wysłany: 2015-07-08, 18:36   

Cytat:
za każdym razem uC będzie popełniać ten sam błąd i dane odczytywane z kanału 1 będą zawsze trafiać do zmiennej 3. Możesz zatem olać obliczenia i po prostu na etapie uruchomienia odpowiednio podpiąć piny ADC do sygnałów badanych.

Nie rozumiem?
 
     
Ertew 
-.^



Wiek: 26
Dołączył: 03 Lip 2005
Posty: 1347
Skąd: Leszno
Wysłany: 2015-07-26, 11:39   

Chodzi mi o to, że jeśli pójdziesz na łatwiznę i przemyślisz do której zmienne zapisujesz dane z konkretnego kanału ADC, to można później ręcznie dopasować zmienne lub piny procesora. Stracisz w ten sposób na czytelności projektu, ale zyskasz na szybkości dokonywanych pomiarów. W niektórych sytuacjach taki kompromis bywa koniecznością.
 
 
     
dondu 



Dołączył: 24 Maj 2005
Posty: 205
Skąd: Śląskie
Wysłany: 2015-08-17, 14:18   

siekierzyński napisał/a:
Czyli krótko mówiąc w mega i ttiny tryb free running jest do ciągłego pomiaru tego samego kanału.

Nie. Free Running może używać wielu kanałów, ale:

W przypadku Free Running układ sample & hold zatrzaskuje próbkę napięcia na wejściu ADC w 1,5 taktu zegara ADC po zakończeniu poprzedniego pomiaru co widać na rysunku "ADC Timing Diagram, Free Running Conversion" zamieszczony poniżej.

Czas ten jest potrzebny na poprawne naładowanie się układu wejściowego ADC. Wcześniej więc musi nastąpić przełączenie kanału i podłączenie nowego do wejścia przetwornika ADC.

Dlatego też na tym samym rysunku widać moment faktycznej zmiany kanału ADC (MUX and REFS Update), która następuje w momencie zakończenia poprzedniego pomiaru. Jednakże:

Cytat:
If both ADFR and ADEN is written to one, an interrupt event can occur at any time. If the
ADMUX Register is changed in this period, the user cannot tell if the next conversion is based
on the old or the new settings. ADMUX can be safely updated in the following ways:
1. When ADFR or ADEN is cleared.
2. During conversion, minimum one ADC clock cycle after the trigger event.
3. After a conversion, before the Interrupt Flag used as trigger source is cleared.
When updating ADMUX in one of these conditions, the new settings will affect the next ADC
conversion.


Oznacza to, że można w funkcji przerwania ADC zmieniać kanał, ale faktyczna zmiana nastąpi dopiero po zakończeniu aktualnie trwającego pomiaru. Należy też zrobić to po upływie czasu 1-go cyklu ADC, a to zależy od ustawionego preskalera ADC. Wystarczy to uwzględnić w programie i po kłopocie.

Należy także brać pod uwagę, że nie zawsze zależy nam na tym, by ADC działał z największą możliwą prędkością, wszystko bowiem zależy od tego co mierzymy i jakie mamy ograniczenia w zakresie parametrów pomiaru.

ATmega-ATtiny-ADC-Free-running.png
Plik ściągnięto 16 raz(y) 54,14 KB

 
     
PIC2013 
Nowy na forum


Dołączył: 16 Mar 2017
Posty: 9
Skąd: Polska
Wysłany: 2017-03-16, 20:10   

Witam

Odpalam tryb Free Running w atmega328 w przerwaniu po konwersji wynik przypisuje do zmiennej a zmienną do tablicy .Dlaczego za każdym razem w przerwaniu muszę ustawiać ADSC ? czyli start pierwszej konwersji ? bez tego wchodzę w przerwanie tylko raz,czyli działa tryb Single Conversion zamiast Free Running :(

ISR(ADC_vect)
{

wynik=ADCW;
tab[i]=wynik;
i++;
ADCSRA |= (1<<ADSC) ; // //Start pierwszej konwersji .

if(i==20)
{
ADCSRA &=~ (1<<ADEN); //Off ADC

}


edit: zabrakło - Bit 5 – ADATE: ADC Auto Trigger Enable.
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,04 sekundy. Zapytań do SQL: 12