Kurs DSP Audio, czyli SigmaDSP dla każdego (2). Środowisko SigmaStudio

Kurs DSP Audio, czyli SigmaDSP dla każdego (2). Środowisko SigmaStudio

W poprzednim numerze EP opisany został zestaw uruchomieniowy DSP1701A_DSP_MK2 z procesorem ADAU1701A, którego wygląd pokazano na fotografii 1. Zgodnie z zapowiedzią tematem drugiej części kursu jest środowisko IDE SigmaStudio firmy Analog Devices – niezbędne do konfiguracji i programowania procesora DSP, za pomocą którego utworzymy pierwszy projekt testowy.

Przed rozpoczęciem pracy musimy przygotować uruchomioną płytkę DSP1701A_DSP_MK2 z zasilaczem 5 VDC/1 A, programator USBi oraz komputer PC z systemem Windows (który dla usprawnienia pracy powinien być wyposażony w kartę dźwiękową) i głośniki aktywne, choć można oczywiście użyć innego źródła sygnału audio i monitora. Niezbędne jest też okablowanie mini jack 3,5 mm stereo z adapterami RCA/jack, w zależności od użytego standardu gniazd zastosowanych we współpracujących urządzeniach.

Fotografia 1. Płytka bazowa DSP1701A_DSP_MK2

SigmaStudio (rysunek 1) jest kompletnym, graficznym środowiskiem IDE wspierającym wszystkie procesory z rodziny SigmaDSP oraz niektóre inne układy audio z oferty Analog Devices. W aktualnej wersji 4.7.0.1381 można je pobrać ze strony: https://www.analog.com/en/resources/evaluation-hardware-and-software/software/ss_sigst_02.html#software-overview

Rysunek 1. Oprogramowanie SigmaStudio

IDE dostępne jest nieodpłatnie, także do zastosowań komercyjnych. Do jego instalacji i uruchomienia niezbędny jest komputer z systemem Windows 7 lub wyższym oraz jeden wolny port USB, którego użyjemy do podłączenia programatora USBi. Oprogramowanie działa bez problemu także w Windows 11, niestety nie są natomiast wspierane inne systemy operacyjne. Instalacja za pomocą pliku adi_sigmastudio-rel4.7-x64.exe przebiega standardowo.

Ze względu na sygnalizowane problemy z działaniem programatora USBi na portach USB3.0/USBC, z którymi osobiście się nie spotkałem, korzystając w mojej pracy z kilku konfiguracji PC, dla pewności lepiej korzystać z starszych portów USB2.0. Po instalacji SigmaStudio należy podłączyć programator USBi poprzez dołączony w komplecie przewód mini USB, tymczasowo jeszcze bez podłączonego zestawu DSP1701A_DSP_MK2. W menedżerze urządzeń, w zakładce Kontrolery uniwersalnej magistrali szeregowej, powinna pojawić się pozycja Analog Devices USBi, co potwierdza prawidłową instalację sterowników programatora (rysunek 2).

Rysunek 2. Poprawnie zainstalowany programator USBi

Po potwierdzeniu poprawności instalacji należy uruchomić SigmaStudio. Proces tworzenia aplikacji na procesory DSP składa się z czterech kroków.

Pierwszym krokiem, jaki należy wykonać po uruchomieniu oprogramowania, jest otwarcie nowego projektu z menu File\New Project (Ctrl+N). Wszystkie niezbędne pliki, podobnie jak w innych IDE, zgrupowane są w projekt zapisywany poleceniem File\Save (Ctrl+S), najlepiej w nowo utworzonym katalogu (w tym przypadku ADAU1701_MK2_Cz3_ProjektTestowy_1). IDE umożliwia jednoczesną pracę z kilkoma projektami. Przy użyciu menu View\ mamy możliwość skonfigurowania dostępnych na ekranie zakładek narzędziowych oraz ustalenia powiększenia obszaru roboczego, co zaprezentowano na rysunku 3. W nowym projekcie, przed konfiguracją systemu DSP, widoczny jest czysty główny obszar roboczy, który – w zależności od podjętych działań – będzie uzupełniany o kolejne zakładki zawierające konfigurację sprzętową, konfigurację pamięci oraz właściwy (hierarchiczny) schemat aplikacji. Do rozpoczęcia pracy niezbędna jest widoczność zakładki Tree Toolbox, zawierającej (w zależności od wykonywanej czynności): biblioteki obsługiwanych układów, programatorów lub biblioteki dostępnych algorytmów.

Rysunek 3. Środowisko SigmaStudio z utworzonym nowym projektem testowym ADAU1701_MK2_Cz3_ProjektTestowy_1

