Arduino steruje segmentowym wyświetlaczem LED

Arduino steruje segmentowym wyświetlaczem LED

Pewnie wielu z Was podłączało kiedyś segmentowy wyświetlacz LED do Arduino i zastanawiało się co będzie jak zabraknie wyjść cyfrowych do ich sterowania. Otóż można wykorzystać interfejs komunikacyjny SPI i rejestry przesuwne. Ale żeby nie namącić Wam w głowach opowiem o wszystkim po kolei.

DSC_0155

Po pierwsze układ

Będzie potrzebne oczywiście Arduino. Osobiście polubiłem wersję Nano V3 tak, więc na nim będą zaprezentowane przykłady. Najważniejsze z punktu widzenia tegoż projektu jest znajomość wyprowadzeń w Arduino. Do sterowania wyświetlaczem LED, a właściwie rejestrem przesuwnym, który tym wyświetlaczem steruje potrzebne jest zlokalizowanie wyprowadzeń SPI w Arduino. Poniższe zdjęcie chyba najlepiej to zobrazuje.

Opublikuj swój projekt i odbierz 50% rabatu do wykorzystania w sklepie Nettigo.pl

Wyprowadzenia SPI

Interfejs SPI jest interfejsem szeregowym, którym przesyłane są po kolei bajt po bajcie (informacje) pomiędzy urządzeniami Master i Slave. W tym przypadku urządzeniem Master będzie Arduino, natomiast Slave – rejestr przesuwny HCF4094. Ale wracając do wyprowadzeń. Najważniejsza jest możliwość przesyłania danych. Dane przesyłać będą wyjściem MOSI czyli Master Out Slave In. Wejściem MISO czyli Master In Slave Out nie będziemy się teraz zajmować bo taki wyświetlacz nie ma dla Arduino żadnych informacji. Wyjście SCLK lub CLK, SCL, różnie ludzie to nazywają, jest to wyjście zegarowe, które pozwala zgrać w czasie pracę urządzeń Master i Slave. Natomiast wyjście CS lub jak niektórzy mówią SS jest niczym innym jak Chip Select lub Slave Select, pozwala na wybranie urządzenia z którym ma zajść komunikacja. Pin CS w Arduino podawany jest jako pin 10, ale nie jest to jakieś ograniczenie. Chip Select’em może być dowolne cyfrowe wyjście. To tyle od strony wyprowadzeń o SPI.

Następnym elementem jest wcześniej wspomniany rejestr przesuwny HCF4094. Akurat wykorzystałem rejestr firmy ST, ale jeśli się nie mylę wszystkie 4094 mają znormalizowane wyprowadzenia, ale najlepiej sprawdzajcie w notach katalogowych. U mnie przedstawiało się to w sposób następujący.

Wyprowadzenia 4094

Ok, ale co z czym się je. Do wejścia STROBE podłączacie CS z SPI. DATA z MOSI i SCLK z CLOCK. Do VDD podłączacie zasilanie np. 5V z Arduino. OUTPUT ENABLE jest swojego rodzaju sygnałem dla rejestru, żeby zasilił wyjścia od Q1 do Q8. A że wyświetlacz ma działać od zaraz i nie chcę zbytnio komplikować prostej sprawy to zwarłem OUTPUT ENABLE z VDD w takim wypadku rejestr ma zezwolenie na pracę bez potrzeby angażowania do tego Arduino. VSS to oczywiście masa (GND). Przyszła kolej na wyjścia Q1Q7. Zakładając, że nasz wyświetlacz ma wspólną katodę to owe wyjścia łączymy z odpowiednimi segmentami wyświetlacza LED. O ile tego co wyżej nie trzeba tłumaczyć to parę słów przydałoby się powiedzieć Q’s i Qs. Każdy rejestr ma na tyle wyprowadzeń że starczy na jeden wyświetlacz LED – pomijam w tym przypadku wyświetlacze powielone, o nich może kiedy indziej. Tak, więc aby połączyć większą ilość rejestrów przesuwnych należy jak wyżej odpowiednio podłączyć wszystkie wyprowadzenia z tą różnicą, że pin DATA kolejnego rejestru podłączamy do wyprowadzenia Qs (pin 9) poprzedniego rejestru. Tym zabiegiem łączymy rejestry szeregowo. Oczywiście wyprowadzenia Q1-Q7 podłączamy odpowiednio do kolejnego wyświetlacza LED. Powinno to wyglądać mniej więcej w ten sposób.

