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.

Miniscope v3 - GUI dla 1-kanałowego oscyloskopu

ostrytomasz 08 Paź 2009 19:42 7559 3
  • Miniscope v3 - GUI dla 1-kanałowego oscyloskopu

    Miniscope v3 to program mający w założeniu pełnić rolę prostego uniwersalnego interfejsu graficznego dla cyfrowego oscyloskopu.
    Dwie wcześniejsze wersje programu były wyspecjalizowane do pracy z określonym typem urządzenia pomiarowego. Dosyć szybko okazało się, że znaczna część kodu w tego typu programie nie ma związku z urządzeniem wejściowym i może zostać oddzielona od jego obsługi.
    Kontakt ze światem zewnętrznym (aka urządzeniem pomiarowym) zapewniają programowi relatywnie proste biblioteki linkowane dynamicznie.

    Najważniejsze ograniczenia:
    - 1 kanał akwizycji - ograniczenie dotyczy zarówno interfejsu bibliotek jak i ogólnej obsługi, np. manipulacji wykresem,
    - bardziej nadaje się do współpracy z DSO (urządzeniem buforującym dane) niż RTO (urządzeniem próbującym przesyłać dane w czasie rzeczywistym),
    - wydajność rysowania niższa niż oczekiwana, wymaga dopracowania lub zmiany podejścia do wyświetlania większych ilości próbek - rysowanie przebiegu o kilkunastu tysiącach punktów kilka razy na sekundę potrafi zużyć kilkaset MHz z czasu procesora,
    - kwestia przenośności kodu jest zignorowana - kod jest dosyć silnie zależny od bibliotek VCL.

    Cechy pozytywne:
    - moduł wyświetlający wykres jest skalowalny (zmienia swoje rozmiary wraz z rozmiarami okna) oraz potrafi skalować swoją zawartość,
    - sposób obsługi przypominać ma w zamyśle pracę z programem graficznym - poszczególne narzędzia (kursory, zoom, przesuwanie) używane są przy pomocy lewego (zoom in, kursor 1, przeciąganie zawartości) i prawego (zoom out, kursor 2) przycisku myszy,
    - brak zależności od komponentów czy bibliotek zewnętrznych (wyjątek: json-cpp - dystrybuowany wraz ze źródłami), środowiskiem jest darmowe TurboCpp Explorer.

    Funkcje niezależne od możliwości biblioteki urządzenia wejściowego:
    - tryby pracy oscyloskopu oraz analizatora widma
    - eksport danych do formatów JSON, CSV oraz bitmapy
    - statystyka - wartość minimalna, maksymalna, średnia, częstotliwość przebiegu

    Funkcje uzależnione od biblioteki urządzenia:
    - tryb pracy rejestratora przebiegów wolnozmiennych (wymaga dostępności ręcznego wyzwalania),
    - tryby wyzwalania: ręczne, zbocze narastające/opadające, ciągłe,
    - sterowanie czułością, częstotliwością odświeżania, typem sprzężenia, rozmiarem bufora akwizycji, poziomem wyzwalania,
    - kalibracja czułości.


    Aktualnie dostępne są trzy biblioteki urządzeń wejściowych. Ze względu na współdzielony między bibliotekami i programem głównym plik nagłówkowy katalogi z projektami bibliotek powinny znajdować się na tym samym poziomie co katalog programu głównego.





    1) Armscope.dll - jedyna biblioteka o zastosowaniu praktycznym, współpraca z układem z AT91SAM7S, użyty wbudowany ADC pozwala na próbkowanie 500 kSps, 8 bit
    Miniscope v3 - GUI dla 1-kanałowego oscyloskopu
    Schemat elektryczny znajduje się wśród załączników. Nie udostępniam niestety schematu PCB ze względu na kilka błędów które się do niego wdarły, poprawienie ich byłoby niewiele mniej pracochłonne niż routing od nowa.
    Układ został zamknięty w obudowie KM-55 (120x70x40).
    Miniscope v3 - GUI dla 1-kanałowego oscyloskopu

    2) Hidpic.dll - połączenie z Microchip Generic HID Demo, ze względu na brak buforowania jest to raczej szybki woltomierz (choć tę samą obelgę można puścić też pod adresem armscope.dll)
    Biblioteka pełni funkcję demonstracyjną - współpracuje ze "standardowym" kitem PICDEM USB lub podobnym, została skompilowana przy użyciu MinGW, do jej kompilacji nie jest wymagane ściąganie DDK.

    3) Wavein.dll - odczyt próbek z karty dźwiękowej; brak jakichkolwiek ustawień, nie jest to alternatywa dla programów takich jak np. Zelscope.

    Pisanie bibliotek przebiega dosyć szybko. Kod hidpic.dll i wavein.dll jest na tyle krótki, że nadaje się na szablon. Biblioteka musi udostępnić strukturę z opisem możliwości urządzenia i wyesportować zestaw minimum 8 funkcji.
    Konwencja wywołań to __stdcall bez dekoracji nazw. Użyteczne zestawienie domyślnego zachowania kompilatorów: http://www.willus.com/mingw/yongweiwu_stdcall.html .

    Paczka miniscope_v3_20091008.zip (1,6 MB) zawiera aktualny snapshot projektu głównego i zależnych od niego bibliotek:
    - miniscope v3, wersja 0.0.12,
    - źródła wavein.dll,
    - źródła hidpic.dll,
    - źródła armscope.dll,
    - miniscope.exe, cg32.dll, wavein.dll, hidpic.dll, armscope.dll.

    Kosztorys:
    - oprogramowanie - czas własny, trudno mi jest ocenić ramy ze względu na brak regularności przy pisaniu,
    - przystawka współpracująca z armscope.dll - ok. 40 PLN (AT91SAM7S64 zakupiony kilka lat temu - 25 PLN, gniazdo USB B, 1 przekaźnik, kwarc, kilka diod Schottky), elementy są pospolite, resztę drobnicy posiadałem w zapasach (część z nich jak widać na zdjęciu pamiętała czasy głębokiego PRL-u),
    - przystawka współpracująca z hidpic.dll - ze względu na samplowy PIC18F2550 bez kosztów.

    Strona główna projektu: http://tomeko.net/miniscope_v3/index.php
    Program wydaje mi się w tym momencie dosyć kompletny - osiągnął funkcjonalność zbliżoną do wcześniejszej, zamkniętej wersji (miniscope v2) i nadaje się do codziennej pracy.
    Program prawdopodobnie będzie jeszcze przez jakiś czas rozwijany, więc zgłoszenia błędów, uwagi (w miarę możliwości konstruktywne) i sugestie będą mile widziane.


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • #3 09 Paź 2009 20:53
    ostrytomasz
    Poziom 22  

    Petros napisał:
    W czym programowałeś?


    Zgodnie z opisem - Turbo C++ 2006 Exp.

    Cytat:
    Ten wykres rysowałeś "ręcznie" czy to jakaś kontrolka? Jak rozwiązałeś problem przedstawiania szybkozmiennych sygnałów ( wykres sie przesuwa ? )


    Wykres rysowany jest ręcznie (interfejs: Display + jedyna implementacja: DisplayOpenGL).
    Brak jest automatycznego scrollowania, wykres zawsze przedstawia aktualny stan bufora. Jeżeli chodzi o automatyczne przesuwanie, to wydaje mi się, że bardziej pasowałoby ono do przebiegów wolnozmiennych, przy szybszym przesuwaniu wykres zlewałby się w jedną plamę.

  • #4 26 Cze 2010 11:39
    ostrytomasz
    Poziom 22  

    Kilka osób śledzi temat, pozwolę sobie na małą aktualizację.

    1. Niska wydajność rysowania była skutkiem używania funkcji CodeGuard. Funkcja ta sama w sobie jest niezastąpiona, nie powinna być jednak używana w wersji release. Aktualnie w teście rysowanie wykresu zawierającego 1,25 miliona próbek trwa około 260 ms na zestawie Pentium M@600 MHz + ATI R9000M.

    2. Środowisko Turbo C++ 2006 Explorer nie jest już niestety legalnie dostępne dla nowych użytkowników - mirror z instalką żyje, ale nie można już zarejestrować produktu i wygenerować darmowego klucza na stronie producenta.

    3. Dla układu z mikrokontrolerem AT91SAM7S64 dostępny jest alternatywny zestaw firmware + biblioteka (armscope_dma.dll). Oprogramowanie to różni się od wcześniejszego tym, że układ próbkuje ze stałą, maksymalną częstotliwością i przesyła dane w czasie rzeczywistym. Ewentualna decymacja danych i symulowane "wyzwalanie" wykonywane są przez współpracującą bibliotekę dll. Przy tym podejściu długość bufora danych (ciągłego w czasie zestawu próbek) nie jest ograniczona przez możliwości mikrokontrolera.

    4. Najważniejszą funkcją dodaną do programu PC jest zapis danych na dysk w czasie rzeczywistym. W połączeniu z biblioteką armscope_dma.dll umożliwia to zarejestrowanie ciągłego przebiegu z próbkowaniem 500 kSps o długości do 1e9 próbek (ograniczenie długości wynika z przyjętego formatu zapisu przypominającego AVI, rozmiar pliku jest ograniczony do 4 GB).