Budowa interfejsu użytkownika jest standardowa. Okno aplikacji podzielone jest na: 

  • obszar menu,
  • obszar ikon poleceń,
  • główny obszar projektu (Program Window), w którym po wyborze procesora DSP dostępne są główne zakładki schematu (Schematic) i konfiguracji sprzętowej (Hardware Configuration) z zakładkami konfiguracji systemu (Config), procesora DSP (ICx 170x/140x Register Control) i pamięci EEPROM (ICx – WinE2PromLoder),
  • ToolBoxy z układami procesorów SigmaDSP, pozostałymi konfigurowalnymi układami audio oraz elementami bibliotecznymi, wyświetlanymi w zależności od aktywnej zakładki w oknie głównym projektu,
  • okienka statusu wyświetlające informacje o zasobach systemowych DSP i pamięci EEPROM (Resources), umożliwiające podgląd zawartości plików generowanych przez kompilator i linker (Output) oraz informacje o komunikacji programatora z DSP, pozwalające na podgląd przesyłanych danych i parametrów wraz z możliwością ich edycji (Capture Window),
  • paska statusu, raportującego stan projektu oraz komunikacji z programatorem USBi.

Drugim krokiem po założeniu nowego projektu jest konfiguracja zestawu DSP1701A_DSP_MK2. Konieczna jest weryfikacja ustawienia zwór odpowiadających za działanie układu PLL – powinny się znajdować w położeniu ustalającym krotność 256 częstotliwości próbkowania fs (zwora M0: zwarte wyprowadzenia 2–3, zwora M1: zwarte 1–2). W przypadku zestawu DSP1701A_DSP_MK2 z zastosowanym kwarcem 11,2896 MHz i ustawioną krotnością PLL=256 częstotliwość próbkowania fs wynosi 44,1 kHz, odpowiadając próbkowaniu materiału audio na płycie CD. Przy wyborze kwarcu 12,288 MHz system skonfigurowany jest do obróbki z próbkowaniem 48 kHz, czyli zgodnej z materiałem audio zapisywanym na płytach DVD. W celu zmiany fs z listy rozwijanej paska narzędzi, zgodnie z rysunkiem 4a, należy wybrać wartość 48 kHz i ustawić ją jako domyślną częstotliwość próbkowania systemu, co zostanie potwierdzone odpowiednim komunikatem, pokazanym na rysunku 4b.

Rysunek 4a, b. Ustawienie częstotliwości fs i potwierdzenie ustawień

Opisane czynności przy wyborze fs dostępne są też w menu Action\Set System Sampling rate (Ctrl+U). Zmiana fs możliwa jest także podczas edycji projektu, należy jednak panować nad ustawieniami, gdyż niepoprawne skonfigurowanie może prowadzić do problemów z funkcjonowaniem procesora DSP. Następnie należy ustawić zworę układu generatora w położenie OSC, aktywując tym samym taktowanie DSP sygnałem z wbudowanego generatora. Podczas uruchamiania projektu testowego będziemy korzystać z zewnętrznego zasilacza 5 V, w związku z tym musimy zdjąć zworę USBi5V i podłączyć zasilanie do złącza PWR5V. Pomimo możliwości zasilania z wykorzystaniem napięcia 5 V z programatora USBi, jest to rozwiązanie zdecydowanie niezalecane ze względu na spadek napięcia na kluczach programatora, co – w połączeniu z gorszej jakości zasilaniem z portu USB – może skutkować niepoprawnym działaniem płytki zasilanej zaniżonym napięciem. To zaś ma wpływ m.in. na działanie obwodów WB i RESET. Należy także pamiętać, by zdjąć pozostałe zwory, szczególnie I²C/SBT i WP.

Kolejną czynnością jest ustalenie konfiguracji sprzętowej Hardware Configuration odpowiadającej płytce DSP1701A_DSP_MK2. Zakładając, że planujemy pracę „samodzielną” zestawu, w obszar roboczy musimy przeciągnąć z Toolboxa bloczki: procesora DSP ADAU1701A, pamięci E2PROM, programatora USBi oraz odpowiednio je połączyć, co pokazano na rysunku 5. Każdy z bloczków ma „punkty” przyłączeniowe, które – w zależności od typu – oznaczone są różnymi kolorami:

  • zielony – wejście audio,
  • niebieski – wyjście audio,
  • czerwony – sterowanie oraz GPIO.
Rysunek 5. Konfiguracja sprzętowa i informacja o typie wyprowadzenia