SevenSegment_LED_Display_Counter_aa

Jakby ktoś potrzebował to wewnętrzna struktura takiego pojedynczego wyświetlacza LED przedstawia się następująco.

jp-7_segment_display_labeled

Czas na program

Jeśli wszystko mamy już podpięte to nie pozostało nam nic innego jak zaprogramować Arduino odpowiednim programem. Jeśli chodzi o ważniejsze miejsca w kodzie to myślę, że wystarczy odpowiedni komentarz na końcach linii.

Jak widać w kodzie zdefiniowałem tablicę znaków (cyfr) w postaci bitowej. „Jedynka” oznacza włączenie odpowiedniego segmentu. Jeśli wszystko zrobiliście dobrze to efekt powinien być taki jak na poniższym filmiku.

Z uwagi na to, że SPI jest interfejsem szeregowym to w najprostszej jego postaci bajt, znaki, dane czy jak tam wolicie wysyłane są jeden po drugim, zatem, żeby na wyświetlaczu uzyskać obraz właściwy (nie lustrzany) najpierw wysyłamy bajt najstarszy, a kolejno młodsze. Jak sama nazwa wskazuje rejestry przesuwne przesyłają szeregowo do siebie informacje począwszy od pierwszego na lini (BUS).

No ale dobra, żeby nie było zbyt nudno to spróbujcie zrobić coś takiego.

SevenSegment_LED_Display_Counter_bb

A Arduino zaprogramujcie następującym kodem.

Jak powyższy kod działa sprawdźcie sami.

Osobiście podobny wyświetlacz robię dla zaprzyjaźnionej firmy. Mają maszynę gdzie jest zwykły LCD 6×1 i niestety przy pewnych warunkach nasłonecznienia pracownicy muszą wytężać wzrok. A może sami macie jakieś pomysły na zastosowanie takiego wyświetlacza, nie wiem, może wyświetlacz aktualnego biegu w samochodzie ?

Dla tych, którzy by się dziwili stosowania tylu zmiennych globalnych w prostym kodzie powiem tylko, że to są DOBRE PRAKTYKI programowania. Przydadzą Wam się nawyki przy moich bardziej „skomplikowanych” projektach.

Ocena: 4.84/5 (głosów: 62)
Nettigo - patron działu Elektronika

Podobne posty

Arduino ethernet device

Arduino ethernet device

Poniżej opisany projekt przedstawia „wrap” biblioteki EtherCard https://github.com/njh/EtherCard.Biblioteka EtherCard bardzo ładnie rozwiązuje konfigurację modułu ethernet…

