Analog Discovery 2 w praktyce (cz. 4) – Analizator stanów logicznych

W artykule opisano sposób użycia analizatora i generatora stanów logicznych zawartych w Analog Discovery 2. 

Analog Discovery umożliwia również analizę oraz generowanie sygnałów cyfrowych. Do dyspozycji mamy 16 niezależnych kanałów o częstotliwości próbkowania 100 MS/s. Oznacza to, że możliwa jest analiza, a także generowanie sygnału o częstotliwości do 50 MHz w standardzie CMOS 3,3 V.

Poprzednie odcinki kursu Analog Discovery 2 w praktyce można znaleźć na łamach portalu Mikrokontroler.pl

Przykłady przedstawione w artykule wykorzystują moduły Logic i Patterns (rysunek 1). Patterns służy za generator sygnałów logicznych, natomiast Logic odpowiada za ich analizę. Aby umożliwić wykonanie przykładów bez dodatkowego sprzętu, będziemy wykonywać analizę sygnałów logicznych wygenerowanych przez generator Analog Discovery 2 (np. sygnału zegarowego, UART, SPI).

Rys. 1. Wybór generatora i analizatora stanów logicznych

Analizator stanów logicznych

Na rysunku 2 przedstawiono interfejs analizatora stanów logicznych. Pojedynczy pomiar (uzyskanie ustalonej ilości próbek danych po wyzwoleniu podstawy czasu) uruchamia się za pomocą przycisku Single. Natomiast pomiar ciągły można uruchomić przyciskiem Run/Stop (1). W polu (2) można ustawić tryb akwizycji danych:

  • Repeated – podstawa czasu jest wyzwalana wraz z sygnałem synchronizacji trigger i ustawiona w punkcie 0 ms,
  • Shift – okno pomiarowe jest przesuwane wraz z podstawą czasu,
  • Screen – gdy podstawa czasu osiągnie koniec okna pomiarowego, przeskakuje na początek okna,
  • Record – „nagrywanie” sygnału przy dużej skali podstawy czasu, np. pełne okno zawiera pomiar trwający 1 minutę.

Rys. 2. Interfejs graficzny analizatora stanów logicznych

Obsługa interfejsu analizatora

Wyzwalanie podstawy czasu jest konfigurowalne za pomocą pól Trigger, Source, Simple, Pulse, Protocol (3).

Pole Trigger zawiera globalne ustawienia podstawy czasu: None (brak synchronizacji), Auto (automatyczna) lub też Normal (konfigurowalna przez użytkownika).

Source umożliwia ustawienie źródła synchronizacji: np. sygnał cyfrowy, oscyloskop, generator funkcyjny itd.

Simple, Pulse i Protocol to tryby synchronizacji sygnałami cyfrowymi:

  • Simple – prosta synchronizacja poziomem logicznym (stan wysoki, niski) lub też zboczem
    (narastające, opadające) ( 3),
  • Pulse – synchronizacja w momencie wystąpienia impulsu o podanej długości trwania ( 4),
  • Protocol – synchronizacja w momencie wystąpienia transmisji zgodnej z danym protokołem
    (np. UART).

Rys. 3. Konfiguracja trybu simple synchronizacji czasu

 

Rys. 4. Konfiguracja trybu pulse synchronizacji czasu. (np. źródło sygnału DIO 0, stan wysoki przez co najwyżej 1 µs)

Podstawę czasu konfiguruje się za pomocą pól Position (pozycja punktu synchronizacji względem punktu „0”) oraz Base (rozdzielczość – czas trwania jednej podziałki, np. 5 ms/div) (4).

Dodawanie mierzonych sygnałów odbywa się za pomocą przycisku plus, natomiast usuwanie za pomocą minus. Klknięcie w ikonę notatnika umożliwia zmianę nazwy sygnału na definiowaną przez użytkownika. Natomiast przycisk „T” ustawia globalny rodzaj synchronizacji w trybie single (np. zbocze narastające) (5).

W polu (6) umieszczone są mierzone sygnały. Kolumna Name zawiera nazwę sygnału, natomiast ikona notatnika pozwala na jej zmianę. Kolumna Pin zawiera nazwę mierzonego sygnału. Natomiast kolumna T umożliwia indywidualne ustawienie trybu synchronizacji dla każdego sygnału w trybie Simple.

