logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

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

p.kaczmarek2 18 Lis 2022 09:27 2175 10
  • Uruchomiony wyświetlacz 7-segmentowy z kontrolerem AS1115 i Arduino.
    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.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Demo:
    Wyświetlacz 7-segmentowy z liczbą 1280 z podłączeniem do płytki prototypowej.

    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.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    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:
    Uruchomiony wyświetlacz 7-segmentowy z kontrolerem AS1115 i Arduino.

    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.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    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:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Rezultat:
    Wyświetlacz 7-segmentowy pokazujący liczbę 1239 na płytce stykowej.



    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.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    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.
    Załączniki:
    • arduino-as1115-master.zip (8.94 KB) Musisz być zalogowany, aby pobrać ten załącznik.

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    Inżynier programista z wieloletnim doświadczeniem embedded i full stack developer.
    Specjalizuje się w: embedded, Full-Stack Developer
    p.kaczmarek2 napisał 14781 postów o ocenie 12920, pomógł 659 razy. Jest z nami od 2014 roku.
  • #2 20290528
    BOOM i ZONK
    Poziom 22  
    Posty: 597
    Pomógł: 21
    Ocena: 73
    Płyteczka pochodzi z dekodera Cyfrowego Polsatu HD5000.
  • #3 20290531
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14781
    Pomógł: 659
    Ocena: 12920
    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)?
    Pomogłem? Kup mi kawę.
  • #4 20290574
    BOOM i ZONK
    Poziom 22  
    Posty: 597
    Pomógł: 21
    Ocena: 73
    Leży mi w szufladzie identyczna i czeka na zastosowanie. A wiem dlatego, że ją opisałem z czego została wyrwana.
  • #5 20290629
    speedy9
    Pomocny dla użytkowników
    Posty: 12035
    Pomógł: 1233
    Ocena: 2424
    @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 20290717
    ArturAVS
    Moderator
    Posty: 26430
    Pomógł: 2303
    Ocena: 7842
    speedy9 napisał:
    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 20290774
    speedy9
    Pomocny dla użytkowników
    Posty: 12035
    Pomógł: 1233
    Ocena: 2424
    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 20290783
    ArturAVS
    Moderator
    Posty: 26430
    Pomógł: 2303
    Ocena: 7842
    Robią "klimat" i proste do uruchomienia. Opisywałem.
  • #10 20293398
    Jogesh
    Poziom 29  
    Posty: 3698
    Pomógł: 33
    Ocena: 688
    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 20311360
    tomek_122
    Poziom 6  
    Posty: 14
    Ocena: 11
    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

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji omówiono uruchomienie układu AS1115 z Arduino, który jest kontrolerem wyświetlacza 7-segmentowego i klawiatury z interfejsem I2C. Użytkownicy dzielą się informacjami na temat pochodzenia płytki, która została uratowana z elektrośmieci, a jeden z uczestników zidentyfikował ją jako pochodzącą z dekodera Cyfrowego Polsatu HD5000. Wspomniano również o możliwościach zastosowania układu, takich jak budowa zegarka z użyciem DS1307 oraz o alternatywnych rozwiązaniach, takich jak panele NBOX. Uczestnicy dyskusji porównują AS1115 z bardziej popularnymi układami TM1638, które są tańsze i szerzej dostępne. Pojawiły się także pytania dotyczące regulacji jasności wyświetlacza oraz dostępności układów na rynku.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA