Elektroda.pl
Elektroda.pl
X
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 21955 32
Nazwa.pl
  • Ś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:



    Cool? Ranking DIY
    About Author
    Sh44dow
    Level 16  
    Offline 
    Sh44dow wrote 235 posts with rating 960, helped 3 times. Live in city Wieliczka. Been with us since 2007 year.
  • Nazwa.pl
  • #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.
  • Nazwa.pl
  • #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 11  
    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?
  • #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 11  
    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 11  
    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 11  
    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
  • #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:|