Obszar (7) zawiera zmierzone dane. W lewym górnym rogu opisany jest stan synchronizacji – Config (konfigurowanie Analog Discovery 2), Armed (oczekiwanie na sygnał synchronizacji), Busy (wykonywanie operacji pomiaru) lub też Done (pomiar wykonany, wystąpiła synchronizacja podstawy czasu).

Narzędzia pomocnicze

Przycisk View (powyżej (1)) umożliwia uruchomienie narzędzi pomocniczych (rysunek 5):

  • Data – wyświetla zmierzone próbki danych,
  • Event – wyświetla zdarzenia podczas analizy protokołów (np. rozpoczęcie transmisji, zapis konkretnej wartości itd.),
  • Measurements – umożliwia pomiar parametrów sygnałów cyfrowych (częstotliwość, okres, szerokość impulsu itd.),
  • Logging – zapis pomierzonych danych do pliku,
  • Cursors – pomiar odległości między dwoma punktami pomiarowymi (różnica w czasie),
  • Notes – notatki użytkownika.

Rys. 5. Dodatkowe narzędzia ułatwiające analizę zmierzonych danych

Generator stanów logicznych

Na rysunku 6 przedstawiono interfejs generatora stanów logicznych. Przycisk Run/Stop (1) uruchamia generowanie sygnału. Generowany sygnał może być zsynchronizowany z innym sygnałem (2). Pole Trigger umożliwia wybranie źródła synchronizacji – np. sygnał cyfrowy, oscyloskop, generator funkcyjny. Natomiast w polu Wait można ustawić opóźnienie generacji sygnału po wystąpieniu synchronizacji. Run umożliwia konfigurację czasu trwania generowanego sygnału (continuous – ciągła generacja sygnału). Alternatywnie można też ustawić ilość powtórzeń sekwencji sygnału logicznego (pole repeat).

Rys. 6. Interfejs graficzny generatora sygnałów logicznych

Pole (3) zawiera interfejs dodawania sygnałów logicznych:

  • plus – dodaje sygnał logiczny,
  • minus – usuwa sygnał logiczny,
  • ikona notatnika – umożliwia edycję nazwy sygnału oraz edycję parametrów sygnału (rysunek 7),
  • Show – ustawienie kolumn, które są widoczne w tabeli aktywnych sygnałów (np. parametry) (4).

Rys. 7. Edycja parametrów sekwencji sygnału logicznego

Generowanie sygnałów logicznych odbywa się w następnych etapach:

  • Wybranie sygnału, dla którego projektujemy sekwencję sygnałów logicznych (kolumna Name), ewentualnie edycja nazwy użytkownika;
  • Kolumna Pin wyświetla pierwotną nazwę sygnału,
  • Kolumna Output umożliwia konfigurację typu wyjścia sygnału:
    • PP (push-pull – standardowe wyjście),
    • OD (open-drain – otwarty dren [równoznaczne z otwartym kolektorem]),
    • OS (open-source – otwarte źródło [równoznaczne z otwartym emiterem]).

Wyjścia OD i OS przydają się w implementacji protokołów z tzw. iloczynem na drucie, gdzie nie ma jednostki sterującej arbitrażem na magistrali, np. I2C.

  • Kolumna Type – ustawienie rodzaju sekwencji sygnału logicznego:
    • constant – stała wartość 0 lub 1,
    • clock – zegar – parametry: częstotliwość, wypełnienie (duty cycle), przesunięcie fazy,
    • pulse – impuls – parametry: stan logiczny na początku sekwencji, czas trwania stanu wysokiego i niskiego,
    • random – losowe próbki,
    • custom – sekwencja użytkownika.
  • Parameters – liczba parametrów zależna od rodzaju sekwencji.

Przykład: symulacja protokołu UART

W tym przykładzie moduł Patterns posłuży do generowania transmisji UART, natomiast moduł Logic do analizy protokołu:

  • Sygnał DIO 0: TX, generowanie transmisji UART,
  • Sygnał DIO 1: RX, analiza transmisji UART.

Aby móc analizować protokół UART należy połączyć sygnał 0 i 1 (rysunek 8).

Rys. 8. Połączenie sygnałów TX i RX

Generowanie protokołu UART – Patterns

  1. Aby dodać sygnał, klikamy ikonę plus (1), a następnie wybieramy DIO 0 z listy dostępnych sygnałów (2) (rysunek 9).

 