Po ustawieniu kursora myszy nad wybranym punktem otrzymujemy krótką informację o rodzaju sygnału dostępnego na połączeniu, co widać na rysunku 5. Warto zapoznać się z wyświetlaną informacją, gdyż połączenie nieodpowiednich punktów może powodować błędy lub problemy z działaniem aplikacji. Typy łączonych sygnałów muszą się zgadzać – jest to szczególnie istotne w przypadku korzystania z GPIO ADC, gdzie bardzo często mylony jest sygnał audio ze sterującym sygnałem analogowym, pochodzącym z przetwornika ADC GPIO. Podobna sytuacja ma miejsce np. wtedy, gdy nie są zachowane typy zmiennych sterujących pracą bloków funkcjonalnych (np. multiplekserów lub regulatorów głośności), co zostanie opisane w dalszej części kursu przy okazji obsługi GPIO.

Przy konfiguracji USBi należy zwrócić szczególną uwagę na typ magistrali komunikacyjnej i adresy poszczególnych układów. USBi umożliwia programowanie całej rodziny procesorów Sigma DSP przy użyciu interfejsów I²C i SPI, podobnie jest w przypadku pamięci EEPROM. ADAU1701 w zestawie Sigma DSP komunikuje się z EEPROM i USBi poprzez interfejs szeregowy I²C. W związku z możliwością wyboru adresów ADAU1701 i EEPROM należy każdorazowo skontrolować poprawność ich konfiguracji (ADAU1701 – 0x68, E2PROM – 0xA0). Jest to bardzo ważny punkt, ponieważ:

Uwaga: programator USBi ma wbudowaną pamięć EEPROM, której pomyłkowe zaprogramowanie, np. przy błędnym ustawieniu adresu, spowoduje jego trwałe uszkodzenie. Zawsze przy współpracy z zestawem DSP1701A_DSP_MK2 należy używać domyślnych adresów ADAU1701 – 0x68, EEPROM – 0xA0!

W przypadku projektowania własnego sprzętu pracującego w trybie SELFBOOT należy ustawić adres pamięci EEPROM bez zmian (0xA0), ponieważ ADAU1701A obsługuje odczyt tylko z tej lokacji – sam procesor DSP może mieć inny adres magistrali I²C.

Trzecim krokiem jest odpowiednie skonfigurowanie części sprzętowej procesora DSP. Konfiguracja oczywiście zależna jest od realizowanego projektu. Dla przypomnienia warto spojrzeć na budowę wewnętrzną ADAU1701A, którą pokazano na rysunku 6 i określić bloki funkcjonalne używane w projekcie, które będą wymagały konfiguracji.

Rysunek 6. Schemat blokowy ADAU1701A (za notą Analog Devices)

Po skonfigurowaniu systemu w obszarze roboczym pojawiają się dwie dodatkowe zakładki: IC1-1701x/1401x Register Control i IC2 – WinE2PromLoader, odpowiadające elementom składowym DSP1701A_DSP_MK2.

W pierwszej zakładce, pokazanej na rysunku 7, ustalamy wewnętrzną konfigurację rejestrów ADAU1701A: ustawiamy cykl programu DSP, wybieramy i konfigurujemy aktywne interfejsy sygnału audio AD/DA, konfigurujemy porty szeregowe Serial Input, Output, aktywujemy i konfigurujemy tryb GPIO oraz współpracujące wyprowadzenia GPIO (Control ADC). Szczegółowe opisy konfiguracji zależą od aplikacji DSP i będą pokazywane na przykładach w kolejnych częściach kursu. Projekt testowy nie wymaga zmian w domyślnej konfiguracji.

Rysunek 7. Konfiguracja wewnętrzna DSP ADAU1701A

W drugiej zakładce (rysunek 8) zgrupowane są operacje przeznaczone do obsługi pamięci EEPROM. Możliwe jest ustawienie parametrów pamięci (takich jak wielkość i długość bufora zapisu), dostępne są operacje kasowania, programowania i odczytu pamięci wraz z podglądem jej zawartości i możliwością wykonywania operacji plikowych (zapis/odczyt).

Rysunek 8. Konfiguracja i obsługa pamięci E2PROM

Oprócz zakładki WinE2Prom Loader konieczna jest jeszcze dodatkowa parametryzacja EEPROM w zakładce Config. W tym celu, po zaznaczeniu bloku E2Prom, klikamy na nim prawym klawiszem myszy w celu wywołania menu podręcznego, pokazanego na rysunku 9.

Rysunek 9. Menu właściwości E2Prom

Po wybraniu opcji Properties uzyskamy dostęp do dodatkowych ustawień konfiguracji pamięci EEPROM, zgodnie z rysunkiem 10.

Rysunek 10. Okienko parametrów EEPROM

W tym miejscu możemy skonfigurować (oprócz wcześniejszych ustawień) dodatkowo prędkość transmisji I²C i długość rejestru adresowego pamięci. Wpisane wartości odpowiadają konfiguracji pamięci 24LC256T.

