Oczekiwaną instalację pokazuje rysunek 12 (moduły wyświetlające będą opisane w dalszej części), gdzie moduł zarządzający wyświetlaniem współpracuje z dwoma wyświetlaczami o identyfikatorach SCR01 i SCR02. Życzeniem użytkownika (moim) jest, by jeden wyświetlacz zawsze pokazywał temperaturę wody w kotle, drugi zaś różne dane pomiarowe: temperaturę spalin, temperaturę na zewnątrz, temperaturę wewnątrz itp. Wybór wyświetlanych informacji dokonywany jest przez naciśnięcie odpowiedniego przycisku. Każdemu przyciskowi może być przyporządkowana funkcja w wyniku odpowiedniej konfiguracji modułu.
Szczegóły konfiguracji są opisane w tabeli 2 (dostępnej w Elportalu). Konfiguracja jest realizowania za pośrednictwem transmisji szeregowej z interfejsem RS232, co oznacza, że nie ma konieczności wysyłania polecenia REPLY. Do tej operacji zalecane jest użycie odpowiedniego programu konfiguracyjnego, który można pobrać jako materiały dodatkowe do poprzednich części artykułu.
Po zakończeniu konfiguracji połączonej z zapisem do pamięci nieulotnej, moduł jest przygotowany do pracy w środowisku z dwoma modułami wyświetlaczy.
Ostatnim elementem biorącym udział w prezentacji danych jest moduł wyświetlający. Jest to maksymalnie uproszczone rozwiązanie (przykładowo nie ma własnego stabilizatora napięcia), gdzie mikrokontroler AVR obsługuje czterocyfrowy siedmiosegmentowy wyświetlacz LED. Schemat jednostki centralnej pokazuje rysunek 13.
Jest to typowa aplikacja mikrokontrolera AVR. Do budowy modułu został wybrany mikrokontroler ATMEGA8515. Jest to ulepszona wersja poprzednika, mikrokontrolera AT90S8515 (który również może być zastosowany do tego celu). W szufladzie mam trochę takich „starych” procesorów, więc jest to doskonała forma „utylizacji” elementów, dla których szanse zastosowania są coraz mniejsze.
W przypadku użycia układów o symbolu AT90S8515 należy dodać zewnętrzną pamięć EEPROM (U102, rysunek 13), gdyż wbrew informacjom zawartym w dokumentacji, wewnętrzna pamięć nieulotna EEPROM jest trochę ulotna, jest to wiedza wynikająca z praktyki. Nowszy procesor ATMEGA8515 tej wady nie ma (to znaczy nie zauważyłem, by taką miał) i montaż wspomnianej pamięci U102 nie jest konieczny.
Sam wyświetlacz, jako złożenie z wyświetlaczy jednocyfrowych, jest obsługiwany w trybie multipleksowanym, schemat rozwiązania pokazuje rysunek 14. Oznacza to, że w danej chwili procesor przez swój PORT A (rysunek 13) steruje włączaniem każdego segmentu niezależnie. W torze znajduje się układ U201 pełniący funkcję układu zwiększającego wydajność prądową na potrzeby wyświetlacza.
Włączanie do świecenia określonych segmentów musi dotyczyć odpowiedniego jednocyfrowego wyświetlacza. Realizowane jest to w ten sposób, że tylko jeden z czterech ma włączone napięcie na anodach diod świecących. Pozostałe, pomimo wspólnego wysterowania segmentów, są wyłączone. Włączaniem napięcia na anodach zajmują się tranzystory Q201–Q204 (rysunek 14), które z kolei są wysterowane odpowiednimi pinami PORT B mikrokontrolera (rysunek 13). W trakcie prac nad oprogramowaniem nieocenioną pomoc stanowił zespół LEDów (rysunek 15), obecnie ich znaczenie zmalało, ale nadal są wykorzystywane.
Istotnym elementem modułu wyświetlającego jest interfejs przetwarzający sygnały transmisji szeregowej, schemat pokazuje rysunek 16. Jak we wszystkich dotychczasowych rozwiązaniach, jest zastosowany układ SN75C176. Jak wielokrotnie już pisałem, do pracy półdupleksowej wymaga on rezystorów podciągających odpowiednie linie układu do stanu logicznej jedynki (R401 i R402, rysunek 16).
Wyjście układu jest wyprowadzone na dwa identyczne złącza (są one połączone równolegle). Oprócz wymaganych dwóch pinów sygnału RS485 występują tam piny zasilające (moduł zasila się z zewnątrz). Uzasadnieniem zastosowania podwójnego złącza jest to, że w ten sposób bardzo łatwo uzyskuje się lokalną magistralę zasilająco-transmisyjną, co symbolicznie pokazuje rysunek 12.
Poszczególne moduły są ze sobą połączone czterożyłowym przewodem. Pierwszy przewód to połączenie złącza P401 (rysunek 4, EdW 2/2020) ze złączem P401 (rysunek 16). W ten sposób do modułu wyświetlającego doprowadzone jest napięcie zasilające oraz sygnał transmisji szeregowej. Kolejny przewód to połączenie złącza P402 (rysunek 16) ze złączem P401 (rysunek 16) w następnym module wyświetlającym. W sumie można zbudować łańcuch modułów o dowolnej długości.
Płytkę PCB zaprojektowaną do powyższego schematu pokazuje rysunek 17 (strona TOP) oraz rysunek 18 (strona BOTTOM). Zmontowany moduł prezentuje fotografia 3. Montaż elementów należy wykonać bardzo starannie. Moduł nie zawiera własnego stabilizatora napięcia, więc nie zachodzi potrzeba jego uruchomienia. Przed zaprogramowaniem pamięci FLASH mikrokontrolera należy odpowiednio ustawić bity fuse (w przypadku użycia układu AT90S8515 tę operację należy pominąć, gdyż ten układ nie wymaga zmian w obszarze fuse, rysunek 19).
Oczekiwaną postać bitów (ATMEGA8515) pokazuje rysunek 20. Program sterujący zawarty w module wyświetlacza w swoich rozwiązaniach nie odbiega od dotychczasowych rozwiązań. Obsługa transmisji szeregowej jest identyczna jak w każdym module realizujących rolę SLAVE: odbiera wszystkie dane, wysyła dane jedynie w sytuacji, gdy otrzyma na to odpowiednią zgodę (dla lokalnej magistrali RS485 funkcję elementu MASTER spełnia wyżej opisany moduł sterujący wyświetlaniem danych).
Analiza i rozpakowanie odbieranego poprzez UART polecenia jest identyczna. Różni się realizacja poleceń, gdyż każdy moduł oprócz poleceń obsługiwanych przez każdy element systemu Infinity realizuje swoje specyficzne działania. Takim fragmentem programu, który może wymagać wyjaśnień, jest obsługa wyświetlacza. Z wyświetlaczem związanych jest kilka zmiennych:
- DigitCounter – inkrementowany modulo 4 licznik, określa jedną z czterech cyfr wyświetlacza, która jest aktywowana do pracy,
- DispBuffer [ 4 ] – bufor wyświetlacza, zawiera stan włączenia każdego z segmentów (siedem segmentów plus kropka) dla każdej z cyfr wyświetlacza.
W wyniku odebrania odpowiednich poleceń nakazujących wyświetlanie danych, program umieszcza je w buforze wyświetlacza (zmienna DispBuffer). W funkcji obsługi przerwań od upływu czasu realizowana jest jego obsługa – algorytm pokazuje listing 6. W obsłudze każdego przerwania od upływającego czasu realizowane jest odświeżanie wyświetlanych danych. Patrząc na schemat (rysunek 14), można zauważyć, że podanie na bazę tranzystorów Q201–Q204 stanu logicznego zera powoduje aktywowanie odpowiedniej cyfry wyświetlacza.
Z tego powodu pierwszą czynnością, jaka jest wykonywana w obsłudze, jest wyłączenie wszystkich tranzystorów (żadna cyfra nie jest aktywowana) jako operacja ustawienia wybranych wyjść portu do stanu logicznej jedynki. W dalszej kolejności jest inkrementowany numer cyfry z zachowaniem dwóch najmłodszych bitów (zmienna będzie przyjmować wartości od 0 do 3). W zależności od stanu tego licznika, do wysterowania segmentów jest użyty odpowiedni element bufora wyświetlacza oraz określone jest wysterowanie portem wpływającym na pracę tranzystorów, które z kolei aktywują odpowiednią cyfrę wyświetlacza.
Odebranie danych (znakowych) do wyświetlenia wymaga konwersji z postaci znakowej na postać wymaganą przez wyświetlacz siedmiosegmentowy. Wbudowana funkcja (listing 7) do wspominanej konwersji potrafi przetwarzać liczby szesnastkowe (i nie reaguje na pisownię małymi lub wielkimi literami). Zauważmy, że moduł ma za zadanie wyświetlić napis, postać znakową liczby, która może być zapisana dziesiętnie, szesnastkowo czy binarnie (nie ma znaczenia jej wartość).
Procedura reakcji na polecenia wyświetlenia odebranej znakowo liczby dokonuje niewielkiej analizy. W ciągu znaków możne znajdować się znak przecinka, który oddziela część całkowitą od ułamkowej. Jest on zamieniany na wysterowanie segmentem kropki i połączony z sąsiednią cyfrą (znak kropki dziesiętnej nie „rozpycha się” na wyświetlaczu).
Podobnie wydzielany jest znak minus (jeżeli wyświetlana liczba jest ujemna). W przypadku odebrania znaku plus (na oznaczenie liczby dodatniej) jest on pomijany (nie bardzo daje się sensownie zaprezentować znak plus na wyświetlaczu siedmiosegmentowym). Po skompletowaniu całej postaci znakowej liczby jest ona dosunięta na wyświetlaczu prawostronnie. Omawiany algorytm pokazuje listing 8.
Moduł sterowania wyświetlaniem danych pomiarowych rozpoznaje polecenia, wyszczególnione w tabeli 3 (dostępnej w Elportalu).
Po zaprogramowaniu pamięci FLASH mikrokontrolera należy go odpowiednio skonfigurować. W przypadku modułu wyświetlacza jedynym elementem, jaki należy zmienić, jest jego identyfikator. W opisanej instalacji potrzebne są dwa zespoły wyświetlacza, którym należy przydzielić identyfikatory: SCR01 i SCR02. Można to przeprowadzić w laboratoryjnym zestawie badawczym (fotografia 4). Jest on do tego przygotowany, ma odpowiedni zestaw przewodów dedykowanych dla określonych modułów.
Zaprezentowane właśnie moduły zamykają cykl artykułów opisujących poszczególne składniki systemu Infinity. Kolejny odcinek zostanie poświęcony kwestiom mechanicznym i instalacyjnym.