Zastosujemy wyświetlacze ze wspólną katodą. Oznacza to, że aby zaświecić segment, do odpowiadającego mu pinu należy przyłożyć napięcie dodatnie (poprzez rezystor ograniczający prąd!), a elektrodę wspólną wyświetlacza trzeba połączyć z masą.
Wszystkie odpowiadające sobie elektrody segmentów są połączone razem i mają wspólne rezystory ograniczające prąd o rezystancji 100 Ω. Tak utworzone sygnały SegmentX należy podłączyć do pinów układu FPGA. Elektrody wspólne wyświetlaczy są sterowane poprzez tranzystory NPN. Kiedy na sygnale CathodeX pojawi się logiczna jedynka, przez bazę tranzystora płynie niewielki prąd, a tranzystor otworzy się, zwierając elektrodę wspólną wyświetlacza z masą. Kiedy do bazy doprowadzony jest stan niski, nie płynie przez nią prąd, tranzystor jest zamknięty, a w rezultacie żaden segment wyświetlacza nie będzie mógł się zaświecić – niezależnie od tego jakie stany są ustawione na liniach SegmentX.
Jest to jedna z możliwych implementacji, właściwa dla średniej wielkości wyświetlaczy. W przypadku mniejszych wyświetlaczy, ciemniejszych, bardziej energooszczędnych lub o mniejszej liczbie cyfr, można by się pokusić o wyeliminowanie tranzystorów i połączenie elektrod wspólnych prosto do wyprowadzeń układu FPGA. Natomiast jeżeli chcemy sterować dużym, jasnym wyświetlaczem, złożonym z wielu cyfr, wtedy należałoby dodać tranzystory także na linie segmentów.
Musimy pamiętać, że maksymalny prąd jaki możemy pobrać z pinu układu MachXO2 to 24 mA, a sumaryczny prąd pobierany ze wszystkich pinów nie powinien przekraczać 8 mA×n, gdzie n to liczba pinów dostępnych w banku. Układy MachXO2 mają od czterech do sześciu banków pinów, a każdy z nich może być zasilany innym napięciem poprzez wyprowadzenie VCCIOx. Po szczegóły odsyłam do dokumentacji MachXO2 Family Datasheet, dostępnej pod adresem [1].
Multipleksacja polega na tym, że w danej chwili tylko jeden z dostępnych wyświetlaczy pokazuje cyfrę, zaświecając odpowiednie segmenty, a wszystkie pozostałe wyświetlacze pozostają wygaszone. Po upływie pewnego krótkiego czasu, następuje wyłączenie dotychczas pracującego wyświetlacza, poprzez zamknięcie tranzystora, sterującego jego elektrodą wspólną. Zmieniają się wygnały sterujące segmentami, a następnie włączany jest kolejny wyświetlacz na pewien czas. Czas ten musi być na tyle krótki, aby ludzkie oko nie zauważyło przełączania wyświetlaczy. W naszym przykładzie będą to dwie milisekundy.
Wynika z tego ważny wniosek – zawsze aktywny jest tylko jeden wyświetlacz, a skoro mamy 8 cyfr w wyświetlaczy to każda cyfra pracuje tylko przez ⅛ dostępnego czasu. Skutkiem tego jest zmniejszenie jasności do ⅛ wartości, jaka jest dostępna przy świeceniu ciągłym. Z tego powodu, projektując wyświetlacze multipleksowane, należy wybierać wyświetlacze o możliwie jak największej jasności. Efekt przyciemnienia można zniwelować, sterując wyświetlacz większym prądem, niż jest to dopuszczalne przy pracy ciągłej. Informacji o maksymalnych prądach należy szukać w dokumentacji wyświetlacza pod hasłem continuous current oraz peak current.
W naszym przykładzie będziemy zaświecać wyświetlacze zaczynając od zerowego (Cathode0) do siódmego (Cathode7). Nic nie stoi na przeszkodzie, by kierunek multipleksacji był odwrotny – nie ma to w praktyce żadnego znaczenia.
Podczas tego kursu utworzymy sterownik wyświetlacza, a żeby go przetestować, opracujemy prosty, 8-cyfrowy licznik. Będzie on zwiększał swoją wartość do 100 milisekund. Ponadto, zapalone będą dwie kropki, które będą przesuwać się od prawej do lewej. Przesunięcie kropek ma następować co jedną sekundę. Kod napiszemy w taki sposób, aby czasy opóźnień dało się łatwo modyfikować. W tym celu zastosujemy strobe generator.