Uwaga: w przypadku błędów programowania warto sprawdzić zawartość tej zakładki i zweryfikować poprawność ustawień z kartą katalogową producenta EEPROM.

Po konfiguracji pamięci EEPROM należy zamknąć okno i zapisać zmiany w projekcie.

Czwartym i ostatnim krokiem jest utworzenie schematu aplikacji, weryfikacja jego działania i zaprogramowanie DSP. W tym celu przechodzimy do zakładki Schematic w obszarze roboczym – po przełączeniu zakładek zmieni się zawartość toolboxa i będzie on zawierał narzędzia do tworzenia schematu (Schematic Design) oraz biblioteki bloków (IC1-ADAU1701), obsługiwanych przez procesor ADAU1701A.

Obsługa edytora jest intuicyjna: do obszaru roboczego przeciągamy elementy z biblioteki bloków lub narzędzi do tworzenia schematu, odpowiednio je łącząc, co pokazano na rysunku 11.

Rysunek 11. Edytor schematów SigmaStudio

Do schematu można dodawać opisy (User Comment) i grafiki (User Image). Połączenia pomiędzy blokami tworzone są automatycznie, co wymaga czasem korekty przebiegu „drutu”. Po wskazaniu pierwszego punktu połączenia i przytrzymaniu lewego klawisza myszy należy przemieścić kursor nad punkt docelowy – w ten sposób połączenie zostanie utworzone. W dowolnym momencie możliwa jest modyfikacja przebiegu połączenia poprzez kliknięcie na przewodzie i odpowiednie przesunięcie podświetlonych uchwytów. Po wybraniu łącznika i kliknięciu prawym przyciskiem myszy pojawi się menu podręczne z dodatkowymi opcjami edycji połączenia, takimi jak: usunięcie, dodanie kolejnych punktów uchwytu, usunięcie ustawień użytkownika, wyrównanie obiektów względem połączenia. Aby dodać rozgałęzienie połączenia sygnału, trzeba użyć narzędzia T Connection. Należy zwrócić uwagę na użycie bloku T Connection odpowiedniego dla procesora DSP, gdyż kompilator nie sygnalizuje błędów, a program przygotowany na ADAU1701 nie będzie działał poprawnie np. po użyciu bloku T Connection przeznaczonego dla ADAU1772. Aby zachować czytelność schematu, możliwe jest – zamiast prowadzenia „długich” połączeń przewodowych – zastosowanie etykiet (Alias) do każdego sygnału. W celu użycia etykiety należy wybrać niepodłączony punkt podłączeniowy bloku i para etykiet zostanie dodana automatycznie. Edycja etykiety dostępna jest pod prawym przyciskiem myszy – możemy zmienić nazwę, dodać, skopiować, wyciąć lub znaleźć etykietę źródłową bądź docelową, co pokazano na rysunku 12.

Rysunek 12. Narzędzia etykiet

Edycja bloków funkcjonalnych odbywa się w klasyczny sposób, bloki można przesuwać, usuwać, zaznaczać, zarówno pojedynczo, jak i grupami, a ponadto możliwa jest edycja nazw i parametrów. Nie odbiega to zatem od standardowej obsługi obiektów w systemie Windows. Podczas rysowania schematu warto zadbać o jego czytelność – oprócz „ręcznego” korygowania przebiegu połączeń jest kilka narzędzi edycyjnych, dostępnych w menu (Format\Align) i ułatwiających rozmieszczenie oraz wyrównanie bloków funkcjonalnych. Wyrównanie odbywa się po zaznaczeniu bloków i wskazaniu opcji: Center Vertical/Horizontal, Left/Right, Top/Bottom (Ctrl+E/H, +L/R, +T/B) lub po wybraniu odpowiedniej ikony z paska narzędzi, pokazanego na rysunku 13.

Rysunek 13. Narzędzia wyrównania elementów

Niektóre z bloków funkcjonalnych mogą zostać rozbudowane o obsługę większej liczby kanałów, np. poprzez dodanie kolejnych kanałów regulatora głośności lub zwiększenie liczby regulowanych parametrów (nowe częstotliwości regulacji korektora graficznego). Odpowiednie menu, pokazane na rysunku 14, dostępne jest po zaznaczeniu bloku i naciśnięciu (poza obszarem zmiany parametrów) prawego klawisza myszy w obszarze bloku, który chcemy rozbudować. Analogicznie możemy zredukować konfigurację oraz przeprowadzić pozostałe operacje edycyjne. Wybierając odpowiednio opcje Grow/Reduce i Add/Remove, dostosowujemy blok do obróbki odpowiedniej liczby kanałów lub zwiększamy liczbę obrabianych parametrów.

Rysunek 14. Narzędzia edycji bloku

