Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
IGE-XAOIGE-XAO
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Świąteczny wyświetlacz LED 32x32

Sh44dow 15 Dec 2010 00:31 21763 32
  • Świąteczny wyświetlacz LED 32x32

    Witam.
    Niedawno ukończyłem budowę dwóch paneli LED 32x16, które świetnie nadają się do wyświetlania świątecznych grafik. Całość mam zamiar ustawić przy drzwiach balkonowych i obraz będzie widoczny z ulicy.

    Matryca została zbudowana z 16 modułów LED 8x8 5mm, rejestrów przesuwnych 74HC595 oraz sterowników ULN2803 - 8 logicznych multipleksowanych wierszy. Całość jest sterowana przez mikrokontroler ATMega32 taktowany kwarcem 11,0592MHz, który komunikuje się z PCtem przez sprzętowy UART (konwerter MAX232). Do wyświetlania tekstu\grafik\animacji napisałem niewielką aplikację w Delphi czytającą pliki BMP, a program dla mikrokontrolera napisany jest w C. Można również w kompilować kilka animacji w program na sztywno i wyświetlać je bez użycia komputera. Panele można ułożyć w prostokąt 64x16 lub kwadrat 32x32.

    Płytki pod panele wykonałem metodą termotransferu, a sterownik jest jeszcze mojej małej, zgrabnej płytce uniwersalnej (z ATMegą32) własnej roboty (planuję jeszcze zaprojektować w Eaglu lepsza płytkę).

    Więcej szczegółów na temat matrycy można przeczytać na moim blogu: http://silent.it.cx/

    Oto kilka zdjęć z budowy:
    Świąteczny wyświetlacz LED 32x32 Świąteczny wyświetlacz LED 32x32 Świąteczny wyświetlacz LED 32x32 Świąteczny wyświetlacz LED 32x32

    Film prezentujący przykładowe animacje:

    Link

    Cool! Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    Sh44dow
    Level 16  
    Offline 
    Sh44dow wrote 235 posts with rating 958, helped 3 times. Live in city Wieliczka. Been with us since 2007 year.
  • IGE-XAOIGE-XAO
  • #2
    yogi009
    Level 43  
    Bardzo fajny projekt, sporo pracy własnej. Jedyna sprawa, którą można by poprawić, to te wiązki przewodów na warstwie top. W tak zaawansowanym projekcie można się było pokusić o płytkę dwustronną.
  • #3
    Sh44dow
    Level 16  
    Myślałem nad tym i jakbym zamawiał gotową płytkę to na pewno byłaby dwuwarstwowa, ale w przypadku termotransferu i tak musiałbym zrobić te wszystkie przelotki.
  • #4
    mklos1
    Level 25  
    Bardziej eleganckim rozwiązaniem zamiast przewodów byłoby użycie przewlekanych rezystorów 0R, tym bardziej, że na dolnej warstwie zostało sporo miejsca.

    EDIT:
    Jaki jest koszt wykonania?
  • #5
    shadow0013
    Level 34  
    Kiedy zacząłeś realizację świątecznego wyświetlacza, efekt będzie widać jak zamieścisz zdjęcie robione z dworu (proporcje, odległość). Włożyłeś dużo pracy pracy w swój projekt i żeby jej nie zaprzepaścić umieść pliki z projektu dodatkowo na elektrodzie - może ktoś kiedyś będzie chciał skorzystać z Twoich doświadczeń a nic bardziej nie wkurza jak odnośniki na stron które znikły, zmieniły serwery itd. (niestety dużo jest takich na elektrodzie). Jak zrobiłeś biały termotransfer?
  • #6
    Sh44dow
    Level 16  
    Koszt - kupiłem te matryce na allegro po 2,50zł od kogoś kto miał cały karton i chciał się tego pozbyć, do każdej matrycy 2 scalaki za 50gr \ 1,40zł, do tego ponad 1zł na listwy + podstawki, laminat i kilka drutów, jakieś gniazda, taśmy - jeden panel 32x16 wyszedł około 70-80zl plus sporo chęci i wolnego czasu.

    @shadow0013:
    Zacząlem dawno temu, LEDy kupiłem jeszcze w wakacje, ale z powodu braku czasu praca poszła bardzo powoli - jakieś 2-3 tygodnie temu przyśpieszyłem.

    Co do plików, to mam zamiar udostępnić całość jak zrobię dedykowaną płytkę pod sterownik.

    Biały termotransfer? To jest zwykły toner, a biały dlatego, ze zostały na nim resztki papieru ;-).
  • #7
    Boruc95
    Level 10  
    Efekt jak najbardziej ciekawy. Tylko zastanawia mnie czemu wzór płytki na laminacie jest w odbiciu lustrzanym ?
  • #8
    bobo
    Level 29  
    A wracając do rzeczy, proszę autora o podanie zewnętrznych wymiarów tej matrycy.
    Pozdrówka
  • #9
    FastProject
    Level 28  
    Poza tymi przewodzikami, to mi się podoba (osobiście wszystro zrobiłbym w SMD wraz z zworkami SMD).

    Interesuje mnie w jaki sposób przenosisz i generujesz obrazy oraz napisy z komputera do sterownika, oraz w jaki sposób wyświetlasz te grafiki na matrycach...chodzi mi o twoją metodę multipleksu. Jakieś tablice na pewno, ale jak pookładane i w jaki sposób przesyłane i wysyłane do rejestrów)

    I jeszcze pytanie jak myślisz jaką maksymalną rozdzielczość jesteś w w stanie osiągnąć na tym urządzeniu?

    Aaaa i piszesz, że "Panele można ułożyć w prostokąt 64x16 lub kwadrat 32x32" czy ta zmiana wykonuje się w programie automatycznie (jakaś zworka?) czy po prostu masz różne programy dla różnych rozdzielczości?
  • IGE-XAOIGE-XAO
  • #10
    Sh44dow
    Level 16  
    @Boruc95:
    Płytka z pierwszego zdjęcia była robiona jako pierwsza - po prostu zapomniałem na końcu odwrócić tekstu ;-).

    @bobo
    Moje matryce 8x8 5mm mają chyba około 6cm (chyba 57mm), więc jest to kwadrat o boku około 22,8cm lub prostokąt 45,6cm x 11,4cm.

    Co do przewodów to faktycznie, nie wyglądają zbyt estetycznie, ale jednak zdecydowałem się na jedną warstwę bo i tak są schowane pod matrycami.

    @Daro_Elektronik
    Multipleksowanie wygląda tak, że co przerwanie wpisuję do rejestru linię, zmieniam wiersz i zatrzaskuję. Logicznie jest 8 wierszy i jeden długi rejestr (dla 2 paneli jest to 128 bitów)
    Zapis do rejestrów jest krytyczną częścią i ważne było żeby wysłanie danych do rejestru nie wymagał żadnych ich transformacji, więc ułożyłem pamięć tak, żeby wystarczyło przesuwać wskaźnik o stałą wartość w celu wysłania linii.
    Przykładowo dla jednego panelu tablica wygląda tak: char mem[2][8][8]

    Świąteczny wyświetlacz LED 32x32

    Pierwszy wymiar to strona (o tym później), drugi odpowiada numerowi matrycy a trzeci odpowiada wierszowi w danej matrycy (jeden bajt to jeden 8-diodowy wiersz danej matrycy). I teraz wyświetlając wiersz N, wysyłam do rejestrów po kolei bajty mem[*][i][N], gdzie i=7...0.
    Oczywiście co przerwanie zmienia się N. Zwiększając rozmiar matrycy zwiększam odpowiednio drugi wymiar.

    Zwiększyłem pamięć obrazu dodając drugą "stronę" - procesor odbierając daje od PCta wyświetla ciągle stronę A wpisując nowe dane na stronę B i po zakończeniu odbierania strony zmienia aktywną (wyświetlaną) stronę na B, następne dane wpisuje do A i tak w kółko.
    Jest to szybka metoda nie wymagająca nieefektywnego kopiowania danych z bufora po zapełnieniu przy zachowaniu "ostrego" przeskoku klatek (zapis od razu do pamięci obrazu dałby "rozmytą" animację). RAMu w mikrokontrolerze jest sporo, więc nie trzeba oszczędzać ;-).

    Układ matryc uwzględnaim w programie na PC - czyta bmp do pamięci, odwzorowuje ją (klatkę) na układ pamięci dla mikrokontrolera i wysyła po RS232.

    Co do ilości matryc - trudno mi powiedzieć ile można ich podłączyć w szereg. Do jakiejś dużej ilości przydałby się szybszy procek żeby nadążał z wysyłaniem danych do rejestrów, najlepiej ze sprzętowym USB, bo transfer RS232 też trochę ogranicza. Można też podłączyć kilka równoległych szeregów matryc.
  • #11
    J_Bravo
    Level 27  
    Kilka rzeczy bym zmienił:
    1. Matryce LED zamontuj bez podstawek. Podstawki z czasem przestaną łączyć. Przerabiałem to kilkakrotnie.
    2. Płytkę zaprojektuj tak żeby scalaki były z innej strony niż matryce. W razie czego będzie łatwiej je wymienić.
    3. Płytka 2-stronna albo zaprojektuj ją tak żeby nie było tylu zworek.

    Świąteczny wyświetlacz LED 32x32
  • #12
    kamil007
    Level 12  
    Hey!
    Możesz podpwiedzieć jak się przesuwa taki obraz po matrycy :?:
    Wyświetlić potrafię, ale nie bardzo wiem jak w języku C zrealizować te przesuwanie (lewo , prawo, góra , dół)
    No i efekt choinki z padającym śniegiem. Jak to jest zrobione :?: :?: :?:
    Masz parę klatek (tablic) i je cyklicznie odtwarzasz, coś ala GIF :?:
  • #13
    Sh44dow
    Level 16  
    Dokładnie tak. W przypadku animacji mam bitmapę w której klatki są ułożone jedna po drugiej z góry na dół i program po kolei wysyła je do sterownika. Jeśli mam jakąś szeroką bitmapę (np. napis "wesołych świąt"), ustawiam w programie tryb przesuwania w wybranym kierunku - wysyłane są po kolei odpowiednie kwadraty (prostokąty), np. dla 32x32 i przesuwania w lewo - [1,1,32,32], [2,1,33,32], [3,1,34,32] itd.
    Sam sterownik ma obsługę kilku komend - czyszczenie ekranu, ramka 64B (32x16) i ramka 128B (32x32 lub 64x16). Jest też miejsce na polecenia "przesuń w lewo\prawo\górę\dół", ale nie miałem jak na razie potrzeby ich implementować bo szybciej zrobi to komputer (jedynie "lewo" dla 32x16 do pierwszych testów).
    Jeśli chciałbym wkompilwoać w program jakąś przesuwającą się grafikę to musiałbym dopisać przesuwanie w lewo (ze wstawianiem nowej kolumny z prawej strony), w programie zrobić np. jakąś stałą tablicę z obrazem i cyklicznie przesuwać obraz w lewo i wstawiać kolejna kolumnę.

    Co do efektu padającego śniegu to zrobiłem taki trik: narysowałem w paincie śnieg (32x64 żeby wzór się aż tak często nie powtarzał, może być dłuższy). Żeby wyświetlić sam padający śnieg wystarczyłoby włączyć przewijanie tego obrazu w dół ale jest jeszcze choinka, więc potrzeba zrobić z tego pojedyncze klatki. Napisałem więc na szybko programik który skopiował z niej pierwszy kwadrat 32x32 na dół tworząc obraz 32x96 (chodzi o to, żeby był cykliczny) a następnie skopiował po kolei kwadraty [1,1,32,32], [1,2,32,33] (co raz niższe) do nowej bitmapy układając je z góry na dół. Na końcu wstawiłem na każdą klatkę choinkę z białym wypełnieniem i przeźroczystym tłem i gotowe.
  • #14
    And!
    Admin of Design group
    Bardzo ciekawy projekt,
    czy myślałeś nad możliwością sterowania jasnością punktów ?

    Czy to złudzenie czy na matrycy (1,1) (licząc od 0 od lewego górnego rogu),
    diody świecą jaśniej ?
  • #15
    Sh44dow
    Level 16  
    To nie złudzenie - niestety dostałem nieposortowane matryce i każda ma inna jasność (w dodatku na dwóch albo trzech są ciemniejsze punkty) -zapewne dlatego były tak tanie ;-).
    Do sterowania jasnością przydałby się szybszy procesor - ilość danych zwiększyła by się 8- lub 16-krotnie w zależności od liczby odcieni.
    Próbowałem nawet ostatnio coś pokombinować z jasnością, ale przy tak zróżnicowanych matrycach efekt był marny. Jak mi się zechce to jeszcze do tego wrócę, może coś z tego wyjdzie.
  • #16
    don_kovalos
    Level 10  
    Sh44dow

    Można prosić o schemat elektryczny?

    Zakupiłem 5x7 dot-matrix led ze wsp. katoda i zastanawiam się jak to podłączyć do ULN i 74HC595. Widać, ża masz odwrócone matryce o 90st. na panelach tak, że kolumy matrycy stały się wierszami całego wyświetlacza.
    1. Czyli ULN steruje wierszem panela(KATODA), a rejestry kolumnami panela(ANODA) (odwrotnie niż pojedynczej matrycy) ?
    2. Czy nie można było zastsować jednego ULN do sterowania wiersza całego panelu (czyli czterech matryc) ?
    3. Nie widzę żadnych rezystorów ograniczających prąd
  • #17
    Sh44dow
    Level 16  
    Na stronie mam gdzieś poglądowy schemat.
    Jeden panel 32x16 to jest logiczne 64x8. Rejestry z ULNami (1 ULN do każdego rejestru ze względu na niską wydajność prądową 74HC595) sterują kolumnami (katodami), a wierszami steruje 8 tranzystorów, których nie ma płytce z LEDami - są na płytce sterownika (ULN może nie pociagnąć dłuższego szeregu).
  • #18
    don_kovalos
    Level 10  
    Tak sie zastanawiam czy nie można byłoby przedłużyć rejestru (w pojedynczym panelu) o jeszcze jeden układ 74hc595 (+ Tranzystor do każdego wyprowadzenia), który sterowałby multiplexowo wierszem. Wtedy mikrokontroler steruje tylko długim rejestrem.
  • #20
    Kuba-Wiśnia
    Level 10  
    Czy to są wyświetlacze R, czy RG, o kolory mi chodzi. Czy są takie RGB ?
  • #22
    don_kovalos
    Level 10  
    Można jednak prosić o schemat elektryczny np z Eagle'a ? Jeśli wiersze obługują tranzystory pnp np BC557, a kolumny ULN + rejestr '505 to uzyskuję różną jasność w zależności od ilości zapalonych diod w wierszu.
  • #23
    Sh44dow
    Level 16  
    schemat poglądowy jest tutaj:
    http://silent.it.cx/home/2010/09/26/w-budowie-matryca-led-64x16/

    U mnie też spada jasność po zaświeceniu większej ilości diod w rzędzie, ale to zapewne przez tranzystory sterujące wierszami - aktualnie mam tam jakieś małe, chyba do 200-300mA i planuje je wymienić na cos "większego", wtedy powinno byc OK.
  • #24
    kamil007
    Level 12  
    Słuchaj, a jak sie robi taki programik do zmiany bitmapy na taką mapę pixeli??
    Bo to mi spędza sen z powiek :D
    Wczytujesz sobie bitmapkę, przerabiasz na monochromatyczną, czytasz linie po lini i co dalej :?:
  • #25
    Sh44dow
    Level 16  
    kamil007 wrote:
    Słuchaj, a jak sie robi taki programik do zmiany bitmapy na taką mapę pixeli??
    Bo to mi spędza sen z powiek :D
    Wczytujesz sobie bitmapkę, przerabiasz na monochromatyczną, czytasz linie po lini i co dalej :?:


    W Delphi jest gotowa klasa do obsługi bitmap. Wczytuję bitmapę i robię z niej (z całej lub z fragmentu który jest obecnie wyświetlany) tablicę wartości logicznych (1/0) o wymiarach wyświetlacza (32x32 \ 64x16) dla wygodniejszego operowania na danych. Wartość TRUE oznacza zaświeconą diodę. Podobnie z generowaniem tekstu - generuję tekst na bitmapie z pliku czcionki przenoszę klatkę do tablicy z wartościami logicznymi.
    Następnie przemapowuję tą tablicę na układ danych w pamięci sterownika i je wysyłam.
  • #26
    kamil007
    Level 12  
    Quote:
    Następnie przemapowuję tą tablicę na układ danych w pamięci sterownika i je wysyłam.

    Nie wiem czy dobrze rozumię ,ale chyba z tym mam własnie problem.
    Bo taką tablice wartości logicznych 1/0 potrafię zrobić, tylko własnie nie wiem jak ją przerobić na taki format jak potrzebuję. :| Czyli z wartości np: 1,1,1,0,0,1,1,1
    zrobić 0xE7
  • #28
    kamil007
    Level 12  
    Pisze to mocno powiedziane :D
    C++ Builder
  • #29
    Sh44dow
    Level 16  
    Skoro C++ to zapewne jest to np. bool t[8], prawda?

    Chcąc zamienić 8 wartości logicznych na 1 8-bitową liczbę (bajt) można to zrobić np. tak:

    Code:

    char bajt=0;
    for(int i=7; i>=0; --i)
    {
     if (t[i]) bajt+= (1 << i);
    }
  • #30
    kamil007
    Level 12  
    heh , wielkie dzięki naprowadziłeś mnie "chyba" na właściwe tory :D

    Dodano po 4 [godziny] 38 [minuty]:

    No fajnie działa :D .
    Tylko jak teraz tego char wyświetlić w hex, bo teraz wyświtla ładne krzaczki:|