Aris Edge S3A3 – nakładka z wyświetlaczem TFT Aris Edge LCD
Po skonfigurowaniu interfejsu SPI przystępujemy do dodania i konfigurowania frameworka I2C, który będzie obsługiwał komunikację ze sterownikiem panelu dotykowego. Wykonuje się to analogicznie jak dla SPI. Na rysunku 10 pokazano dodawanie do stosu, a na rysunku 11 jego konfigurację.
Rysunek 10. Dodawanie frameworka I2C
Rysunek 11. Konfiguracja frameworka I2C
W konfiguracji podajemy adres slave układu sterownika panelu dotykowego (0x48), długość słowa adresowego (7 bitów), kanał modułu komunikacyjnego oraz tryb prędkości transmisji (Fast mode).
Podobnie jak w przypadku interfejsu SPI, tu również trzeba samodzielnie napisać procedury wysyłania i odbierania sekwencji bajtów na magistrali I2C. – listingi 4 i 5.
static ssp_err_t SX8676_i2c_read ( sf_i2c_api_t const * const p_i2c_api, sf_i2c_ctrl_t * const p_i2c_ctrl, uint8_t * const p_dest, uint32_t const bytes ) { ssp_err_t err; /*w przypadku niepowodzenia odczytu operacja jest powtarzana SX8676_I2C_RETRY_TIMES razy */ for (int i = 0; i < SX8676_I2C_RETRY_TIMES; i++) { err = p_i2c_api->read(p_i2c_ctrl, p_dest, bytes, false, SX8676_I2C_TIMEOUT_TICKS); if (SSP_SUCCESS == err) { break; } } return err; }
Listing 4. Czytanie sekwencji danych z magistrali I2C
static ssp_err_t SX8676_i2c_write ( sf_i2c_api_t const * const p_i2c_api, sf_i2c_ctrl_t * const p_i2c_ctrl, uint8_t * const p_src, uint32_t const bytes, bool const restart) { ssp_err_t err; /*w przypadku niepowodzenia zapisu operacja jest powtarzana SX8676_I2C_RETRY_TIMES razy */ for (int i = 0; i < SX8676_I2C_RETRY_TIMES; i++) { err = p_i2c_api->write(p_i2c_ctrl, p_src, bytes, restart, SX8676_I2C_TIMEOUT_TICKS); if (SSP_SUCCESS == err) { break; } } return err; }
Listing 5. Wysłanie sekwencji danych przez magistralę I2C
Same operacje zapisywania i odczytywania w przypadku niepowodzenia są powtarzane definiowaną ilość razy. Jeżeli ta ilość prób zakończy się niepowodzeniem, to funkcje zwracają kod błędu zapisany w zmiennej err. W przeciwnym przypadku jest zwracany kod SSP_SUCCESS.
Opisywane funkcje są głównie związane z obsługą magistral komunikacyjnych SPI i I2C oraz inicjowaniem sterownika wyświetlacza. Kompleksowa obsługa wyświetlacza będzie wymagała zaimplementowania mechanizmów obsługi zdarzeń zgłaszanych przez sterownik panelu dotykowego oraz wygenerowania ekranów z umieszczonym na nich elementami graficznymi: grafikami, polami tekstowymi, widżetami, itp. Proces projektowania ekranów można znacznie uprościć stosując do tego celu aplikację GUIX Studio. Kod generowany przez GUIX Studio można łatwo zintegrować z projektem środowiska e2studio.
Dokładne opisywanie działania programu demonstracyjnego, nawet tylko w obszarze wykorzystywania wyświetlacza LCD, wykracza znacznie poza ramy tego artykułu. Dociekliwy czytelnik może pozyskać dodatkowe informacje analizując kod źródłowy i konfigurację programu demonstracyjnego.
Interfejs użytkownika jest starannie zaprojektowany w środowisku GUIX Studio. Podzielono go na kilka ekranów z możliwością nawigowania pomiędzy nimi.
Na pierwszym, powitalnym ekranie wyświetlanym po włączeniu zasilania jest wyświetlane zdjęcie modułu Aris Edge S3A3 – rysunek 12.
Żółty pasek na dole ekranu z symbolami „<” i „>” jest przeznaczony do sekwencyjnego przełączania ekranów. Naciśniecie symbolu powoduje wyświetlenie poprzedniego lub kolejnego ekranu. Taki sam pasek jest umieszczany w każdym z ekranów programu demonstracyjnego.
Kolejny ekran jest przeznaczony do wyświetlania danych z czujnika położenia tak, jak to zostało pokazane na rysunku 13.
Rysunek 13. Ekran z danymi odczytanymi z czujnika położenia
Najbardziej rozbudowany i chyba najbardziej atrakcyjny jest kolejny ekran (rysunek 14) wyświetlający dane z czujników temperatury, ciśnienia, wilgotności i natężenia oświetlenia. Można go użyć jako użytecznej stacji pogodowej. Brakuje tylko czujnika temperatury zewnętrznej.
Rysunek 14. Ekran z danymi z czujników temperatury, ciśnienia, wilgotności i natężenia oświetlenia
Ostatni ekran pokazuje dane odczytywane z magnetometru – rysunek 15.
Rysunek 15. Ekran wyświetlający dane z magnetometru
Jak już wspomniałem, wyświetlacz LCD z ekranem dotykowym jest bardzo dobrym elementem do zbudowania lokalnego interfejsu użytkownika. Aplikacja demonstracyjna wyświetla lokalnie dane odczytywane z czujnika i równolegle przesyła je przez łącze Bluetooth aplikacji uruchomionej na smartfonie. Na rysunku 16 pokazano równoległa pracę obu interfejsów: lokalnego z wyświetlaczem LCD i zdalnego uruchamianego na smartfonie.
Rysunek 16. Równoległa praca interfejsów użytkownika
Podsumowanie
Prezentowany moduł mikrokontrolera łączy w sobie kompaktowe wymiary z bogatą ofertą zabudowanych czujników. Użyty mikrokontroler z rodziny S3 Renesas Synergy z wydajnym rdzeniem ARM Cortex M4, sporą pamięcią programu i danych, oraz wieloma układami peryferyjnymi daje możliwość uruchamiania nawet zaawansowanych programów, w tym wymagających aplikacji IoT. Wyprowadzenia w standardzie Arduino powalają na proste dołączenie bardzo wielu modułów rozszerzeń. Ciekawym uzupełnieniem modułu mikrokontrolera jest moduł wyświetlacza LCD elektrycznie zgodnego z Arduino. Wyświetlacz mimo relatywnie małej rozdzielczości jest dobrze dobrany i razem z modułem mikrokontrolera stanowi solidną bazę sprzętową do budowy własnych aplikacji. Jednym z przykładów możliwości mikrokontrolera i zewnętrznych układów peryferyjnych jest opisywany wyżej program demonstracyjny.
Na pochwałę zasługuje też bardzo dobre wsparcie w postaci firmowej biblioteki SSP i bezpłatnych narzędzi e2studio, a także bardzo popularnego środowiska IAR Embedded Workbench.