Edycja parametrów odbywa się w sposób intuicyjny, gdyż większość bloków wyposażona jest w przyciski, suwaki, pokrętła lub pola tekstowe, do których dostęp uzyskujemy po przyciśnięciu prawego klawisza myszy na odpowiednim elemencie manipulacyjnym, aktywując menu zmiany parametrów, co pokazano na rysunku 15.

Rysunek 15. Narzędzia edycji parametrów bloku

Tak jak wspominałem, edytor schematów jest hierarchiczny, co ułatwia tworzenie bardziej złożonych aplikacji, wprowadza porządek oraz przyspiesza późniejszą analizę działania układu. Zawsze głównym (nadrzędnym) schematem jest arkusz (zakładka) Main, podrzędne schematy tworzone są narzędziem Hierarchy Board – zasady rysowania schematów w blokach są identyczne. Aby umożliwić podłączenie sygnałów do schematów nadrzędnych, należy użyć narzędzi Hierarchy Input/Output. Każdy blok hierarchiczny dostępny jest poprzez zakładkę odpowiadającą jego nazwie – przykład zamieszczono na rysunku 16.

Rysunek 16. Przykładowy blok hierarchiczny Eq5Band

Dodatkowe menu obsługi bloku hierarchicznego dostępne jest po jego zaznaczeniu i przyciśnięciu prawego klawisza myszy. W menu dostępne są opcje ograniczające dostęp: Hide/Freeze. Hide ukrywa zawartość zakładki bloku i zapewnia ochronę hasłem. Opcja ta jest przydatna, gdy musimy udostępnić działający algorytm, a nie mamy zamiaru ujawniać sposobu jego realizacji. Freeze zabezpiecza natomiast możliwość wprowadzania nieautoryzowanych zmian w konfiguracji bloku. Opcje podmenu File umożliwiają odczyt lub zapis bloku na dysk w celu użycia w innych projektach – oczywiście o ile nie jest on zabezpieczony wcześniej opisanymi funkcjami.

Każdy biblioteczny blok funkcjonalny ma dostępną rozbudowaną pomoc kontekstową, zawierającą opis działania, wejść/wyjść i typów sygnałów wymaganych do poprawnej pracy. Dostęp do pomocy jest możliwy po zaznaczeniu bloku lewym klawiszem myszy i przytrzymaniu klawisza F1, co pokazano na rysunku 17.

Rysunek 17. Narzędzia edycji bloku hierarchicznego

Pomoc jest dostępna także podczas pracy z SigmaStudio – warto z niej skorzystać, gdyż znajduje się tam wiele cennych i ciekawych wskazówek, a czasami nawet gotowych rozwiązań układowych. Pomocne są też: strona Wiki prowadzona przez Analog Devices (rysunek 18): https://wiki.analog.com/resources/tools-software/sigmastudio#sigmastudio_and_sigmadsp_documentation oraz forum DSP: https://ez.analog.com/dsp/sigmadsp/.

Rysunek 18. Pomoc programu SigmaStudio dostępna poprzez stronę Wiki (z materiałów Analog Devices)

Jeżeli powyższe kroki zostały wykonane, najwyższy czas zabrać się do narysowania aplikacji testowej ADAU1701_MK2_Cz3_ProjektTestowy_1.dspproj. Należy to zrobić zgodnie z rysunkami 19 i 20. Aplikacja korzysta z wejść analogowych IN1 (Input 0/1) oraz wyjścia analogowego OUT1. Sygnały z wejść doprowadzone są do pięciopasmowego korektora graficznego, a następnie do multipleksera umożliwiającego wybór pomiędzy sygnałem wejściowym a przebiegiem sinusoidalnym 500 Hz z wbudowanego generatora. Następnie sygnał doprowadzany jest do regulatora poziomu i – poprzez wskaźniki wysterowania – wyprowadzony na wyjścia analogowe DAC0,1. W tor korektora włączone są bloki Stimuls i Probe umożliwiające wykreślenie charakterystyki przenoszenia, co ułatwia projektowanie różnego rodzaju filtrów. Bloki Stimuls, Probe i wskaźniki wysterowania są podstawowymi elementami do oceny działania aplikacji.

Rysunek 19. Schemat aplikacji testowej

