- Płytka o wymiarach 82×40×20 mm
- Zasilanie 5 V
- Maksymalny prąd obciążenia: 200 mA
- Maksymalna częstotliwość pracy magistrali I²C: 400 kHz
- Liczba możliwych adresów sprzętowych: 8 + obsługa wywołania ogólnego
- Liczba rozkazów: 12
- Pamięć ustawień i wartości
- 3 kolory wyświetlania
- Regulacja jasności świecenia
W wielu systemach mikroprocesorowych zachodzi potrzeba użycia bardzo czytelnych i zarazem niedrogich 7-segmetowych wyświetlaczy LED i jednoczesnej prezentacji dużej ilości danych. O ile sterowanie tego typu wyświetlaczami jest bardzo proste, o tyle użycie większej liczby tego typu elementów stwarza wiele problemów i niedogodności. Nawet przy sterowaniu multipleksowym, użycie dużej liczby wyświetlaczy LED zajmie cenne porty mikrokontrolera oraz obciąży go programowo, może także znacznie ograniczyć jasność świecenia diod LED, z których zbudowany jest każdy segment modułu. Idealnym, jak się wydaje, rozwiązaniem jest zastosowanie odrębnych modułów wyświetlaczy wyposażonych we własny sterownik i sterowanych ze wspólnej magistrali systemowej sterownika głównego. Takim przecież sterownikiem jest dla przykładu każdy moduł wyświetlacza LCD.
Rozwiązanie to znajduje także uzasadnienie ekonomiczne, gdyż przy obecnych cenach popularnych mikrokontrolerów, jest ono niedrogą alternatywą dla skomplikowanych systemów jednoukładowych. Proszę wszakże zwrócić uwagę na schemat niniejszego urządzenia (rys. 1) i zauważyć, iż poza tranzystorami sterującymi wspólnymi anodami wyświetlaczy LED, jak i ich połączonymi katodami (układ ULN2803), układ sterownika składa się wyłącznie z jednego elementu – mikrokontrolera ATmega8 pełniącego rolę odbiornika rozkazów magistrali I²C i jednocześnie jednostki sterującej pracą wyświetlaczy.
Przedstawione urządzenie posiada następujące cechy:
- możliwość wyświetlania liczb w zapisie dziesiętnym (0...9999),
- możliwość wyświetlania liczb w zapisie heksadecymalnym (0...FFFF),
- możliwość wyświetlania wartości heksadecymalnych (0...F) oddzielnie dla każdej cyfry,
- niezależne sterowanie kropkami dziesiętnymi,
- możliwość programowego sterowania kolorem świecenia każdej cyfry modułu (czerwony, zielony, pomarańczowy),
- możliwość programowego sterowania jasnością świecenia całego modułu LED,
- obsługa i wyświetlanie informacji o błędach (ramki transmisji, magistrali danych, wartości danych),
- możliwość zapisywania wartości i ustawień (w tym stanów kropek dziesiętnych, jasności świecenia i kolorów poszczególnych cyfr) w pamięci nieulotnej,
- możliwość sprzętowej zmiany adresu (do 8 modułów na jednej magistrali I²C),
- obsługa tzw. wywołania ogólnego (general call) umożliwiającego sterowanie pracą wielu modułów o różnych adresach w tym samym czasie, przy użyciu adresu 0x00,
- zintegrowany interfejs programatora SPI.
W opisywanym układzie zastosowano dwukolorowe, 7-segmentowe wyświetlacze LED z niezależnymi wyprowadzeniami wspólnej anody dla każdej z barw (wyprowadzenia 8 i 3 elementu). Dodatkowym atutem zastosowanych elementów jest możliwość jednoczesnej pracy obu diod świecących znajdujących się w każdym segmencie wyświetlacza, co w rezultacie daje nam możliwość uzyskania trzeciego koloru świecenia, w tym przypadku pomarańczowego. Jak widać, zastosowano multipleksowe sterowanie każdym z modułów LED. Mikrokontroler, w odpowiedzi na dane otrzymane przy pomocy magistrali I²C, załącza wspólne anody kolejnych modułów LED „wystawiając” wcześniej odpowiednie wartości do portu PB mikrokontrolera, który to steruje połączonymi katodami wyświetlaczy. Jeśli przełączanie będzie odpowiednio szybkie (w tym przypadku odbywa się z częstotliwością ok. 100 Hz na każdy moduł LED), zapobiegamy zjawisku migotania wyświetlanych informacji również w przypadku filmowania ich przy użyciu kamery wideo. Dodatkowo, na płytce sterownika przewidziano specjalne punkty lutownicze przeznaczone do sprzętowego ustawienia adresu wyświetlacza w przestrzeni adresowej magistrali I²C. Adres ten wyznaczamy według poniższego zapisu (zapis binarny):
gdzie A3, A2 i A1 to stan wyprowadzeń portów PC2, PC1 i PC0 mikrokontrolera ATmega8 (logiczne zero dla zwartych odpowiednich punktów lutowniczych).
Należy dla porządku dodać, iż w celu realizacji funkcji odbiornika magistrali I²C wykorzystano wbudowany w mikrokontroler sprzętowy interfejs TWI, który jest niczym innym jak zaawansowanym, sprzętowym interfejsem I²C w wykonaniu firmy Atmel. Wszelkie informacje przesyłane magistralą są odczytywane przez program obsługi przerwania od układu TWI, a następnie w pętli głównej programu wyświetlane na modułach LED. Każdy bajt przesyłany przez nadajnik (układ Master) jest potwierdzany sygnałem ACK przez nasz sterownik pełniący rolę układu Slave. Dodatkowo, jak wspomniano wcześniej, sterownik odpowiada na zaadresowanie go adresem wywołania ogólnego (0x00), co może być bardzo użyteczne w przypadku współistnienia wielu takich modułów na jednej magistrali I²C. W takim przypadku, za pomocą jednego rozkazu możemy zaadresować oraz sterować pracą wielu modułów LED w tym samym czasie, mając na uwadze fakt, iż będą one realizować te same zadania. Przyjęta ramka transmisji ma następującą konstrukcję:
Start – Adres układu ACK – Nr rozkazu ACK – Dana(1) ACK – Dana(x) ACK – Stop
gdzie:
- Start – predefiniowany sygnał Start magistrali I²C,
- Adres układu – sprzętowy adres układu sterownika lub adres wywołania ogólnego,
- Nr rozkazu – żądany numer rozkazu niniejszego sterownika LED,
- Dana – dane związane z żądanym rozkazem w liczbie zależnej od właściwości rozkazu,
- Stop – predefiniowany sygnał Stop magistrali I²C,
- Ack – sygnał potwierdzenia odbiornika
Dostępną listę rozkazów wraz z opisem ich właściwości oraz znaczeniem poszczególnych zmiennych przedstawiono w tab. 1.
W przypadku błędów transmisji oraz błędów po stronie programu użytkownika, sterownik wyświetli informację o przyczynie błędu podając jego numer. Interpretację informacji podano w tab. 2.
Należy także wspomnieć, iż na płytce naszego sterownika, która wymiarami zbliżona jest do standardowego modułu wyświetlacza LCD 2×16 znaków oraz posiada ten sam rozstaw otworów montażowych, przewidziano wyprowadzenia interfejsu SPI niezbędne dla zaprogramowania mikrokontrolera (program obsługi i bity konfiguracyjne (fuse bits). Ma to fundamentalne znaczenie, gdyż, z uwagi na chęć minimalizacji obwodu drukowanego sterownika, zastosowano mikrokontroler w obudowie przeznaczonej do montażu powierzchniowego, czyli takiej, jaka nie jest akceptowana przez większość programatorów.
Montaż
Montaż układu należy rozpocząć od wlutowania elementów biernych (w tym rezystorów, które znajdą się pod wlutowanymi później modułami LED), następnie montujemy tranzystory, układy scalone (montaż powierzchniowy), a na końcu moduły wyświetlaczy LED i złącza (pojedyncze piny dla interfejsu SPI i złącze kołkowe typu goldpin 1×4 dla magistrali i zasilania oznaczone jako CON).
Oczywiście złącze interfejsu SPI montujemy wyłącznie wtedy, gdy nie dysponujemy zaprogramowanym mikrokontrolerem. Główne złącze sterownika (CON) najlepiej zamontować od strony wyprowadzeń, gdyż pozwoli to na łatwe wpinanie modułu do odpowiedniego gniazda większych sterowników. Kłopotliwe może być lutowanie układów scalonych przeznaczonych do montażu powierzchniowego, zwłaszcza mikrokontrolera ATmega8, a to z uwagi na bardzo małe odległości pomiędzy poszczególnymi wyprowadzeniami. Najlepiej użyć do tego specjalnej stacji lutowniczej oraz odpowiednich topników lub też typowej stacji, dobrej jakości pasty lutowniczej oraz taśmy rozlutowniczej.
Poprawnie zmontowany układ nie wymaga jakiejkolwiek kalibracji i powinien działać bezpośrednio po włączeniu zasilania.
Robert Wołgajew