wersja mobilna | kontakt z nami

Komputer samochodowy Mee 2.0 (1)

Numer: Lipiec/2016

Współcześnie czas życia urządzenia jest krótszy, niż kiedykolwiek wcześniej, co tylko potwierdza obiegową opinię, iż rozwój elektroniki użytkowej jest teraz szybszy. Wystarczy zauważyć, że większość producentów urządzeń z tego obszaru, aktualizuje swoje produkty co najmniej raz w roku fundując przy okazji swoim klientom niezłą łamigłówkę decyzyjną. Z jednej strony wydaje się to irracjonalne, z drugiej, dzięki temu dostajemy coraz to nowocześniejsze i zwykle znacznie ładniejsze urządzenia. Dobrym przykładem może być tutaj motoryzacja, która jest świetną platformą prezentacji możliwości technologicznych producentów różnych gałęzi przemysłu, w tym elektroniki w szczególności. Wszak dzisiejsze samochody są syntezą wielu, czasami ekstremalnie nowoczesnych, rozwiązań elektronicznych, które to integrują w sobie systemy, o jakich jeszcze do niedawna mogliśmy wyłącznie pomarzyć. Rekomendacje: estetyczny komputer, który może usprawnić korzystanie ze starszego modelu samochodu lub być dobrym przykładem, jak takie rozwiązanie zaimplementować samodzielnie.

Pobierz PDFMateriały dodatkowe

tabela1Kilku uznanych producentów samochodów (i nie tylko) deklaruje, iż w ciągu kliku lat wprowadzi do sprzedaży pojazdy samodzielnie poruszające się po drogach, zaś już teraz wyposaża swoje produkty w systemy, które pozwalają nazwać je autonomicznymi. Jako, że ostatnimi czasy miałem okazję „liznąć” tej nowoczesnej motoryzacji, muszę stwierdzić, że rzeczywiście robi ona piorunujące wrażenie, choć trzeba przyznać, że ta autonomiczność wymaga pewnego przyzwyczajenia. Z mojego punktu widzenia, osoby, która zajmowała się nieco grafiką komputerową i która to zwraca szczególną uwagę na formę prezentacji, szczególne wrażenie zrobiły wszelkiego rodzaju graficzne interfejsy użytkownika, prezentujące w piękny sposób zarówno dane pokładowe, jak i zawartości multimedialne, włączając w to coraz to częściej stosowane wirtualne zespoły zegarów w konsoli centralnej. Niby to nic nowego, bo zwykle nie pozyskujemy w ten sposób jakiś nowych, interesujących nas informacji, jednakże sposób ich „podania” budzi zachwyt i daje możliwość dowolnej personalizacji. Idąc tym tropem postanowiłem „zaktualizować” jeden ze swoich ostatnich projektów, a mianowicie uniwersalny komputer pokładowy Mee (EP 03/2015), wyposażając go w nowoczesny, piękny interfejs użytkownika zbudowany z wykorzystaniem kolorowego wyświetlacza TFT.

W tym momencie musiałem pokonać jeden z głównych problemów, na które napotykamy się za każdym razem, gdy sięgamy po element TFT, jego cenę! Moim głównym założeniem, podobnie, jak to miało miejsce, przy projekcie Mee, było przecież zbudowanie urządzenia dostępnego dla każdego, więc docelowy koszt jego budowy był głównym tabela2kryterium wyboru. Nie pozostało więc nic innego, jak znaleźć dobrej jakości, niewielki wyświetlacz TFT, którego cena pozwalałaby sprostać przyjętym założeniom. Na szczęście nie szukałem zbyt długo, gdyż jak zwykle mogłem liczyć na pomoc pana Sławomira Szwedy z firmy Unisystem, który dostarczył moduł RVT28AETNWN00 firmy Rivierdi wyposażony w popularny kontroler ILI9341, który to idealnie wpisuje się w nasze wymagania zarówno, jeśli chodzi o parametry techniczne, jak i bardzo niską cenę.

lst1Zacznę nietypowo, bo od opisu wspomnianego modułu. Dlaczego warto poznać ten element? Po pierwsze, dlatego, że z uwagi na swoje parametry stał się dość popularny i łatwo kupić gotowe moduły z wygodnym złączem, a po drugie, jego niska cena powoduje, że znacznie chętniej będziemy sięgać po to nowoczesne rozwiązanie. Wyświetlacz firmy Rivierdi charakteryzuje się następującymi, wybranymi cechami funkcjonalnymi:

lst2- Przekątna ekranu: 2,83” (obszar aktywny 43,2 mm×57,6 mm), bardzo mała grubość modułu – rzędu 3 mm.
- Rozdzielczość: 320x240 pikseli (możliwość pracy w trybie portret 240×320 pikseli lub pejzaż 320×240 pikseli).
- Liczba kolorów: 65 tys. /262 tys.
- Wbudowany filtr antyodblaskowy, podświetlenie LED.
- Interfejsy: 8-, 9-, 16- i 18-bitowa szyna danych, RGB, SPI/I2C (3- i 4-przewodowy), możliwość oddzielenia szyny danych od szyny rozkazów dla interfejsu równoległego.
- Możliwość wyposażenia w opcjonalny pojemnościowy lub rezystancyjny panel dotykowy,
- Taśma podłączeniowa typu ZIF 50 pinów (raster 0,5 mm).
- Napięcie zasilające 2,5…3,3 V.

Wyświetlacz RVT28AETNWN00 doskonale spełnia nasze wymagania, a dodatkowo zastosowany w nim sterownik ILI9341 ułatwia wykonanie oprogramowania sterującego. W tabeli 1 umieszczono opis rozmieszczenia wyprowadzeń taśmy ZIF.

Moduł TFT wyposażono w wiele interfejsów sterujących, przez co jego zastosowanie w docelowym systemie mikroprocesorowym jest ułatwione. Wybór aktywnego interfejsu sterującego jest wykonywany za pomocą wyprowadzeń IM0…IM3 modułu (tabela 2).

Jak widać, jest w czym wybierać! Jednak z uwagi na fakt, że nie dysponujemy bardzo szybkim mikrokontrolerem (AVR ATmega), posłużymy się równoległym, 8-bitowym interfejsem danych/rozkazów sterujących, dla którego aktywowania piny IM3…IM0 powinny być wyzerowane. Oczywiście, można by zastosować 16-bitową magistralę lst2bdanych, co zwiększyłoby szybkość transmisji (w procesorze 8-bitowym tylko nieznacznie), jednak w ten sposób zajmiemy cenne wyprowadzenia mikrokontrolera, które będą potrzebne do realizacji innych funkcjonalności. Zastosujemy jednak dwa inne rozwiązania, które pozwolą na zwiększenie prędkości przesyłania danych z mikrokontrolera do sterownika ekranu ILI9341. Po pierwsze, sygnał wyboru sterownika ekranu CSX przyłączymy na stałe do masy zasilania aktywując „na stałe” sterownik ILI9341, przez co funkcje odpowiedzialne za transfer danych nie muszą „obsługiwać” tegoż sygnału. Po drugie, przyjmiemy, że poziomem spoczynkowym sygnału wyboru rodzaju danych DCX będzie logiczna „1”, co oznacza, że przesyłane dane są domyślnie danymi treści obrazu lub danymi towarzyszącymi rozkazom sterującym. Pozwoli to na dalsze przyśpieszenie stosownych funkcji graficznych. Nasza biblioteka nie będzie również obsługiwać sygnału odczytu magistrali sterującej RDX, gdyż nie korzystamy w niej z możliwości odczytu danych ze sterownika ekranu. Sygnał ten na stałe ma poziom wysoki.

No dobrze, mamy już garść niezbędnych informacji dotyczących sterownika ekranu, więc pora zacząć „zabawę” w programowanie! Niezbędne są do tego dwie podstawowe funkcje, które pozwolą na wysłanie do wyświetlacza TFT rozkazu sterującego lub danych obrazu (w analogiczny sposób jak dane obrazu wysyłamy dane towarzyszące rozkazom sterującym). Interpretacja rodzaju danych, które są odbierane przez sterownik ekranu, jest zdeterminowana poziomem wyprowadzenia DCX. Poziom niski na tym wyprowadzeniu decyduje o tym, iż przesyłana wartość zinterpretowana zostanie jako komenda sterująca, zaś wysoki, iż dana zostanie potraktowana jako argument dla tegoż rozkazu sterującego lub dana pamięci ekranu (w zależności od przesłanego wcześniej polecenia). Wspomniane, podstawowe funkcje narzędziowe zamieszczono na listingu 1.