64 komentarzy do “Arduino steruje segmentowym wyświetlaczem LED

  • Świetny poradnik :)
    Mam takie małe pytanie:
    posiadam 2 7-mio segmentowe wyświetlacze TDSG 3150-M, jednak posiadają one wspólną anodę.
    Czy są jakieś inne rejestry, które pozwolą mi na sterowanie tym wyświetlaczem? Czy może muszę użyć tego samego co Ty, a wyświetlacz podłączyć np tranzystorami do masy, a tranzystory do rejestru?

    Odpowiedz
    • Możesz próbować dołączyć przed LED’a ULN2803-D czyli zwykłego drivera. Trochę więcej „kabli” wtedy będzie ;P dlatego użyłem właśnie wyświetlaczy LED ze wspólną katodą, żeby nie komplikować tego wszystkiego.

      Odpowiedz
    • Dla wspólnej anody lepiej wykorzystać chip PCF8574 komunikujący się z Arduino interfejsem I2C [TWI]. Tu potrzeba tylko 2 przewodów i biblioteki Wired. Szyna I2C jest rozwiązaniem typu „bus”: podobnie jak lampki na choince, można podpiąć wiele urządzeń. Każde z urządzeń na szynie I2C ma własny adres. W przypadku chipów PCF8574 można ich podpiąć 8 szt. Jeśli trzeba więcej, to należy użyć chipa PCF8574A mającego inny adres „typu urządzenia”. Tych też można podpiąć 8 szt, a więc w sumie max 16.
      Chip ten jest niczym innym niż „wyniesioną” jednostką zawierającą 8 pinów GPIO [uniwersalnych wejść/wyjść cyfrowych].
      Komunikacja w I2C polega z grubsza na wysłaniu adresu urządzenia a następnie danych. W przypadku PCF8574 „danymi” jest po prostu bajt, którego bity mówią w jaki stan mają się ustawić poszczególne piny chipa. A więc wysłanie b0000001 spowoduje ustawienie w HIGH pina 0 [zero] a pozostałych w stan LOW.

      Ale UWAGA. Pin chipa PCF8574 nie jest w stanie zasilić diody! [nie może pracować w trybie „supply”]. Ale za to może pracować jako „sink” i wciągnąć do 20mA w kierunku uziemienia. A zatem jest idealny do diod sterowanych katodą [m.in. mających wspólną anodę].
      Sterowanie polega więc na ustawianiu LOW [zer w bajcie] dla tych nóżek które mają zapalić diodę a HIGH [jedynek] dla tych, które mają diodę zgasić.

      Ja sobie kiedyś [w ramach wprawek Arduinowych] zrobiłem na takim rozwiązaniu elektroniczną kostkę do gry na klasycznych 7-mu LED-ach ustawionych tak jak oczka w normalnej kostce.
      Jak będziecie zainteresowani, to mogę wstawić kod i obrazek z Fritzinga tej „kostki”.

      Odpowiedz
  • A jakby napisać program, gdzie arduino pokazywałby cyfrę, na podstawie podanego napięcia zewnętrznego? np. dla 2vpokazuje cyfre 1 itd.

    Odpowiedz
      • A mogłbym liczyć na jakieś dalsze wskazówki bądź pomoc w pisaniu programu do takiej rzeczy? Generalnie chodzi o Wyświetlacz biegów, który powinien być sterowany napięciem zewnętrznym, odrębnym od napięcia. Mogę liczyć na jakąś (przynajmniej podstawową) pomoc ?

        Odpowiedz
        • Ooo ;] Zakładam, że w samochodzie nie masz CAN’a, a jeśli jest OBD to raczej informacji o biegach nie dostaniesz ;P Ale skoro to jest rajdówka i masz wszystko na wierzchu to można kombinować. Wszelkie projekty, które sterują czymś w oparciu o zmianę rezystancji/napięcia mają jedną zasadniczą wadę. Temperatura pracy. Spełnia to wymagania tylko w ustalonych warunkach, ale w prototypowym rozwiązaniu można by się pokusić o jakiś eksperyment. Miałeś już jakiś pomysł na wykrywanie biegów? Co to w ogóle za samochód?

          Odpowiedz
        • Pomysł już jest, tylko trzeba go zrealizować. dostaje zewnętrzne napięcie z potencjometra na skrzyni biegów, te napięcie powinno wysterować wyświetlacz, aby pokazywał dany bieg. Projekt jest w 50% procentach gotowy, teraz potrzebuje aby z procesora(nie wiem jakiego) wyszło napięcie w stanie wysokim ok. 0.7V do każdego segmentu, polaryzując tranz. i powodując przepływ prądu.

          Odpowiedz
        • Ja myślę, że trzeba byłoby zrobić to mniej więcej tak:
          Przy gnieździe „wajchy” w skrzyni obstalować 6 blaszek [odizolowanych od masy!] w miejscach odpowiadających pozycji wajchy dla każdego z biegów. Do blaszek przylutować przewody i podłączyć je do 6 pinów cyfrowych Arduino albo jakiegoś chipa pośredniego np. PCF8574. Pewnie chip byłby bezpieczniejszy po kosztuje 5 zł a arduino stówkę…

          Do wajchy zaś jakąś „krzywkę” ze sprężystego drutu, która będzie maziać po tych blaszkach. Wajcha = masa.

          W programie:
          – w setupie wszystkie 6 pinów w stan INPUT HIGH [INPUT_PULLUP albo zewnętrzne rezystory PULLUP z min. 10kOm].
          – w pętli czytamy stan pinów i tam gdzie mamy LOW znaczy ten bieg jest obecnie wybrany…

          A już na dalej na wyświetlacz LED to już wiecie…

          Odpowiedz
        • A jakby użyć wcześniej wspomnianego SN5446A i kodu BCD,
          to jakby przykładowo taki układ wyglądał, pamiętając, że mam już gotową płytkę z wyświetlaczem, i potrzebuje do niej 0.7V w stanie wysokim dla każdego segmentu który miałby się świecić w danej chwili ?

          Odpowiedz
        • Schemat będzie wyglądał podobnie, coś mniej więcej takiego http://macao.communications.museum/images/exhibits/2_18_6_3_eng.png

          Kod BCD jest zunifikowany, odczytując wartość z potencjometru, musisz po warunkach wydać instrukcje do wysłania odpowiedniego bajtu do układu, aby zapalił odpowiednie segmenty na wyświetlaczu. A wyświetlacz mógłbyś dać nawet taki http://www.tme.eu/pl/details/kw1-4003asa/wyswietlacze-led-pojedyncze/lucky-light/# tyle że tu jest wspólna anoda, więc trzeba by pokombinować jak tu już chłopaki pisali z PCF8574

          Odpowiedz
        • Wyświetlacz mam, ze wspólną anodą, bo to jest 56mm i zasilany 9V. problem wspólnej anody rozwiązałem. tylko teraz sam układ. Gdzie znajde jakies podstawy kodu bcd, żeby móc napisać takie coś, ew. Wysyłając Ci na maila, aby sprawdzić czy jest ok ?

          Odpowiedz
        • @mik To jest skrzynia sekwencyjna, i mamy sygnał z potencjometru, który musi być wykorzystany, bo można proste diagnozy wysunąć jeśli zmienimy bieg, a sygnał pozostanie

          Odpowiedz
        • Może przekombinowe, ale gdyby do mikroprocesora podłączyć dodatkowo jakiś termistor umieszczony w pobliżu potencjometru, to program mógłby się automatycznie kalibrować względem temperatury.
          Co o tym sądzicie?

          Odpowiedz
        • attiny24, można korzystać z bibliotek arduino, i ma przetwornik adc, czyli tak naprawdę analog read zadziała, i można bybyło wszystko ładnie uwarunkować co otym sądzicie ?

          Odpowiedz
        • Na Attiny możesz wrzucić bootloader Arduino (trzeba sprawdzić czy jest akurat na Attiny24) i programujesz tak jak Arduino. Bardzo wygodne, ale trzeba pamiętać, że pozostaje zrobienie płytki. Jeśli ma to jeździć w rajdówce to raczej trzeba by i tak zrobić płytkę, chociaż dobre opakowanie na arduino nano czy mini też by się nadało ;] (sprawdź w nettigo ;P) Grunt to łatwy i szybki montaż/demontaż ;P Swoją drogą to z powodzeniem robiłem urządzenia, gdzie zaprojektowałem i polutowałem płytki dwustronne w technologii SMD i na procku Atmega328P czyli takie jakie są w Nano i bez większych problemów programowałem to USBasp’em i wszystko działało pod Arduino IDE.

          Pozdrawiam ;D

          Odpowiedz
        • Płytka to nie problem czyli teraz muszę napisac jakiś program sprawdzić czy bootloader arduino ruszy i dopracować program, jako że jestem lakiem w programowaniu mogę prosić o jakieś podstawowe poradniki?

          Odpowiedz
        • Taki program napisałem.. nie wiem czy if bd poprawne tak skonstruowane. jeśli źle to jak to napisać inaczej..

          Odpowiedz
        • Po pierwsze mierząc wartość z analogRead nie zamieniaj jej uparcie na napięcie. Wiem, że w przykładzie z którego korzystałeś tak jest, ale to jest potrzebne tylko jak potrzebujemy mierzyć napięcie. W Twoim przypadku to nie ma sensu. Dajesz tylko prockowi dodatkowych parę instrukcji bez których sobie poradzi lepiej niż z nimi. Wygląda to trochę jak ADC mierzy napięcie i zamienia ją na 10-bitową liczbę po czym Ty zamieniasz ją znowu na napięcie ;]

          Po drugie zapomnij o float, niestety Arduino nie ma procka z obsługą działań na liczbach zmiennoprzecinkowych, tak więc zmienna typu float trochu obciąża całego procka bo Arduino próbuje to zrobić po swojemu (tak jak umie), a Tobie to i tak nie jest potrzebne ;]

          Po trzecie zwróć uwagę na przykład http://arduino.cc/en/Reference/Map
          potencjometrem zmieniasz wartość i otrzymujesz liczbę z zakresu 0-255, a 1023 jest w przykładzie dlatego bo przetwornik ADC w Arduino jest 10-bitowy. Zatem dla poszczególnych biegów uzyskujesz jakąś tam wartość na potencjometrze i liczbę z ADC w Arduino.

          Tak, więc jak już masz liczbę z przedziału 0-255 (nie musi być 255 może być każda inna liczba po to jest funkcja map()) to musisz eksperymentalnie założyć jakieś wartości przy których będą się zmieniały liczby na wyświetlaczu. Najłatwiej byłoby Ci wykorzystać mój przykład z rejestrem przesuwnym bo jest chyba najmniej pisania i na pewno mniej gmatwania w pętli LOOP. No ale dobra idąc Twoim tropem to …

          … z if()’ami jest akurat tak, że AVR jakim jest oczywiście obdarzony Arduino strasznie nie lubi skomplikowanych warunków. Dlatego opisze Ci przykład dla jednego biegu, a dla reszty powinieneś załapać ;] Krok po kroku (mam nadzieje, że nic nie przeoczyłem):

          1. Sprawdź rezystancję na potencjometrze dla pierwszego biegu (to jest to co ADC w Arduino zmierzy w zakresie 0-1023),
          2. Załóżmy że mapujesz zakresy 0-1023 na 0-255 to musisz sobie podzielić 255/12 (6 przełożeń * 2) tak więc otrzymujesz 21,25 zaokrąglasz do 21 i biegi przydzielasz w sposób następujący:

          0 < 1. bieg < (2*21 = 42 czyli ustawiasz zakres dla każdego biegu co 42)
          42<2. bieg < 84

          i tak dalej i tak dalej. Nie powiedziane, że tymi zakresami się wstrzeliłeś idealnie w przełożenia bo niestety żadna skrzynia biegów nie jest idealna. Ale to już eksperymentalnie sprawdzisz ;]

          1. W domu przy płytce ustaw sobie na potencjometrze zapamiętaną wartość,
          2. Napisz funkcję

          if((zmierzona wartość > 0) && (zmierzona wartość < 42)){
          //zapal odpowiednie segmenty na LED
          }

          1. Podobnie robisz dla pozostałych biegów,
          2. Jakby Arduino się nie wyrabiało to trzeba by to wszystko na rejestrach zrobić, albo na przerwaniach (choć Arduino dysponuje jedynie dwoma przerwaniami, także dla 5 biegów odpada + wsteczny ;P)

          Słowem końcowym powiem tylko, że jakbyś miał problemy dalej, co może się stać, to tłumaczę takie rzeczy o późnej porze tak, więc pisz jakby co do mnie na Facebook’u albo wyślij wiadomość na YouTube ;P

          Pozdro

          Odpowiedz
        • Jutro sb to wszystko ogarne na plytce.. Mam zamiar podlaczyc arduino do potencjometru I dac mu insyrukcje zeby mi rzucil podglad z adc (printin) I sb spisze dla poszczegolnych biegow dajac zapasy po 5 jednostek (bo 5/255 jes ok. 0.02 v a tol skrzyni jest 0.1v porobie warunki wrzucwe program i zobaczymy czy ruszy..

          Odpowiedz
        • void setup () { } // PĘTLA Void loop() { // USTAWIAM INTEGER int voltage = analog read(A0); //mapuje napiecie voltage = map(voltage, 0, 1023, 0, 255); // BIEG WSTECZNY (3 POZIOME KRESKI) if (5 < voltage < 15){ digitalWrite(D2, HIGH); digitalWrite(D5, HIGH); digitalWrite(D8, HIGH); } // LUZ (0) else if (xx < voltage < xx){ digitalWrite(D2, HIGH); digitalWrite(D3, HIGH); digitalWrite(D4, HIGH); digitalWrite(D5, HIGH); digitalWrite(D6, HIGH); } // BIEG 1 (1) else if (xx < voltage < xx){ digitalWrite(D3, HIGH); digitalWrite(D4, HIGH); } // BIEG 2 (2) else if (xx < voltage < xx){ digitalWrite(D2, HIGH); digitalWrite(D3, HIGH); digitalWrite(D5, HIGH); digitalWrite(D6, HIGH); digitalWrite(D8, HIGH); } // BIEG 3 (3) else if (xx < voltage < xx){ digitalWrite(D2, HIGH); digitalWrite(D3, HIGH); digitalWrite(D4, HIGH); digitalWrite(D5, HIGH); digitalWrite(D8, HIGH); } // BIEG 4 (4) else if (xx < voltage < xx){ digitalWrite(D3, HIGH); digitalWrite(D4, HIGH); digitalWrite(D7, HIGH); digitalWrite(D8, HIGH); } //BIEG 5 (5) else if (xx < voltage < xx){ digitalWrite(D2, HIGH); digitalWrite(D4, HIGH); digitalWrite(D5, HIGH); digitalWrite(D7, HIGH); digitalWrite(D8, HIGH); } } warunki do poprawy piny do poprawy cos jeszczw w oczy sie.rzuca?

          Odpowiedz
        • Nie wrzucaj tu całego kodu w taki sposób bo się robi bajzel. Przeczytaj jeszcze raz mój komentarz, napisz program, przetestuj, opisz, a jakby co to ciekawy temat na artykuł, nie sądzisz? Daleko mieszkasz od Opola ?

          Odpowiedz
        • Slask, mikołów.. Mam zmontowane wszystko na plytce i chodzi pieknie.. Wspolna anode rozwiazalem etoda, ze podlaczam katode do cyfrowych wyjsc i przy stanie niskim swieci przy wysokim gasnie.. Przez rezystory 10k wysw jest na 12v wiec prosta matma 12-5=7 a przy 7v nie swieci.. Nie wiem czybylbym dobry w pisaniu artykulu.. Ale material jest.. W kazdym badz razie wszystko chodzi (narazie na plytce stykowej) ale w poniedzialek robie pcb i koncze to

          Odpowiedz
        • No materiał jest ciekawy ;] Pomyśl nad tym bo doczekać się nie mogę jak to w Fieście zobaczę ;] Rozumiem, że wyświetlacz masz na 12V, nie za bardzo wiem o co Ci chodziło z tym 12V-5V=7V, podłączałeś to przez LED DRIVER’A??

          Odpowiedz
  • Dla początkujących fajny opis, wyłożone wszystko na tacy :)

    Jedynie co chciałabym zasugerować, jeśli już mowa o „Dobrych praktykach”, to podpinanie wyświetlaczy 7-mio segmentowych w kolejności: dp-a-b-c-d-e-f-g, a w programie tablica displayArray powinna mieć wartości w kolejności g-f-d-e-c-b-a-dp, gdzie dp to najmłodszy bit.

    Pozdrawiam :)

    Odpowiedz
  • Da się to prościej zrobić, korzystając z timer w AVR można zrobić multipleksowanie wyświetlacza na samej Atmedze – wymaga to użycia większej ilości portów 8+1 na każdy segment ale działa całkiem ładnie i nie trzeba korzystać z dodatkowych układów.

    Odpowiedz
  • „Dla tych, którzy by się dziwili stosowania tylu zmiennych globalnych w prostym kodzie powiem tylko, że to są DOBRE PRAKTYKI programowania. Przydadzą Wam się nawyki przy moich bardziej „skomplikowanych” projektach.”

    hmmmm mnie uczono wprost przeciwnie ale ja studia konczylem w epoce programowania strukturalnego (wmawiali mi zeby unikac inline ….)

    Odpowiedz
    • No i mi właśnie chodziło o unikanie zmiennych lokalnych ;] Wiadomo, że jak jest kod z 1000 linii to dużo łatwiej jest pozmieniać coś jeśli już na początku kodu zadasz zmienne globalne ;D Jedna zmiana i proszę jest tak jak ma być. Nie trzeba szukać w kodzie zmiennej lokalnej i kombinować czy oby na pewno we wszystkich funkcjach jest tak jak chcemy i czy to działa poprawnie. Tak, więc dobrze jest się przyzwyczaić do zmiennych globalnych ;]

      Odpowiedz
  • „Dla tych, którzy by się dziwili stosowania tylu zmiennych globalnych w prostym kodzie powiem tylko, że to są DOBRE PRAKTYKI programowania”

    Z tego czego mnie uczono, dobra praktyka programowania jest jednak eliminowanie i unikanie zmiennych globalnych :)

    Odpowiedz
  • Witam !
    Skorzystałem z tego poradnika , wszystko działa ale mam pytanie. Mam wyświetlacz LTC571P-B ( 3 cyfrowy 7-seg. czerwony ) ze wspólna katodą. Przy pomocy układów HCF4094 jestem w stanie zapalać albo drugie cyfry albo trzecie ale nie umiem sterować jednocześnie obydwoma, czy to w ogóle możliwe ?
    Wiem że pierwszy segment może wyświetlić tylko cyfrę „1” .
    Wyświetlacz ma tylko 12 wyprowadzeń z czego jedno jest nieużywane a trzy obsługują katody dla poszczególnych cyfr.
    Może mi ktoś pomóc ? Czy jest możliwe sterowanie tym wyświetlaczem podobnie jak to jest w tym poradniku przy pomocy HCF4094 ?

    Odpowiedz
  • Witam,
    Czy mogę podłączyć w ten sposób wyświetlacz 4-cyfrowy? Można podpiąć bezpośrednio do portu, nie przekraczając dopuszczalnego natężenia?

    Odpowiedz
  • kolego, to są niestety herezje…
    żaden zdrowy na umyśle programista nie „przyzwyczaja się do zmiennych globalnych…zmienne lokalne mają swój cel, dlaczego? radze doczytać o tym jak kompilatory zarządzają pamięcią!

    Odpowiedz
  • Witam.
    Chcę skonstruować układ, ktory zapewni dzialanie urzadzenia do zabawy dla dzieci(zdjecie w zalaczniku).
    Sterownik w polaczeniu zapewne z przekaznikiem, licznikiem impulsow i wyswietlaczem maja za zadanie:
    -wlaczac losowo w rownych odstepach czasu jeden z 16 przyciskow
    -liczyc i wyswietlac liczbe w tempo wcisnietych przyciskow
    -wyswietlac, odmierzac czas gry (do zakonczenia)
    -dobrze byloby aby istniala mozliwosc sensownego zintegrowania wrzutnika monet i czegos do odtwarzania dzwiekow

    Nie znam się na tym więc proszę kogoś mądrego o doradzenie jakich elementów potrzebuje i jak je połączyć. Jeśli ktoś chce zrobić to odpłatnie proszę o ofertę na maila.

    Odpowiedz
  • wieslaw
    ja chciałbym sterować 2×2 led cyfrowe wspólna anoda +ULN 2803 D+2×2 przyciski/dwie cyfry lewa +dwie cyfry prawa srtona +przyski do kazdej strony/- b.prosze o pełny schemat +SOFT TAKIEGO PODŁĄCZENIA-jestem początkujący.
    Dziękuję.

    1. 08.2017
    Odpowiedz

Odpowiedz

anuluj

Arduino steruje segmentowym wyświetlaczem LED

Nie przegap nowych projektów!

Zapisując się na nasz Newsletter będziesz miał pewność, że nie przegapisz żadnego nowego projektu opublikowanego w Majsterkowie!

Od teraz nie przegapisz żadnego projektu!

Masz uwagi?