
Mikroprocesorowa ośla łączka, część 9
Zaprezentowany dotychczas moduł 8-cyfrowego wyświetlacza 7-segmentowego LED ma znacznie więcej możliwości. Nadszedł czas by się z nimi zapoznać. Jednocześnie zrobimy duży krok tworząc program źródłowy składający się z wielu plików.
Oprogramowanie samego modułu wyświetlacza może stanowić fragment wchodzący w skład wielu różnych projektów. Wystarczy, że tworzone rozwiązanie (jako połączenie dwóch elementów: części sprzętowej, zawierającej mikrokontroler, oraz elementu oprogramowania) będzie zawierać wspomniany wyświetlacz. Warto więc stworzyć oddzielny i niezależny plik zawierający funkcje związane z obsługą tego wyświetlacza (bazującego na MAX7219). Dołączenie go do bieżącego programu będzie podobne jak dołączenie standardowej biblioteki (poprzez #include). Wcześniej jednak musimy zagłębić się w „filozofię” działania tej dyrektywy.
Możliwości modułu wyświetlacza z układem MAX7219
Zanim stworzymy moduł obsługi wyświetlacza, konieczne jest zapoznanie się z układem MAX7219 – z jego budową i możliwościami. Zawiera on 14 rejestrów, z których każdy jest identyfikowany swoim adresem (rysunek 1).
Rejestr o adresie 0 hex (No-Op) jest używany przy kaskadowym połączeniu kilku układów. Kolejnych 8 rejestrów zawiera treść wyświetlaną na poszczególnych pozycjach znakowych. Pozostałe rejestry są przeznaczone do specyficznych funkcji realizowanych przez wyświetlacz, jak przykładowo Intensity określa jaskrawość wyświetlacza
czy Scan Limit pozwala określić ile jest używanych cyfr z całego zestawu. Aby wpisać dane do odpowiedniego rejestru należy wysłać szeregowo słowo 16-bitowe, które zawiera jednocześnie adres docelowego rejestru oraz jego zawartość (rysunek 2).
Do transmisji używane są trzy sygnały (rysunek 3). Układ może pracować w jednym z dwóch trybów (konfigurowanych poprzez wpis do rejestru Decode Mode, rysunek 1). Z dekodowaniem – wtedy na najmłodszych 4 bitach danych zapisywanych do rejestrów Digit 0...Digit 7 podawany jest binarny kod cyfry (można wyświetlić jedynie cyfry i kilka wybranych znaków, przykładowo odstęp lub minus), układ sam przetworzy to na odpowiednie sterowania segmentami by zobrazował się wymagany znak.
Inną możliwością jest praca bez dekodowania – wtedy należy na 8 bitach określić segmenty, jakie muszą być włączone (w tym przypadku bit o wartości 1 oznacza włączenie danego segmentu, gdzie przyporządkowanie poszczególnych bitów do segmentów jest ściśle ustalone i nie można tego zmieniać).
Podział modułu na dwa typy plików
Dotychczas tworzyliśmy plik zawierający funkcje oraz zmienne programu. W początkowej części występowały użycia dyrektywy #include (przykładowo #include <avr/interrupt.h>) oznaczające dołączenie do programu określonych funkcji bibliotecznych. Może zrodzić się naturalne pytanie, czy sami możemy stworzyć coś podobnego: dołączyć do programu własny zestaw funkcji, który jako coś uniwersalnego może wchodzić w skład wielu innych programów. Takim przykładem może być zestaw funkcji do obsługi wyświetlacza z układem MAX7219. Zauważmy, że dotychczas, przy tworzeniu programu w postaci źródłowej,
plik zawierający zapisy w języku C miał rozszerzenie „.c”, natomiast pliki dołączane do programu poprzez #include mają rozszerzenie „.h”. Występuje tu podział na dwa rodzaje plików: plik o rozszerzeniu „.c”, zawierający zmienne i funkcje realizujące jakieś operacje wynikające z algorytmu działania programu, oraz pliki nagłówkowe o rozszerzeniu „.h” (to h pochodzi od słowa header – nagłówek). Plik nagłówkowy powinien zawierać jedynie zgłoszenia, taką deklarację elementów (funkcji i zmiennych) zawartych w „synchronicznym” z nim plikiem źródłowym. Ogólnie nie powinny się w nim znaleźć elementy aktywnie generujące kod (jak funkcja wraz z jej „ciałem”) lub mające wpływ na rezerwację miejsca na zmienne. Wynika to z filozofii działania kompilatora języka C. W rzeczywistości kompilator nie przetwarza tekstu programu napisanego przez nas.
(…)
——– ciach! ——–
To jest tylko fragment artykułu, którego pełna wersja ukazała się w numerze lutowym czasopisma Zrozumieć Elektronikę (ZE 2/2025). Pełną wersję czasopisma znajdziesz pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 2/2025 znajduje się tutaj.
Andrzej Pawluczuk
apawluczuk@vp.pl
Uwaga! Osoby, które nie są (jeszcze) stałymi Patronami ZE, mogą nabyć PDF-y z pełną wersję tego numeru oraz wszystkich innych numerów czasopisma wydanych od stycznia 2023, „stawiając kawę” (10 złotych za jeden numer czasopisma w postaci pliku PDF).
W tym celu należy kliknąć link (https://buycoffee.to/piotr-gorecki), lub poniższy obrazek
Następnie wybrać – Postaw kawę za:
– jeśli jeden numer ZE – 10 zł,
– jeśli kilka numerów ZE – Własna kwota. I tu wpisać kwotę zależną od liczby zamawianych numerów – wydań (N x 10 zł),
Wpisać imię nazwisko.
Podać adres e-mail.
Koniecznie zaznaczyć: „Chcę dodać dedykację/Wiadomość dla Twórcy” i tu wpisać, który numer lub numery ZE mam wysłać na podany adres e-mailowy. Jeśli ma to być numer z tym artykułem trzeba zaznaczyć, że chodzi o ZE 2/2025.
UWAGA!!! E-mail z linkiem do materiałów (Smash) wysyłamy zazwyczaj w ciągu 24 godzin. Czasem zdarza się jednak, że trafia do spamu. Jeśli więc nie pojawi się w ciągu 48 godzin prosimy sprawdzić w folderze spam, a ewentualny problem zgłosić na adres: kontakt@piotr-gorecki.pl.