Rys. 9. Dodanie sygnału do generatora sygnałów logicznych

 

  1. Następnie konfigurujemy sygnał (rysunek 10):
    1. Edycja nazwy sygnału – klikając w notatnik (1) zmieniamy wyświetlaną nazwę sygnału na TX (2). Fizyczny sygnał jest wyświetlany w polu Pin (3).
    2. Ustawiamy typ wyjścia na PP (push-pull) (4).
    3. Zmieniamy typ sekwencji na custom (użytkownika) (5).
    4. Przechodzimy do trybu edycji sekwencji klikając w notatnik (6).

 

Rys. 10. Interfejs graficzny konfiguracji generowanego sygnału

  1. Edycja generowanej sekwencji.

 

UART jest podstawowym interfejsem szeregowym – składa się z jednej linii danych, transmitującej 8-bitowe dane. Dane są przesyłane asynchronicznie, tzn. odstęp między danymi jest ustalany z góry, nie występuje linia zegarowa. Transmisja danych odbywa się w nastepujący sposób:

  • Bit startu (stan niski – 0),
  • 8 bitów danych (rozpoczynających się od bitu najmłodszego – LSB),
  • Opcjonalny bit parzystości (określa, czy występuje parzysta liczba „jedynek” – używany jest do kontroli poprawności transmisji, nie jest używany w przykładzie),
  • Bit stopu (stan wysoki – 1).

W przykładzie wygenerujemy transmisję UART bajtu danych o wartości 0x82 (10000010), co daje sekwencję bitów przedstawioną w tabeli 1.

Tab. 1. Sekwencja bitów transmisji UART

Bit startu D0 D1 D2 D3 D4 D5 D6 D7 Bit stopu
0 0 1 0 0 0 0 0 1 1

Interfejs graficzny edycji sekwencji przedstawiony jest na rysunku 11.

Edycja sekwencji polega na ustaleniu wartości poszczególnych próbek:

  1. Na początku ustawiamy częstotliwość próbkowania (1), a także ilość próbek w sekwencji (2) – w przykładzie użyjemy prędkości 100kHz, i 10 próbek (patrz: 1).
  2. Klikając na pola poszczególnych próbek (3) zmieniamy stan logiczny próbki. Alternatywnie można wpisać wartość poszczególnej próbki w edytorze tekstowym (4).

Rys. 11. Interfejs graficzny edycji sekwencji

Po konfiguracji sekwencji należy uruchomić generowanie sygnału (Run). Ustawienia synchronizacji sygnału są następujące: Trigger: None, Wait: none, Run: continuous.

Analiza protokołu UART – Logic

  1. Aby dodać sygnał protokołu UART, należy kliknąć ikonę plus (1) i z rozwijanej listy wybrać UART (2) (rysunek 12).

Rys. 12. Dodawanie sygnału, który ma być mierzony

  1. Po dodaniu sygnału otworzy się okno dialogowe z konfiguracją protokołu UART (rysunek 13). Należy ustawić wszystkie opcje tak, jak na rysunku.

 

Rys. 13. Konfiguracja protokołu

  1. Następnie należy skonfigurować wyzwalanie podstawy czasu (trigger):
  • Mode: repeated,
  • Source: digital,
  • Tryb synchronizacji: Protocol -> UART -> Break ( 14),
  • Podstawa czasu: position: 0, base: 50 µs/div.

Rys. 14. Konfiguracja synchronizacji UART

Po konfiguracji klikamy przycisk Run, uruchamiając akwizycję danych. Jeżeli wszystkie ustawienia zostały wykonane poprawne, na ekranie powinniśmy ujrzeć transmisję bajtu 0x82 (rysunek 15).

Rys. 15. Pomiar protokołu UART – transmisja bajtu 0x82


Autor artykułu zdobył jedną z czterech głównych nagród w międzynarodowym konkursie inżynierskim Digilent Design Contest 2018, który odbył się w Rumunii. Przedmiotem konkursu było zaprojektowanie i skonstruowanie urządzenia na bazie sprzętu dostarczonego przez organizatora, w tym przypadku przyrządu Analog Discovery 2. Projekt Jakuba Wiczyńskiego o nazwie Additive Synthesizer otrzymał nagrodę specjalną Digilent Instrumentation Prize, przyznawaną za najlepsze wykorzystanie zasobów sprzętowych.

O autorze