Należy tylko zwrócić uwagę, że wskaźniki wysterowania zużywają zasoby DSP i wymagają stałego połączenia z SigmaStudio, gdyż część obliczeń jest wykonywana w IDE. Bieżący odczyt poziomu należy każdorazowo aktywować przyciskami na wskaźniku lub z poziomu menu Action\Enable (Disable) All Level Detectors (Ctrl+F9/F10). Pomocny w uruchamianiu jest też blok DSP Readback służący do odczytu wartości z dowolnego miejsca w algorytmie, w przeciwieństwie do bloku wskaźnika wysterowania, który może być podłączony tylko do sygnału analogowego audio. Opisywany blok przydaje się przykładowo do określenia wartości sygnałów sterujących blokami, w których parametry konfigurowane są zewnętrznym indeksem, bądź też do weryfikacji działania logiki. Podobnie jak wskaźnik poziomu, blok wymaga połączenia DSP z SigmaStudio. W DSP Readback można określić format odczytywanej wartości z przeliczeniem na wartość HEX, a także – z poziomu menu podręcznego – określić częstotliwość odczytu automatycznego. Przy stosowaniu bloków DSP Readback należy jednak zachować umiar, gdyż DSP obsługuje ich ograniczoną liczbę, a każdy dodatkowy, zbędny odczyt spowalnia komunikację z DSP. Odczyt bloków aktywowany jest w menu Action/Enable (Disable) All Continous ReadBack Controls (Ctrl+F11/12).

Rysunek 20. Blok hierarchiczny korektora Eq5Band

Kolejnym przydatnym narzędziem są zestawy nastaw, umożliwiające zapisanie ustawień projekt na dysku oraz przypisanie ich do skrótów w menu (w celu szybkiego przełączania), zamiast mozolnego ustawiania kilkunastu pojedynczych parametrów. Aby zapisać parametry na dysk, w dowolnym pustym miejscu w głównym schemacie, prawym przyciskiem myszy wybieramy menu podręczne – zgodnie z rysunkiem 21. Poleceniem SaveAs możemy zapisać zestaw parametrów na dysk. Ustawienia zapisywane są w plikach binarnych, w katalogu projektu, w podkatalogu Settings.

Rysunek 21. Zapis parametrów na dysku

Cztery zapisane zestawy parametrów można dla wygody przypisać do przycisków paska poleceń, zgodnie z rysunkiem 22 i zmieniać je w czasie rzeczywistym w celu oceny działania aplikacji.

Rysunek 22. Dostępne zestawy parametrów

Tak w skrócie wygląda obsługa Sigma Studio – prawda, że prosta? No może z wyjątkiem poszukiwania właściwego bloku w bibliotece – trzeba to robić ręcznie, bo nie ma żadnego mechanizmu filtrowania lub wyszukiwania. Podobnie nie znalazłem sposobu na sprawdzenie, z jakiego katalogu w Toolboxie pobrany został blok na schemacie – po pewnym czasie jednak zapamiętuje się lokacje używanych bloków. Warto wspomnieć o – czasami nieprzewidywalnym – zachowaniu edytora schematów. Gdy mamy zamiar kopiować metodą Ctrl+C/V, wstawione w ten sposób bloki zachowują się niekiedy jak grafika... Po wklejeniu tracimy dostęp do nastaw, nie polecam więc tej metody, gdy potrzebujemy kilka jednakowych bloków – najlepiej wstawić je po kolei z ToolBoxa lub poprzez wstawienie zapisanego na dysk bloku użytkownika – wbrew pozorom zaoszczędzimy w ten sposób czas. Sporadycznie zdarza się też nieprawidłowe działanie opcji powiększenia schematu – po zmianie widoku ekran „zamraża” się i ponownie nie mamy dostępu do parametrów bloków – w tym przypadku pomaga zapisanie projektu i restart SigmaStudio. Dla wygody i łatwiejszej nawigacji warto korzystać z bloków hierarchicznych, ograniczając liczbę elementów w okienku schematu i konieczność częstego przewijania ekranu.

W tym miejscu wreszcie można podłączyć programator do zestawu. Wzajemne położenie złączy USBI i PWR5V w zasadzie uniemożliwia odwrotne podłączenie programatora, ale warto sprawdzić przed włączeniem, czy przypadkiem coś takiego się nie zdarzyło, bo konsekwencje mogą być kosztowne. Następnie do wejścia IN podłączamy źródło sygnału, do wyjścia OUT1 głośniczki PC lub wzmacniacz, a do wspomnianego wcześniej gniazda USBi – programator. Kolejny krok to podłączenie zasilania do złącza PWR5V oraz programatora do portu USB. Na płytce programatora USBi powinna zaświecić się czerwona LED sygnalizująca zasilanie oraz żółta – potwierdzająca detekcję I²C. Na płytce AudioDSP powinna natomiast zostać załączona zielona dioda LED V50, sygnalizująca obecność zasilania na szynie o tej samej nazwie.