lst3Teraz możemy przystąpić do inicjalizacji sterownika naszego modułu TFT, ponieważ wymaga on ustawienia szeregu rejestrów konfiguracyjnych. Funkcję inicjalizacyjną pokazano na listingu 2. Brak przeprowadzenia inicjalizacji sterownika ekranu w zasadzie uniemożliwia poprawne funkcjonowanie modułu TFT, gdyż domyślne ustawienia rejestrów sterujących układu ILI9341 zwykle odbiegają od tych, wymaganych przez producenta wyświetlacza. Aby jednak w pełni zrozumieć znaczenie poszczególnych ustawień sterownika ekranu, niezbędna jest znajomość zawartości pliku nagłówkowego zamieszczonego na listingu 3.

Dalej, na listingu 4,pokazano funkcję odpowiedzialną za ustawienie aktywnego obszaru ekranu, w którego ramach jest przeprowadzany jest zapis do pamięci ekranu sterownika ILI9341 – jej użycie upraszcza manipulacje w zakresie pamięci obrazu.

Czas na funkcje odpowiedzialne za rysowanie prostych elementów graficznych, to jest funkcje umożliwiające wyświetlanie wypełnionego i „pustego” prostokąta na ekranie wyświetlacza TFT – pokazano je lst3bna listingu 5. Te funkcje korzystają z dwóch zmiennych globalnych przechowujących bieżący kolor treści ekranu oraz kolor tła. Specyfikacja tych zmiennych przedstawia się następująco: uint16_t Colour, Background.

Na listingu 6 zamieszczono nieskomplikowaną funkcję umożliwiającą wyświetlanie plików graficznych na ekranie wyświetlacza. Jednym z argumentów jest wskaźnik na tablicę (elementów 16-bitowych) umieszczoną w pamięci programu (Flash), która zawiera wielkość obrazu (pierwszy element: szerokość à MSB, wysokość à LSB) oraz jego zawartość (pozostałe elementy, przy czym każdy z nich zawiera kolor kolejnego piksela obrazu w formacie RGB565). Jest to rozwiązanie bardzo proste, jednak obarczone pewną wadą. Jak łatwo się domyślić, tak przygotowane obrazki zajmują dość sporo cennej pamięci programu. Jak temu zaradzić? Odpowiedź wydaje się dość prosta! Należy zastosować jakąś metodę kompresji powtarzających się danych, co pozwoli na ograniczenie wynikowego rozmiaru tablicy przechowującej treść obrazu. Ideę działania zastosowanego algorytmu kompresji najlepiej prześledzić analizując przykładowe ciągi słów 16-bitowych reprezentujących kolory kolejnych pikseli (założono powtarzanie się pikseli o kolorze 0xAAAA), co przedstawiono w tabeli 3. Zasada działania wspomnianego algorytmu jest bardzo prosta, a pomimo tego, dla obrazków o dużych obszarach jednolitych kolorów, osiągany stopień kompresji jest całkiem spory. Wymownym dowodem powyższej tezy jest rysunek 1, na którym pokazano obrazek i wynikową tablicę elementów 16-bitowych, reprezentującą jego treść w przypadku stosowania jak i niestosowania wspomnianego algorytmu kompresji obrazu.

Do „pełni szczęścia” brakuje nam dedykowanej aplikacji, za której pomocą dokonamy konwersji typowego pliku BMP do postaci tablicy języka C (o wspomnianej wcześniej organizacji danych) i która to dodatkowo umożliwi nam skompresowanie wyjściowego obrazka wedle powyższego algorytmu. Na szczęście napisanie takiej aplikacji nie jest rzeczą nazbyt skomplikowaną i nawet mi, mimo że dawno nie zajmowałem się językiem programowania innym, niż C, nie nastręczyło wielu problemów. Specjalnie na potrzeby tego projektu wykonałem aplikację, która realizuje wymaganą funkcjonalność (rysunku 2). Myślę, że przedstawione oprogramowanie jest na tyle proste i czytelne, iż nie wymaga dodatkowego słowa komentarza. Jedyne, czego potrzebujemy to funkcja, która umożliwia wyświetlenie na ekranie wyświetlacza skompresowanego obrazka – pokazano ją na listingu 7.

rys-1   rys-2

