Elektroda.pl
Elektroda.pl
X
Elektroda.pl
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC

p.kaczmarek2 02 Lip 2019 14:46 1554 5
  • MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC

    Witajcie moi drodzy
    Tutaj opiszę moje doświadczenia z uruchamianiem sterownika LED MAX7219 oraz bibliotekę do jego obsługi którą opracowałem dla mikrokontrolerów PIC. W skrócie MAX7219 to kostka która pozwala sterować bardzo dużą liczbą diod LED za pomocą tylko kilku pinów mikrokontrolera.

    Co to jest MAX7219?
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    MAX7219 to prosty sterownik wyświetlaczy LED o wspólnej katodzie zdolny obsłużyć aż 64 diody LED. Dostępny jest w 24-pinowych obudowach DIP i SO. Sterowany jest poprzez szeregowy interfejs 4-wire zgodny z SPI. Czyli dzięki niemu możemy użyć tylko kilku pinów mikrokontrolera do sterowania dużą liczbą diod. Moduły oparte na MAX7219 można łączyć szeregowo ze sobą, jednocześnie wielokrotnie zwiększając ilość LEDów sterowanych poprzez ten same piny.
    MAX7219 zasilany jest z 5V i obsługuje dodatkowo opcjonalne kodowanie BCD wyświetlanych znaków. Pozwala również ustawić jasność całego segmentu.
    Układ do pracy nie wymaga wielu zewnętrznych części. Prąd wyświetlaczy ustawia się tylko jednym rezystorem. Konkretne parametry wyświetlacza, jego prądy oraz częstotliwość odświeżania można odczytać z noty katalogowej układu:
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    To co dla nas najważniejsze, czyli podłączanie kolejnych wyświetlaczy na jednej lini, tzw 'daisy chaining' wygląda tak:
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    Na obrazku warto jest zwrócić uwagę na połączenie CLK, CS oraz DI/DO. Schemat również pokazuje połączenie pozostałych pinów. Oczywiście w ten sposób można połączyć też więcej niż dwa układy MAX7219.


    Zakupione moduły
    Wszystko zaczęło się gdy w pewnym chińskim sklepie online kupiłem dwa takie moduły LED:
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    Zapłaciłem 14zł za sztukę. Przesyłka była darmowa. Paczka dotarła dość szybko (właściwie dwie paczki, bo każdy kupiłem od innego sprzedawcy). Wyświetlacze były zapakowane dość bezpiecznie, zwłaszcza jak na paczkę z chin (dodatkowo były w folii bąbelkowej, nie widać tego na zdjęciu):
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    Jeden taki moduł składa się z czterech osobnych MAX7219 i zawiera w sumie 4 segmenty po 64 diody LED (256 LEDów). Mimo to można obsłużyć go za pomocą tylko 3 pinów mikrokontrolera (CS, DATA, CLK) i dwóch pinów zasilania. Na PCB wyprowadzone są piny zarówno od strony połączenia z MCU jak i od drugiej strony gdzie można podłączyć kolejne moduły:
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    Po przyglądnięciu się widać, że pod macierzą LED jest MAX7219 w obudowie SOIC:
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    W internecie znalazłem również zdjęcie które pokazuje taki moduł ze zdjętą macierzą LED:
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    Opracowanie biblioteki
    Całą bibliotekę napisałem w środowisku MikroC PRO for PIC, ale proszę nie sugerować się tym - kod jest dość uniwersalny i można go skompilować raczej w dowolnym kompilatorze języka C. Nie używa on niczego charakterystycznego dla danego środowiska bądź PICa.
    Tak wygląda całość w trakcie pisania:
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC

    Do samego wgrywania skompilowanego już wsadu na PIC użyłem softu PICKIT2 na Windows:
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    Użyty hardware z kolei prezentuje się tak:
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    Na zdjęciu widać mój pierwszy DIY programator PIC (klon PICKIT2), prostą płytkę z PIC18F45K50 oraz dwa moduły LED.
    Sama płytka z PIC18F45K50 ma w zasadzie na pokładzie tylko minimum potrzebne do uruchomienia tego PICa, jej schemat przypomina bardzo Pinguino 4550:
    MAX7219 i PIC18F45K50 - obsługa sterownika LED na mikrokontrolerze PIC
    Tyle, że w tym projekcie nie użyłem ani środowiska Pinguino ani sprzętowego USB z PICa. No i na schemacie powyżej jest PIC18F4550 a nie PIC18F45K50, ale akurat one oba są dość mocno do siebie podobne.

    Skrócony zarys przygotowanej biblioteki
    Tutaj przedstawię skróconą dokumentacje mojej biblioteki. Bibliotekę cechuje:
    - wsparcie dla wielu kontrolerów LED (kontroler LED jest przedstawiony jako struktura, nie ma zmiennych globalnych)
    - kontroler LED może być na dowolnych pinach IO (obsługa jest w pełni programowa)
    - biblioteka nie korzysta z żadnych funkcji charakterystycznych dla danego PICa lub środowiska, wiec powinna się łatwo dać przenieść do innego kompilatora czy mikrokontrolera.
    Biblioteka jest zrobiona tak, że pozwala podłączyć wiele MAX7219 zasadniczo na trzy sposoby. Możne je łączyć kaskadowo (tak jak fabrycznie w użytym module są cztery połączone kolejno, można tak połączyć więcej), można użyć wspólnych pinów DATA/CLK i jedynie przełączać wybrany moduł za pomocą CS (jak sama nazwa wskazuje - chip select), bądź podłączyć oba moduły całkiem osobno, używając w pełni odrębnych pinów. Bibliotekę wzorowałem na podobnych rozwiązaniach dla Arduino.

    Sercem biblioteki jest struktura max72XX_s która reprezentuje jeden moduł LED (tzn. kilka sterowników MAX7219 połączonych razem). Wskaźnik do obiektu tej struktury jest pierwszym argumentem każdej z funkcji opisanej poniżej.

    Najważniejsze funkcje z mojej biblioteki przedstawiłem w tabelce:

    Nazwa funkcjiArgumenty Opis
    MAX72XX_SetupPinsled,portCS, pinCS, portCLK, pinCLK, portData, pinDataFunkcja ustawia piny powiązane z danym kontrolerem LED. Do kontroli potrzebne są 3 piny - CS, CLK, Data. Każdy opisany jest kolejno za pomocą wskaźnika na jego port i samym numerem pinu
    MAX72XX_Initled,devicesfunkcja inicjuje dany kontroler LED. Jego piny powinny być wcześniej ustawione za pomocą MAX72XX_SetupPins. Parametr devices określa ile segmentów LED jest podłączonych na danej linii
    MAX72XX_setIntensityled,adres,jasnośćFunkcja ustawia jasność danego segmentu LED z danego kontrolera. Jasność jest wyrażona jako liczba od 0 do 16.
    MAX72XX_shiftled,kierunekFunkcja przesuwa wszystkie diody w prawo lub lewo, tzn. pozwala wykonać animacje przewijania, scrollowania. Funkcja poprawnie obsługuje zapętlanie się animacji w nieskończoność. Parametr kierunek może mieć wartość -1 lub 1.
    MAX72XX_setLedled,segment, kolumna,wiersz, stan Funkcja ustawia stan pojedynczej diody LED. Stan może wynosić 0 (wyłączona) lub 1 (włączona).
    MAX72XX_DisplayArrayled,dane, rozmiar,pierwszy segment Funkcja pozwala wyświetlić prostą grafikę na danych segmentach (8x8) LED. Grafika opisana jest jako tablica bajtów - jeden bit odpowiada jednej diodzie.

    Konkretne przykłady użyć funkcji są w załącznikach. Powyższy opis nie ma na celu być 100% wyczerpującym, jedynie pokazać co do czego jest.

    To nie są wszystkie funkcje które są w załączonym kodzie, bo jest tam jeszcze parę pomocniczych funkcji PORT_*, które służą mi do obsługi portów, ale to co tutaj opisane jest najważniejsze i powinno starczyć do większości zastosowań.

    Przykładowy kod:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Przykładowy kod wyświetlania tablicy bajtów jako grafiki (warto zwrócić uwagę na czytelny zapis binarny pikseli):
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Biblioteka na ten moment zakłada maksimum 8 MAXów połączonych kolejno, ale można je zwiększyć bez problemu modyfikując strukturę max72XX_t, a dokładniej to rozmiar tablicy w niej.

    Efekty
    Wszystkie testy zostały przeprowadzone na dwóch osobnych modułach LED (każdy składa się z czterech MAX7219) sterowanych jednocześnie przez PIC18F45K50. Każdy z modułów w trakcie testów był podłączony całkiem osobno, na osobnych pinach, by pokazać że biblioteka coś takiego wspiera. Ale równie dobrze można by było je podłączyć inaczej, tak by oszczędzić więcej pinów.
    Test każdej diody LED osobno:

    Test animacji przesuwania prawo-lewo:

    Test kontroli jasności (jasność każdego fragmentu 8x8 jest niezależna):

    Kod wszystkich animacji z filmów powyżej jest w załączniku.

    Podsumowanie
    Sterownik LED MAX7219 bardzo mi się spodobał. Jest prosty w obsłudze i tani. Obsługuje zarówno macierze LED jak i wyświetlacze 7-segmentowe. Jest dość popularny wśród użytkowników Arduino, więc nic dziwnego, że musiałem dla niego też przygotować bibliotekę dla PIC, która jak mam nadzieje przyda się nie tylko mi. Całość udostępniam poniżej.
    Moja biblioteka MAX72XX dla PIC18 (i podobnych):
    MAX72XX_fo...PIC18f.zip Download (2.19 kB)Punkty: 4 dla użytkownika
    Oraz jej przykład użycia (wraz ze skompilowanym wsadem dla PIC18F45K50 z rezonatorem kwarcowym 20MHz):
    PIC18F45K5...Matrix.zip Download (88.56 kB)Punkty: 4 dla użytkownika
    Załączam również datasheet MAX7219:
    MAX7219-MA..221.pdf Download (491.3 kB)

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • PCBway
  • PCBway
  • #3
    andrzejek23
    Poziom 18  
    A wiecie, ile lat go już produkują? Ok. 17 lat temu robiłem na nim zewnętrzny wyświetlacz czasu utworu do Winampa (na Atmedze8 z komunikacją z PC po RS232), ale to były czasy, kiedy jeszcze miałem wszystkie włosy na głowie :)
  • #5
    gdkj
    Poziom 26  
    Taka dygresja : fajne rzeczy ale chyba konstrukcyjnie już prościej jak na neopixelach wyświetlaczy zrobić się nie da.



    A w arduino to już płacz, 5 minut nauki.
  • #6
    Jogesh
    Poziom 28  
    Fajnym sterownikiem matryc LED jest HT1632C. Obsługuje 32x8 albo 16x16 LEDów.