Środowisko to można w pełnej, nieograniczonej wersji pobrać za darmo ze strony internetowej producenta; wymagana jest jedynie rejestracja. W chwili pisania artykułu najbardziej aktualna jest wersja 4.2, więc to do niej będę się odnosił. Konto powstałe w wyniku rejestracji umożliwia ponadto pełny dostęp do bazy przykładów i not aplikacyjnych układów oraz do forów dyskusyjnych poświęconych różnym aspektom wykorzystania układów PSoC.
Dostępna jest tam również biblioteka gotowych niestandardowych komponentów do wykorzystania we własnych projektach. Komponenty te są autorstwa użytkowników, więc w razie chęci będziemy mogli udostępnić innym również własne konstrukcje. Co bardziej udane z nich firma Cypress obejmuje dodatkową opieką i wsparciem.
Zanim przejdziemy do tworzenia projektów, jeszcze kilka słów o części sprzętowej. Zakupiona przez nas płytka CY8CKIT-059 nie wymaga żadnych przygotowań. Zasilana jest ona z portu USB, więc nie są potrzebne żadne dodatkowe zasilacze. Jej wadą jest jednak to, że wszystkie linie zasilania układu PSoC są podłączone do linii +5V USB, więc będziemy mogli wygodnie pracować tylko z układami zewnętrznymi zasilanymi takim właśnie napięciem.
Nie jest to ograniczenie samego PSoCa, a jedynie tej konkretnej płytki. Wspomniany już znacznie droższy zestaw FreeSoC2, również nadający się na potrzeby niniejszej serii, nie ma tego ograniczenia. Jak wszędzie, niska cena zestawu ewaluacyjnego jest wynikiem daleko idących kompromisów. Dla nas nie będzie to jednak problemem.
Niezależnie od rodzaju wybranej płytki warto pobrać z Internetu jej dokumentację, a zwłaszcza schemat połączeń, bo niektóre wyprowadzenia układu są podłączone do zainstalowanych na płytce elementów dodatkowych, takich jak włącznik Tact oraz diody LED. Nasz dzisiejszy projekt będzie korzystał z wiedzy pozyskanej ze schematu kitu, który powtórzyłem w materiałach dodatkowych.
Jak widać na fotografii tytułowej, płytka składa się z dwóch części, oddzielonych perforowanym przewężeniem. Mniejsza to programator (zbudowany na układzie CY8C5868LTI-LP039, również z rodziny 5LP, ale wolniejszym), większa to właściwy układ CY8C5888LTI-LP097. Oba układy są w obudowie QFN68. Programator można odłamać i podłączyć do płyty głównej przewodami przylutowanymi do odpowiednich pól lutowniczych, a płyty głównej używać w charakterze modułu w obudowie DIP.
Zestaw ewaluacyjny może się więc łatwo stać „dawcą” fabrycznie wykonanych modułów, gotowych do wykorzystania w naszych projektach. Opcja ta rozwiązuje nie tylko problem lutowania „trudnych” obudów, ale jest też całkiem atrakcyjna cenowo. Jeśli jednak Czytelnik rozważa samodzielne projektowanie płytek do swoich projektów, oto ciekawostka praktyczna: rozkład wyprowadzeń wszystkich układów rodziny 5LP jest jednakowy (w ramach wybranej obudowy), więc wystarczy raz zaprojektować ścieżki zasilania, zegarów i typowych dla siebie interfejsów.
Płytkę podłączamy do komputera i wracamy do PSoC Creatora. Po zainstalowaniu programu, z menu File wybieramy opcję New→Project. W przywołanym okienku wybieramy „Target device: PSoC5LP” oraz „Launch device selector”. Wybieramy „CY8C5888LTI-LP097”, bo taki właśnie układ znajduje się na płytce i klikamy „Next”. Następnie wybieramy „Empty schematic” i ponownie „Next”. W polu „Workspace name” wpisujemy nazwę naszej „przestrzeni roboczej”, w której będą umieszczone projekty.
Jedna przestrzeń może zawierać wiele projektów, ale teraz nie skorzystamy z tej możliwości. Ze względu na numer niniejszego odcinka wpisałem „EdW02”. Następnie w polu „Location” wskazujemy swoją preferowaną lokalizację katalogu z plikami projektu i nadajemy projektowi nazwę w polu „Project name”. Ja wpisałem „button_forwarder”. Po kliknięciu „Finish” stajemy się właścicielami pustego projektu.
Naszym oczom ukazuje się widok z rysunku 1. Centralny obszar (oznaczony cyfrą 1) to edytor schematu projektowanego przez nas układu. Po lewej stronie u góry znajduje się sekcja umożliwiająca skonfigurowanie projektu (2), a pod nią okienko do nawigacji po plikach wchodzących w skład projektu (3). Po prawej stronie mamy wyszukiwarkę komponentów (Component Catalog, 4) oraz rozbudowany miernik bieżącego zużycia zasobów układu (Resource Meter, 5).
Oto historyczna chwila: przystępujemy do wymodelowania naszego pierwszego układu PLD. Pierwsze zadanie jest niezbyt ambitne: układ ma odczytać stan znajdującego się na płytce przełącznika SW1 i przekazać go bez zmian na pin podłączony do diody LED1. Potrzebne więc będą dwa piny: wejściowy i wyjściowy oraz połączenie między nimi w postaci kawałka przewodu.
Klikamy więc na pole tekstowe w okienku wyszukiwarki komponentów (6), wpisujemy „pin” (bez cudzysłowów) i wciskamy enter. Z wyników wyszukiwania dowiadujemy się, że PSoC Creator zna wiele rodzajów pinów i na dokładkę są one wersjonowane. Jest to ogólna cecha komponentów i będziemy z niej w przyszłości korzystać. Umożliwia ona zawarcie w jednym projekcie różnych realizacji tego samego komponentu, co ma kluczowe znaczenie przy wykorzystaniu bibliotek pochodzenia zewnętrznego.
Nie wiemy, czy autor komponentu w momencie jego tworzenia nie skorzystał z jakiejś ezoterycznej właściwości konkretnej wersji jego składników, więc beztroska ich aktualizacja mogłaby zakończyć się katastrofą. Wersjonowanie skutecznie rozwiązuje ten problem. My jednak chcemy korzystać z wersji najnowszych, zaznaczamy więc pin wejściowy (Ports and Pins → Digital Input Pin [v2.20]) i przeciągamy go myszką na planszę schematu, upuszczając w dogodnym miejscu. Jeśli zmienią się nam preferencje, komponent możemy zaznaczyć na schemacie i przeciągnąć w nowe miejsce, przytrzymując lewy klawisz myszy.
Tak! To jest takie proste!
Jeśli bieżące powiększenie planszy schematu nam nie odpowiada, w każdej chwili możemy je zmienić, przytrzymując Ctrl i kręcąc kółkiem myszy aż do uzyskania pożądanego efektu.
Pin wejściowy już mamy, więc podobnie postępujemy z pinem wyjściowym (Ports and Pins → Digital Output Pin [v2.20]). Teraz trzeba je tylko odpowiednio ze sobą połączyć. Klikamy „wężyk” (7 – albo wciskamy klawisz „w”) i jednokrotnie klikamy w niewielki kwadracik podłączony do pinu. Rozpoczyna to proces rysowania połączenia, który kończy się po kliknięciu miejsca docelowego. Pomiędzy pinami pojawił się zielony przewód i nie jest to przypadek. PSoC Creator automatycznie rozpoznał rodzaj sygnału i nadał mu kolor zgodny z następującą konwencją.
Sygnały cyfrowe są na schemacie oznaczane kolorem zielonym, analogowe – pomarańczowym, a zewnętrzne niebieskim. Te ostatnie traktowane są wyłącznie jako graficzny komentarz dokumentujący interakcje układu ze światem zewnętrznym i nie są brane pod uwagę podczas syntezy wsadu dla układu. Pełnią zatem dokładnie taką samą funkcję, jak sekcje komentarza w językach programowania. Zachęcam, by przełamać lenistwo i korzystać z tej funkcjonalności, bo zewnętrzne połączenia oczywiste w chwili tworzenia układu, po pół roku mogą wcale takie oczywiste nie być.
Nie jest to jedyny sposób komentowania, wszystkie symbole znajdujące się w menu pod „wężykiem” również służą do tego celu. Pozwalają nam one rysować na schemacie różne figury geometryczne, krzywe i odcinki, umieszczać tekst, a także obrazki. Schemat powinien być czytelny, a intencje dobrze opisane – po to właśnie edytor dostarcza nam stosownych środków.
Skorzystajmy więc z tego i dorysujmy brakujący LED oraz przełącznik. Choć ścieżki zewnętrze możemy narysować bez powiązania z pinami, to jednak PSoC Creator pozwala zrobić to porządniej. Dwukrotnie klikamy na dowolny pin i w przywołanym okienku „zaptaszamy” opcję General → External terminal, po czym klikamy „OK”. Z drugim pinem robimy tak samo i w ten sposób otrzymujemy punkty do podłączenia połączeń zewnętrznych.
W wyszukiwarce wpisujemy „led” i… tu ostrożnie. W bibliotece znajdują się jakieś komponenty służące do sterowania diodami świecącymi, ale to nie ich szukamy. Klikamy na zakładkę Off-Chip (8) i dopiero teraz przeciągamy na schemat symbol diody w wersji 1.0.
Następnie w ten sam sposób dodajemy „resistor” (wyszukiwarka działa też na fragmentach nazwy, wystarczy więc wpisać np. „resis”), „switch” (nam pasuje wariant SPST), „gnd” i spełniamy się w kreślarstwie. Przydatna może okazać się opcja obracania lub lustrzanego odbijania komponentu, obie dostępne w menu pod prawym klawiszem myszy w sekcji Shape.
Uwaga: edytor schematów rozumie pojęcie warstwy, więc w tym samym miejscu menu możemy też określać wzajemne relacje elementów w osi Z. Pozwoli uzyskać efekt kolorowych podkładek stosowanych w innych miejscach naszego miesięcznika. W celu oswojenia się z edytorem proponuję udokumentować nasz schemat znacznie dokładniej, niż ten prosty układ na to zasługuje.
Efekt końcowy zapewne przypomina rysunek 2. Nasz układ wygląda na ukończony i możemy kliknąć opcję Build button_forwarder w menu Build (9). Pierwsza kompilacja nieco trwa, a my możemy na bieżąco śledzić jej postępy. Między innymi, w okienku (3) PSoC Creator umieścił automatycznie wygenerowane pliki, w tym napisane w języku C funkcje obsługujące użyte komponenty (czyli u nas piny). Wspomniałem już, że dużo programować nie musimy...
W okienku konsoli (10) pojawił się komunikat o sukcesie i szczątkowe informacje o zużyciu zasobów (szczegółowe dostępne są w Resource Monitorze).
Poszło podejrzanie dobrze...
No właśnie, na schemacie zadeklarowaliśmy potrzebę użycia dwóch pinów, ale skąd PSoC Creator wie, do którego jest podłączona dioda, a do którego przełącznik? Ano nie wie, więc zakłada, że skoro mu nie powiedzieliśmy, to zrobiliśmy to celowo i ma dowolność w ich automatycznym przydzieleniu. Komputery bywają nieprzyzwoicie dosłowne.
Efekty tej swobody byłyby zapewne ciekawe, więc należy to niezwłocznie skorygować. Klikamy dwukrotnie na zakładkę Pins (11) i w tabelce po prawej stronie ustawiamy poprawne przypisania. Ze schematu zestawu (CY8CKIT-059_Schematics.pdf) dowiadujemy się, że wyjściowy Pin_2 dla zgodności ze schematem jest podłączony do fizycznego pinu P2[1], a wejściowy Pin_1 do P2[2]. Przebudowujemy projekt i klikamy na Program w menu Debug (12).
Pojawi się okienko Select Debug Target, a w nim nasza płytka. Zaznaczamy ją i klikamy OK/Connect. Po krótkiej chwili w konsoli powinno pojawić się „Device ‚PSoC 5LP CY8C5888LT*-LP097’ was successfully programmed”. Niczego więcej robić nie trzeba, nasze urządzenie działa.
Tylko jakoś dziwnie. Wciskamy przycisk SW1, ale dioda LED1 nie odzwierciedla jego stanu. Zależności między nimi wytłumaczyć mógłby chyba tylko wróżbita Maciej, ale on raczej nie czyta tego kursu. Schemat wygląda dobrze, piny przypisaliśmy poprawnie, więc co jeszcze mogło pójść źle?
Otóż... nic.
Znów padliśmy ofiarą własnej beztroski. Popatrzmy uważnie na schemat. No tak! Przełącznik wymusza nam dobrze określony stan niski, ale jeśli Pin_1 jest wyprowadzeniem o dużej impedancji, co okazuje się ustawieniem domyślnym, to co ustala stan wysoki? Trzeba dodać rezystor (np. 10k) do VDD. Goldpiny zaczynają się przydawać, możemy go łatwo przylutować.
Można jednak prościej: piny są bardzo rozbudowanymi blokami, więc tryb hi-Z nie jest jedyną dostępną opcją. Wracamy do schematu (dwukrotnie klikamy na TopDesign.cysch nad wizardem Pins) i dwukrotnie klikamy Pin_1. W zakładce General → Drive Mode wybieramy Resistive pull up i klikamy OK. Przebudowujemy projekt, programujemy płytkę i... uff, tym razem działa poprawnie!
Pierwsze doświadczenia (i pierwsze sukcesy) mamy już za sobą, więc w następnym odcinku przyjrzymy się pinom nieco dokładniej. W Elportalu, jak zawsze, zamieszczam mój projekt demonstracyjny.