Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega8 (16Mhz) -> ADC -> Ile sampli wyciągnie?

master_szumi 07 Lis 2006 16:39 8225 34
  • #1 07 Lis 2006 16:39
    master_szumi
    Poziom 12  

    Witam.

    Zależy mi na tym aby uzyskać jaknajwiększą częstotliwość próbkowania sygnału w przetworniku wbudowanym w Atmege8 przy 16MHz oscylatorze zewn. W jaki sposób obliczyć z jaką częstotliwością można maksymalnie próbkować mierzony sygnał?

    0 29
  • #2 07 Lis 2006 17:31
    adamusx
    Poziom 27  

    Predkosc konwersji zależy od zegara ADC (ustawia sie to za pomoca rejestru preskalera ADC) Dla przetwornika 10 bit maks jest to 200Khz, a czas konwersji to około 13 cykli zegara ADC, wiec jak łatwo obliczyć bedziesz miał maksymalnie 200/13= 15 Khz.
    Dla przetwornika w pracy 8 bitowej zegar ADC może być znacznie większy, ale nie doczytalem w dokumentacji ile maksymalnie.
    Musisz tam zerkac. Ale nie sadze zebyc wyciagnal więcej jak 500 Khz.
    Ktoś to testował ??


    [/quote]

    0
  • #3 07 Lis 2006 17:56
    master_szumi
    Poziom 12  

    A co się stanie jeżeli dla oscylatora 16Mhz dam dzielnik 16 i otrzymam 1MHz na taktowanie przetwornika? Czy tylko 8 bitów będzie wiarygodnych (w jaki sposób kożystać z trybu 8bitowego przetwornika?) czy cały wynik będzie do bani?

    0
  • Pomocny post
    #4 07 Lis 2006 19:18
    crazy_phisic
    VIP Zasłużony dla elektroda

    Poczytaj dokładnie rozdział "The ADC Data Register – ADCL and ADCH" w nocie katalogowej. Gdy ustawisz reprezentacje wyniku przesuniętą w lewo (bit ADLAR =1) wtedy w rejestrze ADCH masz najbardziej znaczące 8 bitów wyniku, jeśli ograniczysz się w programie tylko do odczytu tego rejestru będziesz mógł podać większy sygnał zegarowy (ponad 200kHz - "Prescaling and Conversion Timing"). Atmel podaje maksymalną częstotliwość na poziomie 1MHz ("ADC Characteristics").
    Pozdrawiam

    0
  • #5 07 Lis 2006 19:41
    master_szumi
    Poziom 12  

    Dzieki za odpowiedz o to mi chodziło. Problem wydaje się być rozwiązany.

    Jednak ciekawi mnie czym skutkuje podanie za dużego zegara na ADC bo niestety muszę się przyznać że w jednym z projektów dawałem 1MHz i odczytywałem 10bitów i wszystko jakoś działało :idea:

    0
  • #6 07 Lis 2006 21:07
    ktrot
    Poziom 19  

    [Atmega8 (16Mhz) -> ADC -> Ile sampli wyciągnie?

    Robiłem testy z ADC w avr, próbki były zapisywane w pamięci SRAM i póżniej wyświetlane na PC. Załączam wykres z przykładowym przebiegiem - próbkowanie 40-50kHz multipleksowane 2 kanały. Na górze próbki, na dole czas. Na przebiegach widać charakterystyczne schodki, których wysokość wyznacza rozdzielczość - można stwiedzić, że rozdzielczość tego wykresu wynosi 8bit lub nieco mniej (oś OY nie skalowana). Zwiększając częstotliwość zegara doszedłem do wniosku, że nieprzekraczalna granica próbkowania to ok 100kHz mimo zwiększania częstotliwości długość schodków pozostaje bez zmian - ADC nie nadążą. Przy czym przy 100kHz rozdzielczość spada do ok 7bit (lub nieco mniej)

    0
  • #7 07 Lis 2006 22:17
    master_szumi
    Poziom 12  

    Czyli miej więcej tyle ile Atmel zaleca jako max.:

    1MHz / 13cykli = 78kHz (przy 8 bitach)

    Teraz postawmy pytanie czy przy takim próbkowaniu można dobrze spróbkować sygnał audio w całej szerokości pasma 20-40kHz?

    Z twierdzenia o próbkowaniu wynika że jeżeli częstotliwość próbkowania będzie 2 razy większa od max. częstotliwości sygnału to sygnał będzie jednoznacznie odtwarzalny, czyż nie?

    0
  • #8 07 Lis 2006 22:53
    adamusx
    Poziom 27  

    Ktrot w jakim programie robileś ten wykres ???

    Master szumi chciałem chyba napisać od 20Hz d0 20Khz :)
    Jesli chodzi o próbkowanie sygnału audio to robiłem kiedyś analizator widma na ATmega16. Probkowałem sygnał z czestotrliwoscią 32Khz ( Za górna granicę pasma audio przyjąłem 16Khz. Wiecej chyba nie ma co ustawiać bo to już i tan jest na granicy słyszalności.
    ADC ładnie próbkował sygnał z taka częstotliwościa.

    0
  • #9 07 Lis 2006 22:58
    antrykot
    Poziom 20  

    master_szumi napisał:
    Czyli miej więcej tyle ile Atmel zaleca jako max.:

    1MHz / 13cykli = 78kHz (przy 8 bitach)

    Teraz postawmy pytanie czy przy takim próbkowaniu można dobrze spróbkować sygnał audio w całej szerokości pasma 20-40kHz?

    Z twierdzenia o próbkowaniu wynika że jeżeli częstotliwość próbkowania będzie 2 razy większa od max. częstotliwości sygnału to sygnał będzie jednoznacznie odtwarzalny, czyż nie?


    Karty dzwiękowe w PCtach mają 48kHz i wystarcza. Ja bym sie bardziej zastanowił nad rozdzielczością. Czy 8 bitów to nie za mało ?

    0
  • #10 08 Lis 2006 00:22
    master_szumi
    Poziom 12  

    Pobawiłem się programem CoolEdit i zmieniłem wielkość próbki z 16bitów na 8bitów w kilku utworach (przekonwertowałem wav-y) i muszę stwierdzić, że moje ucho ma duże problemy z rozróżnieniem tych utworów (przyznaję że melomanem nie jestem), różnicę dopiero dostrzegłem gdy prześledziłem w edytorze wartości kolejnych próbek sygnału w obu utworach - były różnice (czego należało się spodziewać). Jednak słuchając tych utworów nasuwa się pytanie: skoro nie widać różnicy to po co przepłacać? :)

    0
  • #11 08 Lis 2006 02:45
    shg
    Specjalista techniki cyfrowej

    Różnicę słuchać, przy muzyce klasycznej wręcz niesamowitą. Pop, czy inny mainstream na pewno trudniej będzie odróżnić bo tam głośność jest praktycznie przez cały utwór na max, do tego różne efekty jak kompresja (żeby było jeszcze głośniej) i mocne 'uderzenia', które powodują maskowanie szumu (efekt psychoakustyczny). Swietnie słychać szum kwantyzacji przy cichych fragmentach.

    A wracając do tematu, to z próbkowaniem 16kHz (zegar ADC 250kHz) miałem pełne 10 bitów rozdzielczości. Po zwiększeniu f próbkowania do 32kHz jakość trochę spadła, ale i tak nienajgorzej było. A szum ma jakiś dziwny rozkład widma, to nie jest szum biały, większą amplitudę ma w zakresie niższych i wyższych częstotliwości, prawdopodobnie to efekt nakładania się na siebie kilku źródeł szumu o róznej charakterystyce.
    Jak podasz zegar 1MHz to oczywiście działać będzie, tyle że najmniej znaczące bity mogą być 'zaszumione' (raczej na pewno będą)

    8 bitów do większości zastosowań poza słuchaniem (czyli jakieś analizatory widma, efekty świetlne sterowane dźwiękiem, itp.) wystarczy. Do zapisu mowy (dyktafon czy coś) wypada mieć conajmniej 10 bitów (bo nie zawsze źródło dźwięku będzie wystarczająco głośne), natomiast częstotliwosć próbkowania dla mowy może wynosić nawet 10kHz a i tak jakość będzie całkiem przyzwoita.
    W moim analizatorze widma na AVR mam próbkowanie 32kHz (zegar ADC 0.5MHz) i poziom szumów kwantyzacji leży poniżej -48dB (czyli rozdzielczość wynosi conajmniej 8 bitów)

    0
  • #12 08 Lis 2006 08:59
    master_szumi
    Poziom 12  

    Czy mółbyś podać więcej szczegółów dotyczących swojego analizatora (jakiś schemat itp)? Jak było z liczeniem transformaty - Atmega wyrabia się aby ją policzyć przed przyjęciem następnej próbki? Sam pisałeś FFT czy kożystałeś z gotowych bibliotek?

    0
  • #13 08 Lis 2006 09:23
    ktrot
    Poziom 19  

    Cytat:
    w jakim programie robileś ten wykres ???


    Potrzebowałem wizualizacji przebiegu do analizy pracy pewnego urządzenia (bezdotykowa suwmiarka bez cześci ruchomych) więc naskrobałem roboczy programik w delphi - rodzaj rejestratora. Analiza przetwornika AC nie była moim celem - wyszła przy okazji.

    Cytat:
    W moim analizatorze widma na AVR mam próbkowanie 32kHz (zegar ADC 0.5MHz) i poziom szumów kwantyzacji leży poniżej -48dB (czyli rozdzielczość wynosi conajmniej 8 bitów)


    To jest odpowiedż na pytanie czy warto przepłacać. 8 bitów daje dynamikę 48dB (zamiast teoretycznych 96dB przy 16bitach). Warto zauważyć, ze 48dB to nie tak mało, tyle mają całkiem przyzwoite magnetofony kasetowe (bez zaawansowanych systemów DNR) i pewnie wiekszość torów akustycznyc PC (karta, kolumienki) nie przekracza 48dB.

    0
  • #14 08 Lis 2006 12:07
    adamusx
    Poziom 27  

    SHG, ten analizatorek calkiem fajny, matryca była robiona z diod LED? Ile odswiezen na sekunde wyciaga? Bo z tego co widac na filmikach to około 5-10 Hz ??
    Wykorzystywales FFT czy DFT?

    0
  • #15 08 Lis 2006 13:41
    shg
    Specjalista techniki cyfrowej

    Więcej szczegółów tutaj:
    https://www.elektroda.pl/rtvforum/topic582099.html

    Wykorzystałem FFT, gotowiec w asemblerze.
    Na filmach widzać, że działa to wolniej niż w rzeczywistości, bo się za bardzo aparat z matrycą nie zgrał z odświeżaniem (aparat ma 8.33 FPS, udaje że 25FPS, ale tak naprawdę to tylko co trzecia klatka się zmienia) analizator chyba coś koło 15, może 17, nie wiem, dawno to mierzyłem. Są dwie "równoległe" transformaty dla dwóch pasm częstotliwości. Z pojedynczą transformatą przekracza 30FPS.
    Transformata jest liczona po akwizycji próbek, najpierw zapełniany jest bufor (128 próbek) z jednego pasma, dane przenoszone są do tablicy na której operuje FFT i w momencie skopiowania wszystkich danych uruchamiany jest kolejny proces akwizycji tym razem z drugiego pasma a w międzyczasie liczy się FFT z poprzednich danych.
    Próbki pobierane są w przerwaniach.
    Matryca na LEDach, ale w zasadzie cokolwiek można podpiąć.

    0
  • #16 19 Gru 2006 00:20
    jacynka84
    Poziom 26  

    Witam.
    Mam takie pytanie - co macie na myśli mówiąc np. "zegar ADC 0.5MHz" ???
    Tzn że ADC ma jakiś własny zegar?
    I może jeszcze -
    ile próbek na sekundę (nie z ADC) da sie wyciągnąć z przetwornika V/F ? tyle pomiarów na sekundę ile da rady sam przetwornik ???

    0
  • #17 19 Gru 2006 00:34
    adamusx
    Poziom 27  

    Zegar ADC 0.5 Mhz oznacza ze zegar przetwornika chodzi z predkoscia 0.5 Mhz:) Czyli kolejne etapy konewersji odbywaja sie z taka predkoscia, dla AVR wkonaniee jednego pomiaru wymaga 13 taktow przetwornika ADC.

    0
  • #18 19 Gru 2006 00:56
    jacynka84
    Poziom 26  

    Ale skąd akurat 0.5Mhz ?

    0
  • #19 19 Gru 2006 01:04
    Platon
    Spec od komputerów

    Te probkowanie audio z 2x wieksza czestotliwoscia przy 20khz pozwoli odtworzyc tylko sinusoide o takiej czestotliwosci. Zakladajac, ze 20kHz ktos bedzie jszcze slyszał, a "muzycznie" beda tam dzwięki ciekawsze niz sinusoida, to informacja o nich zostanie utracona.

    0
  • #20 19 Gru 2006 01:13
    shg
    Specjalista techniki cyfrowej

    A ile sobie ustawisz, tyle będziesz miał (oczywiście nie dowolnie).
    Zegar ADC bierze się z głównego zegara uC, który jest dzielony za pomocą licznika, a kolejne wyjścia licznika można przełączać jako sygnały zegarowe dla ADC za pomocą multipleksera. W nocie katalogowej jest schemat i opis przecie.

    A co do przetwornika V/f, to ile pomiarów wyciągniesz zależy od sposobu pomiaru.
    A mierzyć można w dwojaki sposób - albo mierzyć okres (czyli czas trwania jednego okresu), albo częstotliwość, czyli ilość okresów w danym odcinku czasu.
    W wypadku pierwszej metody maksymalna częstotliwość próbkowania wynosi tyle co częstotliwość sygnału wjściowego, a że ta z kolei zależy od przyłożonego na wejście napięcia, to i częstotliwość będzie od niego zależała.
    W drugiej metodzie sam sobie wybierasz częstotliwosć próbkowania, która oczywiście musi być conajwyżej taka, jak częstotliwość sygnału z przetwornika. Im dłuższy okres wybierzesz, tym większą dokładność możesz uzyskać, chociaż i tak przetworniki V/f zazwyczaj nie mają zbyt imponujących parametrów; błąd liniowości wynosi najczęściej >=1%, więc częstotliwość próbkowania należy dobrać taką, aby zliczać po 100 okresów.
    W wypadku pierwszej metody dla zapewnienia odpowiedniej dokładności okres powinien być mierzony z rozdzelczością conajmniej stukrotnie większą od częstotliwości wyjściowej przetwornika.
    Oba powyższe warunki odnoszą się do przetwornika o nieliniowości 1%.

    W pomiarach cyfrowych ogólnie lepiej sprawują się przetworniki typu SAR, całkujące, czy delta-sigma.

    0
  • #21 19 Gru 2006 03:13
    jacynka84
    Poziom 26  

    No dobrze ,to może tak, jest jakieś "lepsze " ustawienie ADC czy w ogóle uP atmega8 ew. atmega32 aby obrabiał wynik z f =200Khz ?
    czy po prostu jak ustawię w sofcie bez prescalera to będzie na maxa f ADC ?
    Bo chodzi mi o to by dało sie widzeć przebiegi np. kwadratowe nawet z częstotliością 400-500Khz .

    0
  • #22 19 Gru 2006 04:48
    shg
    Specjalista techniki cyfrowej

    jacynka84 napisał:
    No dobrze ,to może tak, jest jakieś "lepsze " ustawienie ADC czy w ogóle uP atmega8 ew. atmega32 aby obrabiał wynik z f =200Khz ?

    Najlepsze, takie jak podane w nocie, chyba od 50 do 200kHz, co przekłada się na częstotliwość próbkowania od 3,8 do 15,4kHz. przy pełnej rozdzielczości. Gorsze wyniki uzyskuje się gdy częstotliwość taktowania leży poza tym zakresem, dla wyższych częstotliwości pojawia się szum, a dla niższych nie próbowałem, ale podejrzewam, że albo zniekształcenia nieliniowe, albo stłumienie sygnału.

    jacynka84 napisał:
    czy po prostu jak ustawię w sofcie bez prescalera to będzie na maxa f ADC ?

    Tak, ale jeżeli przekroczysz maksymalną częstotliwość taktowania ADC (czyli 1MHz), to wyniki będą raczej mało użyteczne. Największa częstotliwość, jaką możesz wybrać to 1/2 częstotliwośći głównego zegara.
    jacynka84 napisał:
    Bo chodzi mi o to by dało sie widzeć przebiegi np. kwadratowe nawet z częstotliością 400-500Khz .

    Nie ma takiej możliwości, ten ADC jest za wolny.

    0
  • #23 19 Gru 2006 08:29
    jacynka84
    Poziom 26  

    A czy na Atmega 8/32 w bascom da się w ogóle zobaczyć przebiegi np. kwadratowe z częstotliością 400-500Khz ,np z jakiegoś innego przetwornika A/D lub gotowego Napięcie/Częstotliwość ?
    Tak mi na tym zależy ,ponieważ napisałem w Bascom Oscyloskop , a raczej szkielet ogólny wykonawczy , no a wiadomo że dokładność i wysoka rozdzielczość by sie przydała. teraz pracuję na innym temacie nad samym pomiarem - woltażu.

    0
  • #24 19 Gru 2006 09:05
    Dar.El
    Poziom 40  

    Witam
    :arrow: jacynka84
    Dobrego scyloskopu nie zrobisz na ATMedze, pasmo użyteczne będzie poniżej 10kHz i to też z problemami. Gdyby było to takie proste to każdy zrobiłby sobie oscyloskop, niestety, potrzeba więcej kasy, więcej pracy a przede wszystkim, więcej wiedzy.
    Do oglądania przebiegów o częstotliwości 0,5MHz, przetwornik musi mieć minimum 10x więcej, czyli 5MHz, ale to wymaga obróbki na procesorze. Przy większej szybkości można już wyświetlać bezpośrednio. Najprościej będzie jak zastosujesz przetwornik 20MHz i pamięć SRAM o czasie dostępu 55ns oraz zewnętrzne liczniki do taktowania, a sam procesor będzie tym tylko sterował i wyświetlał/wysyłał dane.

    0
  • #25 19 Gru 2006 12:38
    jacynka84
    Poziom 26  

    No to ja wiem że nie zrobię dbrego oscyl. na Atmedze...
    Może jakiś oddzielny A/D ? i jak się stosuje ten SRAM ? ma ktoś jakieś rady ?

    0
  • #26 19 Gru 2006 14:38
    crazy_phisic
    VIP Zasłużony dla elektroda

    Wszystko zależy od tego jakie parametry chcesz osiągnąć.... tutaj przykład prostej przystawki:
    http://sklep.avt.com.pl/go/_info/?id=45591
    z dokumentacji dowiesz się jak mniej więcej działają tego typu układy.

    0
  • #27 23 Gru 2006 21:26
    jacynka84
    Poziom 26  

    A gdyby zrobić pojedyńczy ADC z Rezystorów , to sie chyba jakoś nazywało, i dać końcówki na Port atmega ,
    to by sie dało jakoś uzyskać lepszą prędkość zbierania sampli ?
    I czy taki "goły" przetwornik by w ogóle/dobrze działał ? chodzi raczej o 10bitów.

    0
  • #28 24 Gru 2006 00:42
    shg
    Specjalista techniki cyfrowej

    Z samych rezystorów to się robi DAC.
    Jak chcesz mieć ADC, to do takiego DACa trzeba by dołożyć komparator, a na uC trzeba napisać program, który będzie realizował funkcje rejestru kolejnych przybliżeń (SAR).
    W zasadzie ATmega komparator ma wbudowany, może można by go wykorzystać.
    Ponadto warto by dołożyć jakiś układ próbkująco-pamiętający, poziom mierzonego sygnału nie powinien zmieniać się w trakcie konwersji.

    Optymistyczny wariant zakłada, że w ten sposób uda się uzyskać próbkowanie rzędu 100kHz. Ogrzniczeniem jest czas reakcji komparatora, optymistyczny wariant zakłada 1us, ile ma komparator w ATmega, nie wiem i nie chce mi sie sprawdzać.

    Nie wiadomo też za bardzo jaką dokładność uzyska się z DACa R-2R (taki na rezystorach) sama drabinka jest dość dokładna, zwłaszcza jeżeli użyje się rezystorów z tej samej serii produkcyjnej. Gorzej natomiast z portami uC. Drabinka rezystorów powinna być sterowana przez albo dokładne źródła napięciowe, albo prądowe, przy czym te ostatnie utrzymuje się przez zastosowaniu tzw. luster prądowych (nie takich najprostszych) Wykonanych na jednym kawałku krzemu w celu zapewnienia jednakowych warunków pracy.
    Porty wyjściowe ATmega nie były projektowane z myślą o pracy w takim układzie, ale mam nadzieję, że pocieszające będzie dla Ciebie, iż sprawują się w takim układzie całkiem nieźle, znaczy się, że nie jest tragiczne, conajmniej 6 bitów bez problemu można wyciągnąć (testowane na rezystorach metalizowanych 1%, 2R składane z 2 sztuk R. 6 bitów jak na oscyloskop to dostatecznie dużo, proste (często przenośne z ekranem LCD) oscyloskopy cyfrowe mają tyle, lepsze 8 bitów.
    A może by tak rozwiązanie takie jak w oscyloskopach? Przetwornik typu Flash. Dla 6 bitów potrzeba "jedynie" 16 scalaczków, po 4 komparatory w każdym, 64 rezystorów o takiej samej wartości i enkodera "1 z 64" na kod binarny :> Żartuję oczywiście, ale nie do końca.
    Jest jeszcze taki myk jak przetwornik Half-Flash. Jest to połączenie przetwornika Flash ze zwykłym przetwornikiem wykorzystującym SAR.
    Zasada działania jest taka, że wpisujesz w google i masz :P

    Ale najlepiej będzie po prostu zdobyć gotowy przetwornik o interesujących Cię parametrach. Takie kombinowanie zazwyczaj pochłania ogromną ilość czasu, a rezultaty niekoniecznie muszą być zadowalające.

    0
  • #29 24 Gru 2006 14:22
    jacynka84
    Poziom 26  

    Jasna d**a . , więc nie idzie go właściwie zrobić w prostszy sposób tak żeby dociągnął do 1Mhz ?
    Ale coś mi sie tu nie zgadza , częstotliwość próbkowania a max częstotliwość jaką możemy "zobaczyć" na ekranie to różnica ??
    PS i tak na razie będie mu muysiało wystarczyć te 50-100Khz na początku. w końcu to mój pierwszy Duży projekt.

    0
  • #30 24 Gru 2006 22:57
    shg
    Specjalista techniki cyfrowej

    jacynka84 napisał:
    Ale coś mi sie tu nie zgadza , częstotliwość próbkowania a max częstotliwość jaką możemy "zobaczyć" na ekranie to różnica ??


    Teoremat Shannona-Nyquista. Do odtworzenia (przez odtworzenie należy również rozumieć wyświetlenie itp.) sygnału ciągłego z jego postaci spróbkowanej wymagane jest, żeby częstotliwość próbkowania byłą conajmniej dwukrotnie większa od częstotliwości odtwarzanego sygnału. I w zasadzie pasmo 100kHz przy próbkowaniu 200kHz uzyska się bez problemu, tylko że oscyloskop służy też do oglądania kształtu przebiegu, a wszystko co będzie miało częstoliwość podstawową większą od 50kHz (próbkowanie wciąż 200kHz) zostanie pozbawione częstotliwości harmonicznych, czyli odpowiedzialnych za kształt. W efekcie na ekranie zobaczysz tylko sinusoide o amplitudzie niekoniecznie zgodnej z amplitudą badanego sygnału (zjawisko Gibbsa). A o tym też mówi w/w teoremat - sygnał powinien mieć ograniczone pasmo częstotliwości (właśnie do 1/2 fs, czyli częstotliwości Nyquista).
    W typowych oscyloskopach cyfrowych podawane przez producenta pasmo jest conajmniej 5 razy mniejsze od częstotliwości próbkowania.

    0