Arduino i napisy – czyli matryca LED z MAX7219

MAX7219 jest układem mającym służyć do sterowania wyświetlaczami 7seg. I to w większej ilości, każdy z takich MAXów może sterować 8 cyframi. Długi czas na odliczanie do wybuchu :)

O na przykład taki wyświetlacz 7 seg

Ale, skoro 7seg to jest 8 diod (bo 7 kresek i kropka) i jeden MAX steruje 8 takimi znakami, to równie dobrze możemy go podłączyć do matryc LED 8×8! Dodać do tego Arduino i możemy robić wyświetlacz tekstowy!

Co potrzebujesz by taki zrobić? Nasz moduł MOD-1671 8×8 niebieska matryca LED z MAX7219, Arduino UNO i tradycyjnie kabelki.

Nasz bohater komunikuje się ze światem przez szynę SPI. Dlatego, podłączenie jest dość tradycyjne:

  • GND -> GND
  • 5V -> Vcc
  • D11 (MOSI) -> DIN
  • D3 -> CS Tutaj możesz użyć innego pinu w Arduino. CS może być w zasadzie dowolnym pinem.
  • D13 (CLK) -> CLK

Podłączenie to jedno, a drugie to oprogramowanie. Idąc na skróty (bo każdy haker zawsze pisze własne biblioteki niezadowolony z jakości kodu gotowych rozwiązań, co nie? ;) ) korzystamy z bibliotek. W liczbie mnogiej, bo są potrzebne dwie. Pierwsza „ogarnia” podstawową komunikacje i efekty, a druga czyni łatwym wyświetlanie napisów. Tak więc poznajcie MD_MAX72XX oraz MD_Parola. Są jednego autora i mają dość długą historię – mam nadzieję, że będą też dalej utrzymywane/rozwijane.

Instalację bibliotek w Arduino IDE pominę. Sam z niego od dawna nie korzystam, mimo, że wersja 2.0 wygląda na znacznie wygodniejszą w nieco bardziej zaawansowanych użyciach. Polecam cały czas Platformio, bo ma ono bardzo istotną zaletę. Plika konfiguracyjny platformio.ini w którym możemy zdefiniować używane biblioteki, z dokładnością do wersji. To jest wielka zaleta – wiele razy tutaj na blogu napisaliśmy przykłady jak korzystać z jakiś modułów. A po roku, dwóch okazuje się że użyta biblioteka została uaktualniona do wersji z innym interfejsem i nagle program przykładowy nie kompiluje się.

Cóż, żeby nie przeciągać – tutaj jest kod do pobrania albo przejrzyj go na Githubie.

Istotne sprawy – różne moduły mają różne sposoby połączenia. Ten nasz moduł, dostępny obecnie wymaga aby typ sprzętu został ustawiony na MD_MAX72XX::ICSTATION_HW. Bez tego kolejność modułów będzie dość losowa a napisy nie będą przez to czytelne. Jeśli masz jakiś mocno niestandardowy moduł tutaj znajdziesz info jak skonfigurować nietypowe połączenie.

Podstawowy obiekt tworzy się w kodzie przez

MD_Parola mx = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

Typ sprzętu – podany wyżej. CS_PIN to wybrany przez nas Chip Select (w opisie połączenia wybraliśmy D3 jako ten pin). MAX_DEVICES – to liczba modułów. Ale chodzi o moduły MAX – jeden MOD-1671 to cztery takie moduły. Taką wartość wpisujemy, jeśli użyć chcemy dwa MOD-1671 – to wpisać należy 4.

I tak podłączony moduł można już wysterować. Przydatne będzie mx.setTextAlignment które określa jak na wyświetlaczu ma być ułożony tekst. Jasność określa się przez mx.setIntensity (od 0 do 15). Jeśli chcesz spróbować z animacjami przyjrzy się mx.displayText. Ta funkcja potrzebuje 6 parametrów: tekst, jak ma być ułożony (alignment), prędkość animacji, ile czasu ma pozostać wyświetlany statycznie oraz animacja na wjazd i wyjazd. Np mx.displayText(„Abc”, PA_CENTER, 300, 0, PA_SCROLL_LEFT, PA_SCROLL_RIGHT). Zajrzyj do tego przykładu. Tam (w przykładach dołączonych do biblioteki MD Parola) też więcej gotowych rozwiązań.

MAX7219 a ESP8266

W dokumentacji do MAX7219 napisane jest że minimalne napięcie dla stanu wysokiego to 3.5V. Co znaczy, że mikrokontrolery działające w logice 3.3V (jak ESP8266) mogą mieć problem z poprawnym sterowaniem MAX7219. Co prawda, widzę wiele projektów, w których ludzie podłączają ESP bezpośrednio i działa. Ale – jeśli korzystasz z ESP8266 lub innego 3.3V kontrolera do sterowania takim modułem MAX i natrafisz na problemy – spróbuj podłączyć go przez konwerter poziomów logicznych. To wykluczy źródło problemów w zbyt niskim napięciu sygnałów sterujących.