Witam. Planuję już kolejną wersję oscyloskopu, chciałbym znów poszerzyć zakres częstotliwości, a więc mam zamiar zaprzęgnąć do tego zewnętrzny przetwornik A/C albo nawet dwa. Idea jest taka, żeby użyć dwóch 8-bitowych przetworników, podłączyć do 2 portów uC i popędzić oba przetworniki max 32 MHz.. I teraz czy tu nie przesadziłem. Czy DMA nadąży w jednym takcie zapisać do pamięci stan PORTu?
Każdy port by miał swój kanał DMA, tylko nie wiem, czy ma to szanse tak zadziałać.
Nie uzyskasz tej predkości. DMA w Xmege korzysta z tej samej szyny danych co procesor, tyle , że wykorzystuje ją w czasie gdy procesor zajmuje sie czym innym. Sądzę że kilka (5-8) Mhz może być limitem dla dwóch kanałów DMA (DMA nie działa w jednym cyklu) a dwa kanaly DMA zajmujące szynę danych non stop będą sobie przeszkadzać.
A jak jest zrobiony dzielnik wejściowy?
Bo wchodzisz już w częstotliwości gdzie zaczyna mieć to znaczenie.
No i może jednak jakiś SRAM na wejściu po przetworniku.
No a zobaczcie tu:
http://www.gabotronics.com/development-boards/avr-xmegalab.htm Przetwornik jak widać jest jeden, są multipleksowane 2 wejścia. Max częstotliwość próbkowania 16Msps(nie wiem czy na kanał czy tylko przy korzystaniu z jednego kanału) ale tak czy siak jest to sporo, dwa kanały DMA by sobie przeszkadzały więc musi to robić pewnie jeden kanał (nie zaglądałem w źródła jeszcze), tak czy siak nawet w najgorszym przypadku widać, że zapis stanu portu do pamięci zajmuje 2 takty. Mnie by to zadowalało, z tym, że ja bym zastosował 2 przetworniki, każdy na inny port, każdy swój kanał DMA i miałbym 2 kanały po 16Msps, chyba, że w tym projekcie z linku jest jakiś trick?
Odpowiedź na twoje pytanie nie jest prosta, bo zależy od wielu czynników. Po pierwsze, działanie DMA nie jest do końca deterministyczne, bo współdzieli szynę danych z CPU, a CPU ma priorytet. W efekcie na czas wykonywania operacji przesłań do pamięci i IO (z wyjątkiem FLASH) DMA jest wstrzymywane. Oczywistym jest, że wszystkie kanały współdzielą to samo pasmo, więc wykorzystanie 2 kanałów to mniej więcej tak jak 1 dwukrotnie szybszy.
Kolejny problem to pamięć. Wewnętrzna działa w jednym cyklu zegara, a DMA można taktować 2-razy szybciej niż CPU (czyli do 64MHz), ale w praktyce tak słodko nie ma. Zobacz też jak wyglądają timingi interfejsu EBI, to pozwoli ci się mniej więcej zorientować co do prędkości. Jak widać, w zależności od typu pamięci zewnętrznej i wybranego interfejsu, czasy dostępu się zmieniają, a dla SDRAM to już ogólnie tragedia jeśli chodzi o predykcję.
Pamiętaj, że w oscyloskopie możesz wykorzystać szybką pamięć buforową, którą będziesz taktował zapisując kolejne sample, a po całym procesie przepiszesz jej zawartość do CPU.
No i tak jak już pisał janbernat wchodzisz w zakresy, gdzie nie można już bezpośrednio podpiąć źródła pod ADC, trzeba zrobić odpowiednie układy buforujące, co banale nie jest, o czym jak pamiętam już zdążyłeś się przekonać
Co do buforowania, to wyszukałem w TME fajny i nie drogi poczwórny WO TS924ID, rail-to-tail, zasilanie od od 2,7V, offset jakieś tam mikro volty z tego co pamiętam, pasmo do 4MHz więc coś dla mnie. Narazie mam problem ze znalezieniem dobrego i również nie drogiego ADC w granicach 32Msps, 8bit równoległy i zasilania max 3,3V.
Bufory będę testował, może tym razem wkońcu coś wyjdzie Jak zauważyliście jestem tu żółtodziobem raczej, budując każdy kolejny projekt dopiero się uczę co i jak.
Może na początek wyciśnij z wewnętrznego ADC tyle ile się da. Te przetworniki które oglądasz przy 16MHz mają pewnie 8bit rozdzielczość, a w AVR masz jeszcze 12bit/2MSPS. Przetwornik wewnętrzny może działać z prędkością 1/4 Fcpu więc jeszcze jakiś zapas masz Oczywiście spadnie rozdzielczość ale może się okazać, że jest na podobnym poziomie co w zewnętrznych A/C. I pamiętaj, że 32MHz Fcpu to masz dla całego zakresu temperatur przy zasilaniu 3,3V.... a można je podnieść delikatnie i nie używać w wysokich temperaturach Nie robiłem testów, ale mogę się założyć że proc będzie działać na 48MHz, a przetwornik z 6...8MSPS wyciągnie może z 8bitami.
Pozdrawiam
Przetaktować procesor w oscyloskopie to nie wiem czy jest dobry pomysł. Tu jednak chodzi o pewną stabilność i dokładność (powtarzalność) odmierzania przedziałów czasu. Takiego oscyloskopu w wysokich temperaturach raczej nikt używał nie będzie, bo po co.. Tylko od jakiej temp definiować temperaturę wysoką a do jakiej niską Przy uruchomieniu 2 przetworników i przy 12 bitach rozdzielczości całkowite max to jest 2Msps, przy jednym przetworniku i 12 bitach mierzyłem, jest to ok 3,3Msps całkowite max, ale przy preskalerze 8 wiec powinno być 4 a nie jest, zatem już jest niestabilność z reszta co było widać na poszarpanych wykresach. rozdzielczości 8 bitowej nie próbowałem, bo nie miałem w zamiarze robić przełączanych dzielników wejściowych a 256 kwantów to troszkę mało, żeby uzyskać jakiś sensowny zakres napięciowy na jednym dzielniku.
Jak dotąd moje oscyloskopy to ciągle takie zabawki, teraz chciałem wykonać już dopracowane i profesjonalne narzędzie, konkurencję dla DSO Nano Dlatego myślałem o zewnętrznym przetworniku, ale.. Dobry ADC to nie są małe koszty; dodatkowo komplikuje się płytka a nie o to przecież chodzi. Teraz już nie wiem w którą stronę lepiej pójść; spróbować wycisnąć 4-6Msps z wewnętrznych przetworników czy jednak pokomplikować wszystko i dać zewnętrzny.
Z poprzednich Twoich wypowiedzi wynikało, że sprzęt jest czysto hobbistyczny... nie widzę problemu w przetaktowaniu uK. A o ile to można wyczytać z dokumentacji (co prawda nie bezpośrednio tylko z diagramu). W niektórych prockach Atmel podawał nawet wzór (chyba dla M88). Co do rozdzielczości to niestety te przetworniki które uda Ci się kupić nie mają więcej niż 8bit. W profesjonalnych oscyloskopach też nie siedzą większe, a tylko szybsze. Dałeś link do projektu AVR Xmegalab i zapewne zauważyłeś, że udostępniają schemat. Na moje oko widać, że znają się na rzeczy. Może zapożycz niektóre rozwiązania (dzielniki) jeśli już koniecznie chcesz mieć więcej sampli A co do sampli... to popatrz na oferty producentów... może coś nowego mają i wyślą Pozdrawiam
Tak, ja wiem, że w profesjonalnych oscyloskopach są zazwyczaj 8 bitowe przetworniki, to jest zupełnie wystarczająco jeśli przekładnie wejściowe są przełączane (w niektórych oscyloskopach słychać nawet przekaźniki), ja tym razem chcę zrobić przełączane dzielniki na jakimś multiplekserze analogowym i dlatego wiem, że 8 bitów mi wystarczy, jedyne wymagania to samplowanie. Spróbuję przetaktować i popędzić ile się da na tych 8 bitach, jeśli bym osiągnął z 6 Msps to pewnie by wystarczyło, po co komu w kieszeni lepsza fura DSO samplowało z częstotliwością 1MHz a i tak było hitem o bardzo dobrych parametrach
TS924ID- chyba trochę mało 1.3V/us.
Z prostokąta zrobi się trapez.
Zróc uwagę raczej na sybkość narastania sygnału wyjściowego a nie na pasmo wzmocnienia jednostkowego.
Bo na wyjściu ma być kilka V.
Noi wszystko zepsułeś Ciężko znaleźć coś sensownego w przystępnej cenie, rail-to-rail z możliwym zasilaniem 3,3V. No pasowało by chociaż te 3V/us, no nic, muszę poszukać coś innego. Na szczęście jeszcze nie kupiłem nic.
Faktycznie szukanie w TME to jest zajęcie na dłuższy czas.
Nawet filtra napięcia zasilającego nie ma.
No i te pasma przenoszenia- raz dla wzmocnienia jednostkowego a drugi dla wtórnika.
No ale coś sensownego może się w końcu znajdzie.
LT1807- w farnell- tylko aż za dobre parametry no i cena.
Przeprowadziłem małe testy, Xmega przy 3,3V pracuje nawet z częstotliwością 64 MHz!!!
Jak długo tak pociągnie? Nie wiem, się potestuje, się zobaczy... Fajna sprawa jeśli chodzi o szybkość a nie o dokładność. Sprawdziłem też max częstotliwość próbkowania dla FCPU 64MHz przy 8 bitowej rozdzielczości i przy obydwu ADC i tak:
przy preskalerze 32 jest to stabilne 2Msps
przy preskalerze 16 jest to 4Msps
wyżej już się wiele nie rośnie, by przy preskalerze 4 osiągnąć ok 4,7 Msps..
(przy tylko 1 przetwoniku udało mi się uzyskać niespełna 8 Msps ale straszne niestabilnie)
Tak się zastanawiam.. 4Msps na kanał to można powiedzieć 2 kanały na których można mierzyć przebiegi po ok 500 KHz, dodatkowo procek taktowany 64MHz(jeśli przejdzie testy) to już można wykonywać jakimś skromnym filtrem interpolację w czasie rzeczywistym.. Co myślicie? Może by tyle wystarczyło? Bo chyba nie ma jak narazie dobrego a przede wszystkim taniego i prostego sposobu na zewnętrzny przetwornik.
XMega128 A3-AU, innej nie mam żeby spróbować.
Że znam ten dokument to nie powiem, przeglądałem ale tam więcej teorii jest niż konkretów do zastosowania. Najwięcej można wyczytać w PDF konkretnego uC.
A czemu pytasz o ten dokument?
Bo się na niego natknąłem a konkretnie punkt 3.8 z rys. 3.9.
Ale oczywiście masz rację, że DSy mają więcej szczegółów, ale czasami w takich ogólnych dokumentach jest coś co naprowadza na jakiś konkret lub uzmysławia, że konkretny procesor ma jakąś specyfikę, którą można wykorzystać.
Dokumentacje podają wszystko dla ogólnych przypadków, w całym zakresie napięć i temperatur.. Ja sprawdziłem w moim konkretnym przypadku.
Że pociągnie to 64MHz? Ani nawet nie pomyślałem. Wrzuciłem kwarc 8MHz i tak sobie zwiększałem skaler PLL, wątpiąc na początku, czy chociaż te 48MHz wyciągnie, a tu takie zaskoczenie...
Ten obrazek co kolega dwa posty wyżej wkleił to się tyczy pełnego zakresu temperatur i napięcia o dokładności 10%.
Z dokumentacji XmegiA3 można wyczytać:
2,7V w temp.25C gwarantuje pełna prędkość. Zresztą to samo jest na 1 stronie dokumentacji każdej Xmegi.
Wracając do tematu... 64MHz Ci zadziałał układ... ale czy miałeś wszystkie peryferia włączone i wykorzystywane? Za jakiś czas jak zechcesz nowy "sprzęt" uruchomić, to może się okazać, że np. EEPROM nie działa albo coś innego.
Tak się domyślałem, że przetaktuje się znacznie, w końcu pamiętam, że selekcjonowane M128 były używane do zastosowań USB (24MHz było potrzebne).
Pozdrawiam
A tak mi się z rozmachu napisało Raczej nie mogę założyć powtarzalności pracy każdego układu przy 2 krotnym przetaktowaniu.. Zostawiłbym chociaż na tych 48MHz, ale wtedy nijak nie idzie uzyskać 4Msps z ADC, albo 32MHz albo 64MHz więc będzie chyba musiało zostać na 32. Mogę potestować w jakim zakresie napięć zasilania to 64MHz się wyciska noi ewentualnie mogę go delikatnie przygrzać (Ale czy to ma sens, temperatury rdzenia i reszty bebechów nie zmierzę zbyt dokładnie).
janbernatCo myślisz o AD8092ARZ?
Bardzo mi się podoba- i cena i parametry.
Ponieważ nie śledziłem DIY i Twojej dotychczasowej wersji- to czy to ma być od DC?
No i do 500kHz sinusoidy?
No i sygnał dodatni i ujemny- a na wyjściu oczywiście 0V w połowie zakresu przetwornika?
No bo tu: http://www.gabotronics.com/development-boards/avr-xmegalab.htm To nie jest DC.
Temperaturę wnętrza to akurat zmierzysz bo Xmegi mają opcję jej pomiaru. Jeśli chodzi Ci ona 64MHz/3V3 to na pewno nie będzie problemów z 64MHz/3V6. Po za tym wciąż nie rozumiem Ciebie... raz piszesz o hobby a teraz piszesz, że nie możesz zagwarantować powtarzalności... Albo myślisz o komercyjnym projekcie albo nie Zdecyduj się Przypomniało mi się, że dobre wzmacniacze to seria OPA. Przeszukaj fora audiofilskie pod kątem schematów przedwzmacniaczy audio. Wzmacniacze audio muszą mieć dużą dynamikę. I jeszcze jedna rada... jak czytasz rail-to-rail to nie wierz, że przy 5V wzmacniacz pracuje od 0,0V do 5,0V. Przykładowy LM324(nie rail-to-rail) działa w przedziale 0,05V do Vcc-1,2V. Natomiast wersja LMV324(niby rail-to-rail) działa w przedziale 0,25V do Vcc. Jeszcze raz przejrzyj schemat gabotronics, tam są fajne rozwiązania układowe.
Bardzo mi się podoba- i cena i parametry.
Ponieważ nie śledziłem DIY i Twojej dotychczasowej wersji- to czy to ma być od DC?
No i do 500kHz sinusoidy?
No i sygnał dodatni i ujemny- a na wyjściu oczywiście 0V w połowie zakresu przetwornika?
No bo tu: http://www.gabotronics.com/development-boards/avr-xmegalab.htm To nie jest DC.
Pierwsze dwie wersje były tylko pod DC, wersja trzecia umożliwia już pomiar AC.. Zasilanie symetryczne czy niesymetryczne WO nie ma tu wspólnego z DC czy AC. Robi się sztuczną masę i jest ok.
Jeśli mam użyć wewnętrznego ADC przy max samplowaniu 4MHz to ma ten bufor przepuścić prostokąt 500KHz(AC i DC- bo skoro AC to i DC też) i sinus do 2MHz.
Ch.M. napisał:
T Po za tym wciąż nie rozumiem Ciebie... raz piszesz o hobby a teraz piszesz, że nie możesz zagwarantować powtarzalności... Albo myślisz o komercyjnym projekcie albo nie Zdecyduj się
Dotychczas było to hobby, wersję 3.0 chciało produkować kilka osób Jednak ja trochę z dystansem podszedłem do tego, wersja ta jeszcze się do produkcji nie nadaje, bardzie jako KIT do montażu Teraz chciałbym już wykonać profesjonalne narzędzie, poświęcić temu więcej czasu i pieniędzy, zobaczyłbym co by z tego wyszło. Trzeba wkońcu jakoś zacząć na tej elektronice zarabiać
Cytat:
I jeszcze jedna rada... jak czytasz rail-to-rail to nie wierz, że przy 5V wzmacniacz pracuje od 0,0V do 5,0V.
...
Jeszcze raz przejrzyj schemat gabotronics, tam są fajne rozwiązania układowe.
Ależ ja o tym wiem, dlatego na offset również trzeba zwrócić uwagę i przy zasilaniu niesymetrycznym i ze sztuczną masą straci się jeszcze troszkę z rozdzielczości przetwornika.
Przykładowo WO który wyżej podałem ma offset max 10 mV a typowy 1.7mV, dużo ale znośnie..
Co do kopiowania rozwiązań z gotowych projektów to nie dla mnie, ja tylko się inspiruję, o kopiowaniu nie ma mowy, bo przy tym nic nowego się nie nauczę.
Teraz chciałbym już wykonać profesjonalne narzędzie, poświęcić temu więcej czasu i pieniędzy, zobaczyłbym co by z tego wyszło. Trzeba wkońcu jakoś zacząć na tej elektronice zarabiać
Oj, to z zegarem powyżej datasheet jednak nie ryzykowałbym.
Tak, wiem. Już mówiłem, tak z rozpędu mi się napisało, 64 MHz robi jednak większe wrażenie niż 32 Zrobiłem mały szybki teścik(Uruchomiony LCD w trybie równoległym 16 Bitowym + 2 przetworniki A/C na 4MHz i 2 kanały DMA do tego), przy napięciu 3,22V przestaje działać, rzy napięciu 3,25 nie za każdym razem startuje, a wiadomo, że np LF33 lubi czasem rzucić nieco poniżej 3.25V.
Drugi test, temperaturowy. Napięcie 3,3V, hot-air ustawiony na min czyli 100 stopni, nadmuch minimalny, odległość ok 10 cm, ledwo zdążyłem przyłożyć to przestało działać, ciężko powiedzieć, było tam w środku ze 40 stopni czy nie bardzo. Przy większym napięciu nie próbowałem bo LCD większego ponoć nie toleruje. Tak więc jak widać te 64 MHz to taka bajka trochę, aż dziw że ruszyło. Ale przynajmniej dobrze wiedzieć, że jak kiedyś trzeba będzie coś szybkie a nie koniecznie dokładne to można zasilić 3,6V i popędzać 64MHz, w domu spokojnie powinno pracować takie urządzenie.
Sprawdź tez co działa, a co nie. Przypuszczam, że EEPROM się posypie prędzej.
Z drugiej strony IMHO takie przetaktowywanie jest bez sensu, namęczysz się, stworzysz niestabilny układ i nic nie zyskujesz. Nawet przetaktowyrując do tych 64MHz raptem uzyskujesz 100% przyrost wydajności, przechodząc na ARM lub AVR32 zyskujesz na dzień dobry kilkaset procent.