Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady

p.kaczmarek2 18 Nov 2022 09:27 1587 10
NDN
  • Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady
    Witajcie, dzisiaj przedstawię uruchomienie układu AS1115 z Arduino w oparciu o gotową bibliotekę. AS1115 to kontroler wyświetlacza 7-segmentowego (do 8 cyfr) oraz klawiatury (do 16 klawiszy) z interfejsem I2C, oferującym dodatkową linię-przerwanie dla zdarzeń pochodzących od klawiatury. Temat ten po raz kolejny bazować będzie na płytce z wyświetlaczem uratowanej z elektrośmieci.

    Płytka z AS1115
    Płytka pochodzi z elektrośmieci, ale otrzymałem ją już luzem. Nie wiem z jakiego urządzenia pochodzi, ale obecność 4 przycisków, wyświetlacza i odbiornika IR sugeruje jakieś urządzenie w stylu tuner telewizji satelitarnej lub podobne.
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady
    Płytka podpisana jest CPT D4-DISPL-02 02-FEB-2010.
    Sercem układu jest AS1115:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady
    Oprócz tego mamy odbiornik IR:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady
    Przyciski:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady
    Wyświetlacz 4-cyfrowy, 7-segmentowy, dodatkowo o kropkach i dwukropku:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady
    Płytka jest dwustronna, te większe pady to testowe punkty tych samych sygnałów co idą na tasiemkę:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady

    Układ AS1115 i podobne...
    AS1115 to sterownik wyświetlacza LED przeznaczony dla osobnych 64 LEDów bądź dla 8 cyfr składających się z 8 segmentów (klasyczna cyfra 7 segmentowa + kropka). Dodatkowo wspierany jest też ósmy segment - kropka. Układ oferuje interfejs I2C. Każdy segment jest osobno adresowany i może być dowolnie zmieniany. Tylko jeden rezystor wymagany jest do pracy - Rset.
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady
    Ten SEGDP to właśnie Dot Point, czyli kropka. Z kolei SEGA, SEGB, itd. to kolejne segmenty cyfr.
    Oprócz obsługi LEDów możliwa jest też obsługa klawiatury. Klawisze można odczytywać poprzez polling (odpytywanie układu o ich stan) bądź poprzez przerwanie (sygnał IRQ).
    Układ również oferuje kontrolę jasności wyświetlacza.
    Przykładowa aplikacja wygląda następująco:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady
    Istnieje też bratni układ AS1116, który z kolei ma interfejs SPI oraz pozwala połączyć razem kilka sterowników:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady
    Inny podobny, AS1130:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady
    Z tej serii jest więcej układów, ale niektóre są naprawdę mało popularne i trudne do kupienia.

    Wyprowadzenia PCB
    Zamiast bawić się z tasiemką, zrobiłem małą kombinację i wyprowadziłem sobie goldpiny. Goldpiny podłączyłem do padów, które wyglądają na testowe. Rolę padów sprawdziłem multimetrem, badając ciągłość między nimi a nóżkami AS1115:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady

    Biblioteka AS1115 dla Arduino
    W poprzednich tematach z tej serii z reguły musiałem samodzielnie implementować komunikację z kontrolerem wyświetlacza. W przypadku jednego z wyświetlaczy znalazłem bibliotekę do Arduino, ale niestety mapowanie segmentów się nie zgadzało. Czy tu będzie lepiej?
    Wyszukiwanie sugeruje, że jest już jakaś sprawdzona biblioteka dla AS1115:
    https://github.com/blemasle/arduino-as1115
    Bibliotekę zainstalowałem z poziomu Arduino IDE poprzez Library Manager:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady
    Sprawdziłem i... wszystko działa!
    W takim razie tym razem pominiemy implementację komunikacji i użyjemy gotowca.


    Podłączenie Arduino
    Interfejs I2C wymaga podłączenia sygnałów SDA (Dane) i SCL (Zegar), które są też zaznaczone na Arduino. Dodatkowo oczywiście masa no i zasilanie - 5V. Dodatkowo (dla przykładu numer 3) podłączyłem IRQ, czyli przerwanie, na pin 2 od Arduino.

    AS1115 przykład 1 - licznik
    Pierwszy przykład prezentuje tylko użycie wyświetlacza, bez obsługi przycisków. Odliczamy sekundy, począwszy od 1234. Funkcja init z klasy AS1115 bierze dwa argumenty, ilość cyfr dostępnych na wyświetlaczu oraz poziom jasności.
    Code: c
    Log in, to see the code

    Demo:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady

    AS1115 przykład 2 - kody przycisków
    Poniższy kod po prostu regularnie odpytuje AS1115 o stan przycisków zakodowany w postaci liczby całkowitej. Przyciski są zakodowane jako jej bity - przycisk może mieć tylko dwa stany, więc aż się prosi o takie rozwiązanie.
    Code: c
    Log in, to see the code

    UWAGA: Jak mamy wyświetlacz 4-cyfrowy i wciśniemy przycisk o bicie nr 14 to jego kod będzie wynosić 2^14 = 16384 ale wyświetli się nam tylko 6384, bo mamy tylko 4 cyfry...
    Demonstracja:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady

    AS1115 przykład 3 - przerwanie przycisków
    Ten przykład może wydawać się być nieco bardziej skomplikowany. Korzysta on z przerwań. Przerwanie wywołuje zmiana stanu na pinie AS1115_ISR_PIN , a dokładniej zbocze opadające (FALLING). AS1115 informuje nas w ten sposób o zdarzeniu przycisku. Wtedy możemy zareagować i odebrać informacje o wciśniętych przyciskach w głównej pętli. Zwalnia nas to z obowiązku ciągłego odpytywania układu o przycisk tak jak w poprzednim przykładzie. Zmienna oznaczona jest jako volatile, gdyż może zmienić się w "niespodziewanym" momencie, z przerwania.
    Code: c
    Log in, to see the code



    AS1115 przykład 4 - poziomy jasności cyfr
    Skoro mamy już specjalizowany układ do sterowania wyświetlaczem, to czemu nie wykorzystać lepiej jakoś jego możliwości? Takie funkcjonalności też tutaj są dostępne - można ustawić jasność wyświetlacza z poziomu kodu i AS1115 też w pełni to kontroluje. Poziomy jasności są od 0 do 15. Ustawia je funkcja setIntensitiy:
    Code: c
    Log in, to see the code

    Rezultat:
    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady



    AS1115 przykład 5 - wyświetlanie liter
    Wyświetlacz 7-segmentowy może w ograniczonym stopniu wyświetlać też litery - chociażby znaki a, b, c, d, e i f, potrzebne do wyświetlania liczb zapisanych szesnastkowo.
    Omawiana biblioteka posiada do tego funkcję. W teorii ta funkcja wspiera też wyświetlanie kropki (używa kropki na odpowiedniej cyfrze), ale u mnie to nie działało.
    Code: c
    Log in, to see the code

    Sterownik wyświetlacza LED i klawiatury AS1115 na I2C - Arduino - przykłady


    Dostępne funkcje
    Oto krótka tabelka pokazująca co oferuja klasa AS1115:
    FunkcjaArgumentyOpis
    AS1115uint8_t addr Konstruktor klasy AS1115. Pobiera adres I2C urządzenia, dzięki czemu możemy mieć na jednej magistrali kilka układów (niekoniecznie kilka AS1115, kilka różnych ogólnie urządzeń I2C)
    inituint8_t digits, uint8_t intensity Inicjalizuje układ AS1115 dla danej ilości cyfr wyświetlacza oraz ustawia jego jasność (liczba od 0 do 15)
    setIntensityuint8_t intensity Ustawia jasność wyświetlacza (od 0 do 15)
    clearczyści wyświetlacz
    displayuint16_t value wyświetla liczbę całkowitą nieujemną
    displayconst char value[]wyświetla ciąg znaków, w teorii wspiera kropki (u mnie nie działało), wspiera też znaki a, b, c, d, e i f
    displayuint8_t digit, uint8_t value wyświetla daną wartość na danej cyfrze
    readPortuint8_t portczyta dany z portów (zwraca jego wartość jako uint8_t)
    readdokonuje odczytu obu portów, jednocześnie obsługując problem drgania styków (wykonuje debouncing styków), zwraca wartości w postaci typu 16-bitowego short, gdzie każdy bit informuje nas o stanie danego z przycisków
    shutdownbool preserve wyłącza wyświetlacz - w zależności od preserve, czyści rejestr FEATURE
    resume bool preserve uruchamia wyświetlacz po 'shutdown', w zależności od preserve, resetuje rejestr FEATURE
    visualTestbool stop uruchamia bądź zatrzymuje animację testową wyświetlacza (wymaga #define _AS1115_DIAGNOSTICS_ w kodzie)

    Wynika z niej kilka ważnych informacji, które mogą nie być oczywiste na pierwszy rzut oka - chociażby to, że omawiane już read dokonuje debouncingu styków, więc nie musimy już tego obsługiwać w swoim kodzie.

    Dodatkowe przyciski (i cyfry)
    Na koniec dodam, że nawet tą płytkę można by rozbudować - dodatkowe przyciski można łatwo dodać (w jednym z pierwszych akapitów umieściłem schemat), w podobny sposób można by dodać cyfry, ale z tym już nieco większy problem. Wszystko w ramach limitu ilości obsługiwanych cyfr/przycisków układu AS1115.

    Podsumowanie
    Normalnie trzeba by podłączyć ze cztery tranzystory (po jednym na cyfrę), 7 pinów (po jednym na segment; ew. rejestr przesuwny..), rezystory, i w przerwaniu multipleksować wyświetlacz, dbając też by nie było ghostingu i by nie zużyć zbyt dużo cennego czasu mikrokontrolera. A tutaj wszystko mamy gotowe - jedna komenda I2C i już dowolna liczba jest wyświetlona. Potem druga komenda i już znamy stan przycisków. Co więcej, nawet nie trzeba odpytywać o stan przycisków regularnie, bo jesli tylko coś się zmieni, to dostaniemy sygnał na IRQ, więc po prostu wystarczy użyć przerwania.
    Bardzo przydatny układ.
    Temat umieściłem w dziale "Wnętrza urządzeń" a nie w "Artykuły", gdyż, jak już wspominałem, opisywany tu moduł pochodzi z wnętrza jakiegoś urządzenia i nie miałem możliwości wybrać sterownika LED/klawiatury, po prostu użyłem AS1115 gdyż akurat on wpadł mi w ręce.
    A czy Wy korzystaliście w swoich projektach z jakiś podobnych układów, przejmujących za MCU obsługę wyświetlacza i klawiatury, a jeśli tak to z jakich?
    To nie koniec przygód z tym modułem - spróbuję go jakoś wykorzystać, może uda się też ożywić jakoś dwukropek i/lub kropki oraz dodać dodatkowe przyciski.

    Cool? Ranking DIY
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
    About Author
    p.kaczmarek2
    Moderator Smart Home
    Offline 
  • NDN
  • #2
    BOOM i ZONK
    Level 21  
    Płyteczka pochodzi z dekodera Cyfrowego Polsatu HD5000.
  • NDN
  • #3
    p.kaczmarek2
    Moderator Smart Home
    Rzeczywiście, podobieństwo uderzające. Skąd wiedziałeś, zaglądałeś do środka takiego dekodera, skojarzyłeś po prostu z zewnątrz, czy też może szukałeś po symbolach na płytce (czego ja nie próbowałem)?
  • #4
    BOOM i ZONK
    Level 21  
    Leży mi w szufladzie identyczna i czeka na zastosowanie. A wiem dlatego, że ją opisałem z czego została wyrwana.
  • #5
    speedy9
    Helpful for users
    @p.kaczmarek2 Bardzo ciekawe opracowanie. I muszę przyznać, że bardzo przydatny układ i sama płytka. Jak dorwę to z synem zrobimy zegarek na DS1307 w ramach nauki obsługi I2C :D
    Ciekawi mnie tylko czy funkcja regulacji jasności zapewni odpowiednio niski poziom na noc by zegarek nie rozświetlał pokoju.
  • #6
    ArturAVS
    Moderator HP/Truck/Electric
    speedy9 wrote:
    Ciekawi mnie tylko czy funkcja regulacji jasności zapewni odpowiednio niski poziom na noc by zegarek nie rozświetlał pokoju.

    Może lepiej użyć panelu z NBOX'a? Po 15zł w wersji VFD na allegro chodzą. Są też w wersji LED.
  • #7
    speedy9
    Helpful for users
    LEDy są ok jak się je ma za ciemnym filtrem. Wszystkie radiobudziki mają LEDowe wyświetlacze przecież. Ale te VFD to ciekawy pomysł. Trochę trudniej zastosować niż opisany w tym temacie, ale pomysł jest.
  • #8
    ArturAVS
    Moderator HP/Truck/Electric
    Robią "klimat" i proste do uruchomienia. Opisywałem.
  • #10
    Jogesh
    Level 28  
    Też widzę, że układy serii TM1638/TM1618 itd są bardziej popularne. Sam wykorzystuję je w wielu projektach. Są o wiele tańsze od powyższego układu, który znalazłem na lcsc w cenie ponad dolara, czyli bardzo drogo. W serii TM jest dużo różnych układów i kosztują grosze.
  • #11
    tomek_122
    Level 5  
    Mam sporo tych układów i oddam po 10 zł za szt. Mam też gotowe, uruchomione moduły które robiłem do montażu z tyłu wyświetlaczy LED (projekt HF-9012), łącze je po prostu kawałkiem montażówki z segmentami i elementami i to pozwala na łatwą modernizację starych sterowników np 8x74374 które pobierają masę prądu i wymagają wielu linii sterujących. Jak ktoś potrzebuje bibliotek w asm to chętnie podeślę.

    https://www.elektroda.pl/rtvforum/topic3936478.html