ISIX-RTOS – trzy wątki, przykłady w języku C: termometr z wyświetlaczem LED-RGB
Pierwsza seria artykułów zawierająca wprowadzenie do systemu ISIX z przykładami w języku C++ cieszyła się dużym zainteresowaniem wśród użytkowników portalu www.stm32.eu. Napływające pytania skłoniły mnie do napisania drugiej wersji przykładów – tym razem napisanych w języku C. W przykładzie opisanym poniżej pokażemy, jak tworzyć wątki w języku C z wykorzystaniem systemu ISIX oraz w jaki sposób skomunikować je ze sobą. Przedstawimy również możliwość wykorzystania wątków do realizacji trzech niezależnych zadań. W naszym przykładzie jeden wątek odpowiada za obsługę diody LED-RGB zainstalowanej na module KAmodRGB, drugi wątek za odczyt wyniku pomiaru temperatury za pomocą układu MCP9801 (KAmodTEM), trzeci natomiast odpowiada za obsługę diody LED zamontowanej na płytce STM32Butterfly.
Prezentowane urządzenie jest nietypowym termometrem, wskazującym temperaturę nie w wartościach liczbowych lecz za pomocą koloru świecenia LED-RGB. Prezentacja odbywa się na zasadzie pokazania na diodzie LED-RGB temperatury na zasadzie ciepło-zimno, gdzie kolor niebieski oznacza „zimno”, natomiast kolor czerwony „ciepło”. Wszystkie pośrednie temperatury prezentowane są przez kolory pośrednie. Jest to najbardziej naturalny sposób interpretacji, gdyż za pomocą tylko jednego spojrzenia możemy zorientować jaka jest aktualna temperatura.
Sterowanie diod LED RGB może być zrealizowane bezpośrednio za pomocą generatorów PWM wbudowanych w mikrokontroler lub za pomocą specjalizowanych układów dedykowanych do tego celu. W przykładzie zastosowano moduł KAmodRGB, który wyposażono w wyspecjalizowany 4-kanałowy sterownik PCA9633 firmy NXP, komunikujący się z otoczeniem za pomocą magistrali I2C. Dzięki zastosowaniu tego sterownika mikrokontroler przesyła dane o jasności LED w każdym kanale R-G-B za pomocą magistrali I2C, a generacją odpowiednich sygnałów zajmuje się PCA9633. Schemat połączeń pomiędzy modułami pokazano na rys. 1.
Rys. 1. Schemat połączeń elektrycznych pomiędzy STM32Butterfly i modułami KAmodRGB oraz KAmodTEM
Po połączeniu obu modułów z zestawem STM32Butterfly należy w module KAmodRGB przestawić wszystkie zwory konfiguracji adresu w pozycje „0” (rys. 1), w efekcie czego będzie on dostępny na magistrali pod adresem 0x00, natomiast czujnik w module KAmodTEM (zwory na liniach adresowych nie są zakładane pod adresem 0x90 (rys. 1).
Rys. 2. Podział zadań na wątki w prezentowanym przykładzie