tabela3Uff, przyszedł czas na obsługę ostatniego elementu interfejsów graficznych, czcionek ekranowych! Aby jednak umożliwić wygodną obsługę wielu czcionek ekranowych, konieczne było wprowadzenie nowego typu danych, którego definicję pokazano na listingu 8. Bazując na zdefiniowanej powyżej strukturze, wprowadzono funkcję, która korzystając z globalnej zmiennej static fontDescription CurrentFont pozwala na ustawienie bieżącej czcionki ekranowej (listing 9). W tym momencie w końcu przyszedł czas na przedstawienie funkcji umożliwiającej rysowanie znaków, przy użyciu bieżącej czcionki ekranowej – listing 10. Ta funkcja korzysta z argumentu uint8_t Transparency, który to decyduje o tym, czy tło bieżącej czcionki ekranowej będzie określone wartością globalnej zmiennej uint16_t Background (wartość argumentu równa w takim przypadku SOLID_TEXT), czy też tło wyświetlanej czcionki będzie niejako przeźroczyste (wartość argumentu równa tym razem TRANSPARENT_TEXT)! Na bazie tejże funkcji wprowadzono dwie, nowe, proste funkcje, które umożliwiają wyświetlenie ciągu znaków z pamięci RAM, jak i pamięci programu (Flash) – pokazano je na listingu 11.

lst4 lst5 lst6
lst7 lst8 lst9
lst10 lst11 lst12

 

 

Robert Wołgajew, EP


Pozostałe artykuły

Gra elektroniczna Snake

Numer: Listopad/2016

Niegdyś budowanie konsol do gier było zarezerwowane tylko dla potentatów branży rozrywki. Wymagało bowiem użycia podzespołów, które albo były niedostępne dla przeciętnego użytkownika, albo podzespoły i/lub oprogramowanie niezbędne do wykonania urządzenia tego typu były koszmarnie drogie przy zakupie do celów pojedynczego projektu. Współcześnie każdy elektronik konstruktor, który zna się na programowaniu i aplikacjach mikrokontrolerów ...

Przedwzmacniacz mikrofonowy o wysokiej jakości

Numer: Listopad/2016

Mimo popularności np. karaoke, rzadko kiedy przedwzmacniacz mikrofonowy jest wbudowany we współczesnym sprzęcie audio. Często, jeśli jest w niego wyposażona np. karta muzyczna komputera PC, to jest on przeznaczony do współpracy z tanimi mikrofonami pojemnościowymi. Niestety, zwykle parametry takiego wejścia odbiegają od oczekiwań oraz w większości wypadków uniemożliwiają zastosowanie mikrofonów z "górnej półki". Ten problem rozwiązuje ...

Zaawansowany, funkcjonalny termostat

Numer: Listopad/2016

Optymalne ustawienie termostatu polega na uzyskaniu kompromisu pomiędzy jak najmniejszą amplitudą zmian temperatury i jak najmniejszą częstotliwością włączania urządzenia, którym steruje termostat. Dlatego zwykle określonej temperaturze towarzyszy zakres dopuszczalnych zmian temperatury nazywany histerezą. Można też po prostu określić temperatury graniczne: minimalną i maksymalną. Prezentowany termostat pozwala na ustawienie parametrów ...

Nieskomplikowany termometr-rejestrator

Numer: Listopad/2016

Wiedza o aktualnej temperaturze jest informacją, z której korzystamy na co dzień i to wielokrotnie. Niekiedy jednak oprócz wiedzy o aktualnej temperaturze, równie przydatna jest informacja o jej wahaniach w dłuższym przedziale czasu. Termometr-rejestrator zapamiętuje te zmiany, a następnie zapisane pomiary można obejrzeć jako wykres liniowy temperatury w funkcji czasu. Całe urządzenie składa się z 10 elementów. Jest małe, przystosowane ...

Sterownik silnika do napędu

Numer: Październik/2016

Prezentowane urządzenie służy do sterowania silnikiem prądu stałego i umożliwia jego pracę w obu kierunkach obrotu przy regulowanej prędkości obrotowej. Sterownik wyposażono w funkcjonalność łagodnego startu, z zatrzymaniem za pomocą krańcówek, po określonym czasie lub w wypadku przeciążenia.Rekomendacje: dzięki swojej funkcjonalności sterownik może pełnić funkcję np. sterownika napędu bramy, rolety i innych.

Mobilna
Elektronika
Praktyczna

Elektronika Praktyczna

Styczeń 2018

PrenumerataePrenumerataKup w kiosku wysyłkowym

Elektronika Praktyczna Plus

lipiec - grudzień 2012

Kup w kiosku wysyłkowym