Po narysowaniu schematu i konfiguracji DSP (po otwarciu projektu ADAU1701_MK2_Cz3_ProjektTestowy_1.dspproj, konfiguracja odbędzie się automatycznie) należy projekt poddać linkowaniu, wybierając z menu Action\Link Project lub ikonę  albo skrót (Ctrl+I). W wyniku kompilacji dostajemy informację o systemie, użytych zasobach i oczywiście – w najlepszym przypadku – o braku błędów, zgodnie z rysunkiem 23. Najczęstsze błędy w edytorze to niepodłączone wejścia bloków na schemacie lub zagubione etykiety. Następnie należy projekt skompilować poprzez ikonę Link Compile Connect projekt zostaje załadowany do pamięci DSP, co sygnalizowane jest migotaniem diod I²C w programatorze. Poprawne załadowanie potwierdzone zostanie zmianą statusu na . Możliwy jest też status błędu Computation Error, gdy zmienne przekraczają dopuszczalny zakres lub nastąpiła awaria USB – ale z takim komunikatem w praktyce jeszcze się nie spotkałem.

Rysunek 23. Wynik linkowania projektu

Zmienne statusy – oprócz komunikatu tekstowego – modyfikują także kolor belki pod schematem: niebieski oznacza tryb edycji projektu, ciemnozielony – poprawną kompilację, jasnozielony – poprawne załadowanie projektu do DSP, beżowy – błąd komunikacji USBi oraz czerwony – wspomniany już Computation Error. Każdorazowo po edycji schematu proces kompilacji należy powtórzyć. Jeżeli mamy problemy z programatorem USBi, należy go odłączyć i podłączyć ponownie do portu USB – w większości przypadków taki prosty trik pomaga.

Zakładam, że ładowanie projektu odbyło się pomyślnie i najprostsza możliwa aplikacja działa, tj. na wyjściu OUT1 dostępny jest sygnał z wejścia IN, zmodyfikowany zgodnie z wybraną nastawą korektora i z możliwością regulacji głośności oraz zmiany nastaw equalizera. Należy w tym momencie sprawdzić działanie generatora (uwaga na poziom sygnału!), zmieniając wejście multipleksera, a następnie sprawdzić w zakładce HardwareControl\ICx 170x/140x Register Control funkcjonowanie sprzętowego wyciszania przetworników AD/DA oraz wyłączenia zasilania rdzenia. Warto też zweryfikować poprawność działania pamięci nastaw z użyciem ikon A...D – charakterystyka przenoszenia powinna zmieniać się w z zależności od wybranego ustawienia. Można załączyć wskaźniki wysterowania i funkcję ReadBack, weryfikując jej działanie oraz – przyciskami Probe, a następnie Stimulus – sprawdzić obliczoną charakterystykę przenoszenia, zależną od nastaw korektora. Działanie aplikacji i „przyrządów” testowych zaprezentowano na rysunku 24.

Rysunek 24. Przykładowa charakterystyka korekcji uzyskana z użyciem narzędzi Probe/Stimuls

W związku z tym, że program ładowany jest do pamięci ulotnej DSP, po przyciśnięciu przycisku reset lub odłączeniu USBi program i parametry zostaną utracone i w razie konieczności muszą zostać załadowane ponownie. Tryb ten przyspiesza sprawdzenie projektu podczas uruchamiania bez straty czasu na mozolne programowanie pamięci EEPROM. Podczas zmian nastaw potencjometru lub korektora warto przyglądnąć się komunikacji USBi z DSP – w okienku Capture, w czasie rzeczywistym, zmieniają się wartości wysyłane i odczytywane do/z pamięci oraz rejestrów procesora.

Aby płytka mogła pracować samodzielnie, należy zaprogramować pamięć EEPROM, z której ADAU1701A pobierze aplikację w trybie pracy SELFBOOT. W tym celu zakładamy zworę WP, przechodzimy do zakładki Config, wybieramy menu podręczne pamięci EEPROM (rysunek 9), kontrolujemy jeszcze raz, czy parametry pamięci ustawione są zgodnie z kartą katalogową (rysunek 10), następnie wybieramy opcję Read/Write Window otwierającą narzędzie do obsługi pamięci EEPROM, zgodnie z rysunkiem 25. W pierwszej kolejności wybieramy opcję kasowania zawartości pamięci ClearE2Pro, usuwając jej ewentualną zawartość, co zajmie dłuższą chwilę… należy pamiętać, aby każdorazowo przed zapisem do pamięci skompilować program, by nie tracić czasu na ponowne kasowanie i programowanie w przypadku wgrania starej wersji aplikacji. Podczas kasowania pamięci okienko potwierdzające ma nieco mylący opis „Zapis do pamięci”, w rzeczywistości jednak realizowana funkcja jest poprawna.

Rysunek 25. Narzędzie do obsługi pamięci EEPROM

