W projektowanych przeze mnie urządzeniach od wielu lat stosuję niewielkie matryce LED o organizacji 5×7 pikseli. Kiedy są ułożone dłuższą krawędzią poziomo, można na nich zbudować dwa pola odczytowe o wielkości 5×3 pikseli. A w razie konieczności można użyć całej powierzchni matrycy, do sygnalizacji np. kodu błędu urządzenia lub ustawień serwisowych. Dla jednej takiej matrycy stosuję układ z rysunku 1.
Rejestry przesuwne typu 74HC595 pozwalają ograniczyć liczbę koniecznych wyprowadzeń mikrokontrolera do zaledwie 3...4. Pierwszy bajt, wpisywany do układu US2, załącza odpowiednie kolumny a drugi bajt zostaje zatrzaśnięty w US2 załączając odpowiedni wiersz. Do odświeżania zawartości rejestrów można użyć interfejsu SPI mikrokontrolera, bowiem wartości logiczne na linii DATA są zatrzaskiwane na narastającym zboczu sygnału na linii SHCP. Po zakończeniu transmisji należy wystawić zbocze narastające na linii STCP (nawet krótko trwającą szpilkę), aby zaktualizować zawartość rejestrów wyjściowych w układach 74HC595. Wejść SCL nie używam, są podłączone na stałe do dodatniej linii zasilania.
Czwarty sygnał sterujący
Opisana konfiguracja zajmuje trzy wyprowadzenia mikrokontrolera, a gdzie czwarte? Linia OE – Output Enable, kiedy przyjmuje stan niski, wyjścia QA…QH utrzymują zapisane stany logiczne. Stan wysoki na linii OE powoduje natychmiastowe przejście wszystkich tych wyjść w stan wysokiej impedancji (Hi-Z). Aż się prosi aby podać tam sygnał PWM sterujący jasnością diod matrycy. Tak właśnie robię: im mniejsze wypełnienie, tym jaśniej świeci wyświetlacz. Podając stale stan wysoki można diody po prostu wyłączyć. Zawartość rejestrów jest w tym czasie utrzymywana, zatem ich odświeżanie może przebiegać całkowicie asynchronicznie względem sygnału PWM regulującego jasność.
Mała uwaga ode mnie: warto wrócić myślami do początków techniki telewizji i przypomnieć sobie, w czym wybieranie międzyliniowe (najpierw linie nieparzyste, potem parzyste lub odwrotnie) było lepsze od kolejnoliniowego (wszystkie linie rysowane jedna po drugiej). Powodem było znacznie słabsze migotanie obrazu i efekt ten można zaobserwować również w przypadku tak prostych wyświetlaczy zwłaszcza, gdy częstotliwość odświeżania nie jest zbyt wysoka. Można w prosty sposób skonstruować funkcję generującą takie ciągi bitów, aby wybierany był co drugi wiersz matrycy. Będzie to miało pozytywny wpływ na jakość wyświetlanej treści.
Więcej wyświetlaczy
Co jednak zrobić, kiedy takich wyświetlaczy mamy więcej niż jeden, na przykład trzy? Układ US1 obsługujący wiersze może się zbuntować, bowiem przez jedno jego wyprowadzenie może płynąć prąd o natężeniu nie większym iż 35 mA, zaś przez linie zasilające 70 mA. Nietrudno zatem obliczyć, że w przypadku pojedynczej matrycy (schemat z rysunku 1) prąd poszczególnych pikseli nie może przekraczać 5 mA. Daje to wystarczającą jasność, ale rozbicie tych 35 mA, które może zaoferować 74HC595 sterujący wierszami, na większą liczbę wyświetlaczy spowoduje znaczny spadek jasności maksymalnej. Dlatego trzeba zastosować dodatkowy driver do obsługi wierszy.
Pierwszy pomysł jaki się nasuwa to stary, dobry i tani ULN2003, który powinien wystarczyć. Na rysunku 2 znajduje się schemat ideowy takiego rozwiązania. Ma ono jednak dwie poważne wady. Jedną z nich jest znaczący spadek napięcia na kluczach drivera, co w połączeniu z napięciem przewodzenia diod LED daje niewielką ilość napięcia odkładającego się na rezystorach ograniczających prąd. Może to powodować nierównomierne świecenie poszczególnych pikseli, odczuwalne szczególne przy niskiej jasności. A druga wada?
Taka konfiguracja wymusza stosowanie wyświetlaczy połączonych w określony sposób: anodami na kolumnach i katodami w wierszach. Tymczasem od wielu miesięcy magazyny hurtowni elektronicznych są puste lub zapełniają się na krótko. Nikt nie wie, kiedy ten stan się skończy, dlatego warto być przygotowanym na różne konfiguracje sprzętowe. Przykładowo – wpłynęło zamówienie na partię urządzeń z matrycami świecącymi w kolorze bursztynowym. Udało się takie znaleźć: wymiary odpowiednie, układ wyprowadzeń zgodny, cena w porządku, tylko kierunek podłączenia diod jest przeciwny. Ich katody są doprowadzone do kolumn, a anody do wierszy. O ile oprogramowanie sterujące można łatwo zmienić, aby wystawiało bity o przeciwnej wartości, o tyle kierunku prądu płynącego przez wyjścia driverów układu ULN2003 się nie zmieni. Odpowiedniki z kluczami typu P są mało dostępne i drogie. Co robić?
Drivery tranzystorów MOSFET
Do sterowania wierszami stosuję drivery tranzystorów MOSFET. Każdy taki driver to prosty półmostek o bardzo szybkim czasie przełączania, niskiej rezystancji wyjściowej i dużej wydajności prądowej. Czego więcej trzeba? Jeżeli tylko napięcie zasilające układ jest odpowiednio wysokie dla takiego mostka, wówczas nie ma najmniejszych przeszkód w ich stosowaniu. Schemat ideowy takiego rozwiązania znajduje się na rysunku 3. Pisząc odpowiednio oprogramowanie można dopasować rodzaj sterowania do obu rodzajów konfiguracji matryc LED, ponieważ zarówno w wierszach, jak i w kolumnach mamy wyjścia typu totem-pole.
Używane przeze mnie do tego celu drivery typu MIC4423 mają dwa kanały odwracające w jednej obudowie SO8. Dlatego trzeba użyć trzech takich układów a wejście nieużywanego, szóstego kanału połączyć z masą – tak zaleca nota katalogowa tego układu. Ponadto, MIC4423 może zostać bardzo łatwo zastąpiony przez inny podwójny driver MOSFET, ponieważ ich układ wyprowadzeń jest zazwyczaj taki sam. Nie ma też większego znaczenia, czy będą one odwracające, czy też nie, ponieważ można to skorygować w oprogramowaniu. Trzeba zwrócić uwagę na impedancję wyjściową (dla MIC4423 wynosi ona 3,5 Ω) oraz minimalne napięcie zasilające: dla MIC4423 to 4,5 V, więc doskonale pracuje w układach zasilanych z 5 V. Napięcie o tej wartości jest również bezpieczne dla samych diod LED, ponieważ w stanie wygaszenia są one polaryzowane zaporowo, a najczęściej spotykana wartość napięcia zaporowego to właśnie 5 V.
Michał Kurzela, EP