Po skasowaniu zawartości EEPROM, w celu weryfikacji odczytamy pamięć do bufora poleceniem ReadE2Prom to Display. Jeżeli odczytamy tylko wartości 0x00, to pamięć jest czysta i można ją zaprogramować aplikacją testową. W przeciwnym wypadku, w pierwszej kolejności sprawdzamy poprawny status programatora USBi (warto wykonać restart interfejsu z menu podręcznego programatora USBi), a następnie weryfikuje ustawienie zworek WP i I²C/SBT. Po usunięciu problemu zamykamy narzędzie EEPROM i wracamy do zakładki Config, wybierając menu podręczne procesora ADAU1701A – zgodnie z rysunkiem 26.

Rysunek 26. Menu programowania pamięci EEPROM

Ponownie pokaże się okienko parametrów EEPROM (rysunek 9), po potwierdzeniu parametrów rozpocznie się proces programowania pamięci zgodnie z rysunkiem 27, po którym należy zweryfikować zapis, wybierając ponownie z menu podręcznego ADAU170 opcję Check Last Compilation vs EEPROM.

Rysunek 27. Postęp programowania pamięci

Pliki wynikowe *.hex/*.bin dla zewnętrznego programatora dostępne są w podkatalogu ADAU1701_MK2_Cz3_ProjektTestowy_1_IC 2 projektu.

Po pomyślnej weryfikacji należy zdjąć zworę WP i zrestartować procesor, wyłączając zasilanie płytki lub naciskając przycisk RES. Aplikacja uruchomi się automatycznie, w dalszym ciągu możliwa będzie (po wyborze opcji Link Compile Connect) współpraca z SigmaStudio, pozwalająca na zmianę parametrów i sterowanie elementami manipulacyjnymi.

Rysunek 28. Weryfikacja pamięci

Z praktycznych uwag warto wspomnieć jeszcze o pewnej uciążliwości dotyczącej części sprzętowej programatora USBi, jaką jest obwód sygnału RESET, dostępny na wyprowadzeniu 6 złącza USBi (w nocie aplikacyjnej AN-1006 nazywany jest BRD_RESET). 

Generalnie jest to bardzo przydatny sygnał, umożliwiający manualny restart DSP (rysunek 29). Niestety obwód ma dodatkowe podciąganie do wewnętrznego zasilania IOVDD programatora przez rezystor R2=10 kΩ, wlutowany na płytce programatora. Jeżeli zasilamy płytkę poprzez programator lub z zewnętrznego zasilacza i zasilanie jest obecne, to sygnał działa poprawnie.

Rysunek 29. Dodatkowe funkcje programatora USBi

Gdy zasilanie zostanie wyłączone, to na płytce programatora dalej jest obecne napięcie IOVDD, które – poprzez rezystor R2 podwieszający linię BRD_RESET – zasila płytkę (zjawisko backfeeding) przez obwód sygnału MR. Powoduje to wprowadzenie obu urządzeń w nieokreślony stan. Niestety w obwodzie tym brakuje klucza odłączającego, który zastosowano w przypadku sygnałów SDA/SCL, także podwieszonych do IOVDD. Brutalnym sposobem obejścia problemu jest odcięcie sygnału MR (czy to w programatorze, czy w płytkach uruchomieniowych) lub mała przeróbka programatora za pomocą bufora z otwartym drenem (np. 74LVC2G07), separującego sygnał BRD_RESET, zgodnie ze schematem z rysunku 30.

Rysunek 30. Schemat modyfikacji programatora USBi

Przy odrobinie starań można to dosyć zgrabnie przeprowadzić, wylutowując R2 i odfrezowując fragment otaczającej go wylewki 1V8DD. W miejsce R2 lutujemy LVC2G07 (TSSOP5), z odpowiednio zagiętymi wyprowadzeniami, łącząc pin 1 wolnej bramki z masą, wlutowując R2 (10 kΩ) po „skosie” pomiędzy C4/R6. Teraz pozostaje jedynie podłączyć kawałkiem kynaru masę do układu oraz przeciąć ścieżkę prowadzącą sygnał BRD_RESET do wyprowadzenia 6 złącza USBi. Następnie trzeba podłączyć do niej wyjście bufora poprzez rezystor szeregowy 100 Ω. Zmodyfikowany programator pokazano na fotografii 2.

Fotografia 2. Zmodyfikowany programator USBi

W oczekiwaniu na następny odcinek kursu warto zapoznać się z dokumentacją ADAU1701A oraz środowiska SigmaStudio, zwracając szczególną uwagę na zawartość bibliotek i sprawność rysowania schematów, gdyż będzie to niezbędne w następnej części kursu.

Adam Tatuś, EP

Artykuł ukazał się w
Elektronika Praktyczna
maj 2025
DO POBRANIA
Materiały dodatkowe
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik listopad 2025

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2025

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje listopad - grudzień 2025

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna listopad 2025

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich grudzień 2025

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów