Dom ProduktyModuł wyświetlacza LED

SparkFun lub Adafruit 32x32 RGB LED Panel Driver Tutorial 16 sygnałów danych podłączyć + 5VDC odświeżony, aby wyświetlić obraz

SparkFun lub Adafruit 32x32 RGB LED Panel Driver Tutorial 16 sygnałów danych podłączyć + 5VDC odświeżony, aby wyświetlić obraz

    • SparkFun or Adafruit 32x32 RGB LED Panel Driver Tutorial 16 data signals connect + 5VDC refreshed to display an image
    • SparkFun or Adafruit 32x32 RGB LED Panel Driver Tutorial 16 data signals connect + 5VDC refreshed to display an image
    • SparkFun or Adafruit 32x32 RGB LED Panel Driver Tutorial 16 data signals connect + 5VDC refreshed to display an image
    • SparkFun or Adafruit 32x32 RGB LED Panel Driver Tutorial 16 data signals connect + 5VDC refreshed to display an image
    • SparkFun or Adafruit 32x32 RGB LED Panel Driver Tutorial 16 data signals connect + 5VDC refreshed to display an image
    • SparkFun or Adafruit 32x32 RGB LED Panel Driver Tutorial 16 data signals connect + 5VDC refreshed to display an image
  • SparkFun or Adafruit 32x32 RGB LED Panel Driver Tutorial 16 data signals connect + 5VDC refreshed to display an image

    Szczegóły Produktu:

    Miejsce pochodzenia: CHINY
    Nazwa handlowa: Leeman
    Orzecznictwo: UL CE ROHS ISO2000 ETL SGS SAA Fcc EMC
    Numer modelu: Panel LED PH5 RGB

    Zapłata:

    Minimalne zamówienie: 1 jednostka lub 1 szt
    Cena: Negotiation (Good price)
    Szczegóły pakowania: Pudełko kartonowe lub skrzynka drewniana
    Czas dostawy: 1-3 dni robocze
    Zasady płatności: L / C, T / T, Western Union, Paypal, karta kredytowa, MoneyGram, VISA, MasterCard, gotówka
    Możliwość Supply: 50 000 sztuk miesięcznie
    Skontaktuj się teraz
    Szczegółowy opis produktu
    Rozmiar modułu: 160 x 160 lub 320 x 160 lub 256 x 256 lub 192 x 192 lub 256 x 128 Rozdzielczość: 32 x 32 piksele 64 x 32 piksele
    Jasność: Ponad 2500 minut Napięcie WEJŚCIOWE: DC5V
    Typ skanu: 1/2 lub 1/4 lub 1/8 lub 1/16 lub 1 / 32Scan Świeże tempo: ≥ 2400 Hz
    Typu LED: SMD2121 SMD3528 SMD3535 SMD2727 SMD5050 MTTF: > 100 000 godzin

    SparkFun lub Adafruit 32x32 RGB LED Panel Driver Tutorial 16 sygnałów danych podłączyć + 5VDC odświeżony, aby wyświetlić obraz

    Wprowadzenie

    W tym projekcie łączymy panel LED RGB SparkFun lub Adafruit 32x32 RGB z płytą BeagleBone Black za pomocą układu FPGA Xilinx Spartan 6 LX9 na płycie FPGA LogiBone. Sprzęt do tego projektu jest stosunkowo łatwy do zbudowania - tylko 16 sygnałów danych łączy panel LED z płytą FPGA LogiBone. Złożoność tego projektu polega głównie na RTL i oprogramowaniu.

    Rysunek 1. Panel LED RGB z losowym migoczącym wzorem połączonym z płytą FPGA LogiBone i kilkoma innymi obrazami panelu próbnego.

    Wymagany sprzęt

    Wymagane są następujące elementy sprzętu:

    • Panel LED RGB SparkFun lub Adafruit 32x32
      Ten panel zawiera 1024 diody RGB rozmieszczone w matrycy 32x32. Kolumny są sterowane za pomocą wielu zestawów rejestrów przesuwnych, a wiersze są sterowane, dwa wiersze naraz, przy użyciu 4-bitowego dekodera adresu. Panel jest napędzany w cyklu 1/16 th i musi być stale odświeżany, aby wyświetlić obraz.

    • Płytka BeagleBone Black z zasilaczem USB lub + 5VDC
      Będziesz potrzebował czarnej płyty procesora BeagleBone i zasilacza + 5VDC. Możesz użyć kabla USB do zasilania karty z komputera lub zasilacza USB lub użyj osobnego zasilacza prądu przemiennego o napięciu 5VDC, 2,1 mm, centralnie dodatniego.

    • Płyta FPGA LogiBone
      Płyta FPGA zawiera układ FPGA Xilinx Spartan 6 LX9. FPGA zawiera 32 18-bitowe blokowe pamięci RAM. Będziemy używać dwóch blokowych pamięci RAM jako buforów klatek do przechowywania wartości pikseli RGB wyświetlanych na panelu. Dwa złącza kompatybilne z Digilent PMOD zostaną użyte do połączenia z panelem LED.

    • Przewody rozruchowe lub płytka przejściowa PMOD do wyświetlenia do podłączenia FPGA do wyświetlacza
      Początkowo używałem przewodów łączących męskich z żeńskimi, aby połączyć panel. Pozwoliło mi to podłączyć płytę LogiBone FPGA bezpośrednio do panelu wyświetlacza LED bez użycia kabla taśmowego dołączonego do wyświetlacza. Jeśli masz tylko przewody połączeniowe typu męski-męski, musisz użyć 16-położeniowego kabla taśmowego dołączonego do wyświetlacza jako przejściówki do połączenia z męskimi stykami na końcu wyświetlacza przewodów połączeniowych.
      Dużo czystszym, długoterminowym rozwiązaniem jest użycie tej płytki i 16-pozycyjnego kabla taśmowego dołączonego do panelu LED, aby umożliwić połączenie z karty LogiBone FPGA do złącza wejściowego wyświetlacza. Do połączenia FPGA i panelu użyłem również wstępnie przygotowanych przewodów i zacisków. Nie podobało mi się to rozwiązanie, ponieważ wstępne przewody z zaciskami, gdy są zainstalowane w złączu 2x8 obudowy, wymagały zbyt dużej siły, aby włożyć i wyjąć złącze danych wyświetlacza.

    • Napięcie 3,3 V, nominał 2,0 A, szczyt 4,0 A.
      Podczas normalnej pracy wyświetlacz będzie pobierał najwyżej 2A prądu. Jeśli "utkniesz" odświeżenie z wyświetlonym całkowicie białym wzorem, dwa wiersze, które się zapalą, będą pobierać około 3,8A. Małe zasilacze stacjonarne 3.3 V, 3.0A, takie jak ten z Mouser, będą wystarczające podczas normalnej pracy. Konieczne będzie dostarczenie własnego kabla zasilającego IEC60320 C13 do użycia z tym adapterem.
      Panele te mogą być również uruchamiane z napięcia + 5V zamiast 3,3V. Dostaniesz jaśniejsze zielenie, jaśniejsze błękity i mniej czerwone białka, jeśli będziesz jechał z + 5V zamiast + 3.3V. Będziesz także pobierał o około 15% więcej prądu i zużywasz o około 65% więcej energii przy + 5 V zamiast + 3.3 V. Jeśli korzystasz z zasilania + 5V, zachowaj szczególną ostrożność, aby przypadkowo nie podłączyć karty LogiBone FPGA do złącza wyjściowego wyświetlacza.

    • Adapter żeńskiego złącza DC barrel (opcjonalnie)
      Złącze żeńskie DC z bolcem DC znacznie ułatwi podłączenie panelu do zasilania. Jeśli nie masz adaptera, możesz zawsze ciąć, spawać, lutować i ogrzewać połączenia między zasilaczem a panelem led.

    Wymagane oprogramowanie

    • Stock ValentFX LogiBone Ubuntu build z modułem jądra LogiBone logibone_ <revision> _dm.ko i logi_loader
      Pobierz i postępuj zgodnie z instrukcjami tutaj, aby zainstalować domyślny obraz LogiBone Ubuntu na karcie SD.
    • Oprogramowanie Xilinx ISE WebPack
      Jeśli chcesz samodzielnie skompilować plik bitowy FPGA lub dostosować Verilog do sterowania większą liczbą paneli lub dodać inne niestandardowe funkcje (takie jak koprocesor, aby pomóc w obliczaniu trudnych wzorów pikseli), musisz pobrać i zainstalować oprogramowanie Xilinx ISE WebPack. Instrukcje są tutaj . Jeśli chcesz użyć domyślnego pliku bitowego FPGA, możesz pominąć instalowanie oprogramowania Xilinx ISE WebPack.
    • Repozytorium GIT z panelu LED firmy Glen
      Na koniec będziesz musiał sklonować moje repozytorium GIT na stronie http://github.com/bikerglen/beagle do swojego BeagleBone Black. To repozytorium zawiera kod źródłowy Verilog dla FPGA, wstępnie skompilowany plik bitowy i kod źródłowy C ++ do wyświetlania niektórych szablonów demonstracyjnych na panelu. Instrukcje dotyczące pobierania lub klonowania i korzystania z repozytorium przedstawiono w dalszej części.

    teoria operacji

    Ten system ma trzy główne komponenty: panel LED, kod FPGA i kod C ++. Zbadajmy szczegółowo każdy z tych trzech głównych komponentów.

    Panel LED

    Sprzęt panelowy LED

    Panel LED zawiera 1024 diody LED RGB ułożone w macierz złożoną z 32 rzędów i 32 kolumn. Każda dioda RGB zawiera osobne czerwone, zielone i niebieskie żetony LED połączone razem w jednym opakowaniu. Wyświetlacz podzielony jest w poziomie na dwie połówki. Górna połowa składa się z 32 kolumn i 16 rzędów. Dolna połowa składa się również z 32 kolumn i 16 rzędów.

    Kolumny wyświetlacza są sterowane przez jeden zestaw sterowników, a wiersze ekranu są sterowane przez inny zestaw sterowników. Aby podświetlić diodę LED, sterowniki dla kolumny i wiersza dla tej diody LED muszą być włączone. Aby zmienić kolor diody LED, czerwone, zielone i niebieskie żetony w każdym pakiecie LED są sterowane indywidualnie i mają własne sterowniki kolumn. Rysunek 2 poniżej przedstawia schematycznie kolumnę wyświetlacza i organizację sterownika wiersza.

    Rysunek 2. RGB kolumna panelu LED i organizacja kierowcy rzędu.

    Panel zawiera sześć zestawów sterowników kolumn; trzy dla górnej połowy wyświetlacza i trzy dla dolnej. Każdy sterownik ma 32 wyjścia. Trzy sterowniki dla górnej części wyświetlacza przesuwają czerwone, zielone i niebieskie żetony w każdej z 32 kolumn diod LED w rzędach od 0 do 15 panelu. Trzy sterowniki dolnej części wyświetlacza napędzają czerwone, zielone i niebieskie układy scalone w każdej z 32 kolumn diod LED w rzędach 16 do 31 panelu.

    Każdy z sterowników ma szeregowe wejście danych, wejście zaślepiające, rejestr przesuwny i równoległy rejestr wyjściowy, jak pokazano poniżej na Rysunku 3. Dane obecne na wejściu danych szeregowych są przesunięte do rejestru przesuwnego za pomocą sygnału SCLK. Po przeniesieniu całego rzędu danych do rejestru przesuwnego, sygnał LATCH służy do przeniesienia szeregu danych pikseli z rejestru przesuwnego do równoległego rejestru wyjściowego. Jeśli bit w rejestrze wyjściowym ma wartość "1", a wejście wygaszania zostanie usunięte, sterownik dla tej kolumny zostanie włączony; w przeciwnym razie sterownik zostanie wyłączony. Dane przesuwają się od prawej krawędzi wyświetlacza do lewej krawędzi wyświetlacza. Innymi słowy, pierwszy bit przesunięty zostanie wyświetlony na lewej krawędzi wyświetlacza, a ostatni bit przesunięty zostanie wyświetlony po prawej stronie.

    Rysunek 3. Operacja sterownika kolumnowego dla danych wejściowych R0 i wyjścia z górnymi czerwonymi kolumnami. W górnej części ekranu znajdują się jeszcze dwa rejestry przesuwne dla górnych i zielonych kolumn niebieskich i niebieskich oraz trzy kolejne u dołu dla dolnych połówek czerwonych, zielonych i niebieskich kolumn.

    Czerwone, zielone i niebieskie wskaźniki kolumn dla górnej połowy wyświetlacza są podłączone odpowiednio do wejść danych R0, G0 i B0. Czerwone, zielone i niebieskie wskaźniki kolumn dla dolnej połowy wyświetlacza są podłączone odpowiednio do wejść danych R1, G1 i B1. Wszystkie sześć 32-bitowych sterowników ma wspólne sygnały SCLK, LATCH i BLANK.

    Wiersze są sterowane za pomocą czterech bitów adresu i dekodera adresu. Czterobitowe dane wejściowe do sterowników wierszy są dekodowane, a sterowniki dwurzędowe odpowiadające temu adresowi zostaną włączone. Gdy A [3: 0] wynosi 0, wiersze 0 i 16 wyświetlacza są włączone. Gdy A [3: 0] wynosi 1, wiersze 1 i 17 wyświetlacza są włączone. Ten wzór jest kontynuowany do momentu, gdy A [3: 0] wynosi 15, a wiersze 15 i 31 są włączone.

    Oprócz logiki wiersza i kolumny oraz sterowników, wyświetlacz ma puste wejście. To wejście jest najprawdopodobniej połączone ze sterownikami kolumn. Po potwierdzeniu sygnału wygaszania wszystkie piksele są wyłączone, a wyświetlacz będzie czarny. Po usunięciu sygnału wygaszania zaadresowane wiersze i kolumny będą sterowane, a odpowiednie piksele będą podświetlane. Aby wyświetlać obraz bez migotania i migotania, wszystkie te sygnały muszą być używane i prawidłowo sekwencjonowane podczas kierowania panelem.

    Prowadzenie panelu

    Wyświetlacz jest multipleksowany i ma 1/16 th cykl pracy. Oznacza to, że nie więcej niż jeden rząd z 16 w górnej połowie wyświetlacza i jeden rząd z 16 w dolnej połowie wyświetlacza są zawsze oświetlone naraz. Ponadto dioda LED może być włączona lub wyłączona. Jeśli oba rzędy i kolumny diod LED są włączone, dioda LED będzie świecić; w przeciwnym razie dioda LED będzie wyłączona.

    Aby wyświetlić obraz, cały panel LED musi zostać zeskanowany wystarczająco szybko, aby wydawał się wyświetlać ciągły obraz bez migotania. Aby wyświetlać różne kolory i różne poziomy jasności, jasność czerwonych, zielonych i niebieskich żetonów LED w każdym pakiecie LED musi być regulowana poprzez zmianę czasu, w którym każdy z chipów LED jest włączony lub wyłączony w ramach jednego cyklu odświeżania.

    Podstawowy proces używany do odświeżania ekranu przy użyciu trzech bitów na piksel (jeden bit na czerwony, jeden na zielony i jeden na niebieski) jest następujący:

    1. Przesunięcie danych pikseli dla wiersza 0 do sterowników w górnej kolumnie i danych pikseli dla wiersza 16 do sterowników w dolnej kolumnie przy użyciu danych wejściowych danych R0, G0, B0, R1, G1 i B1 i sygnału zegarowego przesunięcia SCLK.
    2. Zatwierdź sygnał wygaszający, aby wyzerować wyświetlacz.
    3. Ustaw wejście adresu na 0.
    4. Zatrzaskuj zawartość rejestrów przesuwnych sterowników kolumn do rejestrów wyjściowych sterowników kolumn za pomocą sygnału LATCH.
    5. Usunąć sygnał wygaszania, aby wyświetlić wiersze 0 i 16.
    6. Zaczekaj trochę ustalonego czasu.
    7. Powtórz proces dla każdej pary wierszy na ekranie.
    8. Powtórz cały proces co najmniej 100 do 200 razy na sekundę, aby zapobiec migotaniu.

    Powyższy proces wykorzystuje jeden bit na kolor diody LED. Daje to osiem możliwych kolorów: czarny; podstawowe kolory: czerwony, zielony i niebieski; kolory wtórne: cyjan, magenta i żółty; i biały.

    Aby wyświetlić więcej kolorów i poziomów jasności, powyższa technika jest modyfikowana w celu użycia modulacji kodowanej binarnie . W modulacji kodowanej binarnie każdy piksel jest kontrolowany za pomocą więcej niż jednego bitu na kolor na piksel. Czas działania każdego z czerwonych, zielonych i niebieskich chipów LED zmienia się proporcjonalnie do wartości czerwonego, zielonego i niebieskiego piksela.

    W przypadku modulacji binarnej wykonywany jest następujący proces w celu odświeżenia wyświetlacza:

    1. Przesunąć bit zero wszystkich wartości czerwonego, zielonego i niebieskiego każdego piksela dla wierszy 0 i 16 w sterownikach kolumn.
    2. Zatwierdź sygnał wygaszający, aby wyzerować wyświetlacz.
    3. Ustaw wejście adresu na 0.
    4. Zatrzaskuj zawartość rejestrów przesuwnych sterowników kolumn do rejestrów wyjściowych sterowników kolumn za pomocą sygnału LATCH.
    5. Usunąć sygnał wygaszania, aby wyświetlić wiersze 0 i 16.
    6. Zaczekaj trochę czasu, N.
    7. Powtórz powyższy proces dla następnego koloru bitowego wyższego rzędu w tym samym wierszu. W kroku 6 poczekaj dwa razy poprzedni czas opóźnienia. Powtórz ten proces dla każdego koloru danych koloru, podwajając czas opóźnienia po wyświetleniu każdego kolejnego bitu.
    8. Powtórz powyższy proces dla każdej pary wierszy na ekranie.
    9. Powtórz cały proces co najmniej 100 do 200 razy na sekundę, aby zapobiec migotaniu.

    Należy zauważyć, że w rzeczywistych implementacjach proces przesuwania danych pikselowych do rejestrów przesuwnych w Etapie 1 jest zwykle wykonywany podczas czasu oczekiwania w Etapie 6.

    Globalne przyciemnianie wyświetlacza można przeprowadzić zmieniając czas, w którym sygnał wygaszania jest potwierdzany lub odrzucany w okresie oczekiwania, N. Na przykład, potwierdzenie sygnału wygaszania o 25% wcześniej spowoduje wyświetlenie z jasnością 75% zamiast 100%. Należy pamiętać, że podczas globalnego przyciemniania sam czas oczekiwania nie jest skracany ani wydłużany; tylko sygnał wygaszający jest modyfikowany tak, aby był potwierdzany wcześniej, niż byłby normalnie.

    FPGA

    FPGA łączy oprogramowanie generujące wzór C ++ działające na procesorze BeagleBone Black z panelem LED. FPGA wykonuje ciężki lifting wymagany do odświeżenia całego panelu LED około 200 razy na sekundę. Pozostawia to procesorowi BeagleBone Black bezpłatne generowanie wzorów i wykonywanie innych zadań.

    Rysunek 4 . Schemat blokowy systemu wraz ze schematem blokowym głównych bloków funkcjonalnych FPGA.

    Jak pokazano na Rysunku 4 powyżej, oprogramowanie uruchomione na BeagleBone Black generuje wzorce. Wzory te są podawane do FPGA na płycie LogiBone za pomocą szyny GPMC TI SOC. Wzory te są zapisywane w dwuportowej pamięci, która służy jako bufor wyświetlania. Wreszcie kontroler wyświetlacza odczytuje wzorce z pamięci podwójnego portu, przesuwa dane do wyświetlacza i włącza sterowniki wierszy w zależności od potrzeb, aby wyświetlić obraz. Cały proces powtarza się około 200 razy na sekundę i generuje obraz 32 x 32 RGB z 12-bitowym kolorem bez żadnej interakcji z procesorem BeagleBone Blacks.

    Interfejs GPMC

    TI SOC ma programowalny interfejs pamięci zwany uniwersalnym kontrolerem pamięci (GPMC). Ten interfejs jest niezwykle elastyczny. Może pracować zarówno w trybie synchronicznym, jak i asynchronicznym, a taktowanie magistrali programuje się z krokiem 10ns. Magistrala GPMC będzie używana do przesyłania danych pikseli z oprogramowania BeagleBone Black do FPGA na płycie LogiBone.

    W naszym systemie GPMC jest skonfigurowany do pracy w asynchronicznym, multipleksowanym trybie adres / dane. W tym trybie zarówno adres, jak i magistrale danych mają szerokość 16 bitów. Pozwala to na przesłanie całego 12-bitowego piksela z CPU na BBB do FPGA na płycie LogiBone w ramach jednej operacji zapisu. Więcej informacji na temat asynchronicznego, multipleksowanego trybu pracy konsoli GPMC można znaleźć w sekcji 7.1.3.3.10.1.1 dokumentacji technicznej mikrokomputerów AM335x ARM® Cortex ™ -A8 .

    Używam nieco innego obwodu w FPGA do połączenia z magistralą GPMC niż z zapasowymi projektami LogiBone. Jest nieco wolniejszy od obwodu VHDL, ale gwarantuje, że każdy zapis z procesora przez szynę GPMC tworzy dokładnie jeden impuls strobowania zapisu do interfejsu rejestru wewnątrz FPGA. Ponieważ jest nieco wolniejszy niż obwód zapasowy, wymaga zmodyfikowanego taktu szyny, a tym samym niestandardowego pliku konfiguracji drzewa urządzeń. Rycina 5 poniżej pokazuje synchronizację szyny przy użyciu zmodyfikowanego interfejsu GPMC w celu wykonania zapisu na FPGA. Ryc. 6 poniżej pokazuje synchronizację szyny przy użyciu zmodyfikowanego interfejsu GPMC do wykonania odczytu z FPGA.

    Rysunek 5. Symulacja zapisu do celu GPMC przy użyciu zmodyfikowanych taktowań magistrali.

    Rysunek 6. Symulacja odczytu z celu GPMC przy użyciu zmodyfikowanych ustawień czasowych magistrali.

    Adres odczytu lub zapisu jest blokowany w tymczasowym rejestrze utrzymywania rosnącej krawędzi sygnału GPMC_ADVN, a dane zapisu są doprowadzane do własnego rejestru rejestracji tymczasowej na opadającym zboczu sygnału GPMC_WEN. Wymaga to użycia GPMC_ADVN i odwróconej wersji sygnałów danych GPMC_WEN jako zegarów. Technicznie, używanie sygnałów danych jako zegarów jest obrzydliwe. W rzeczywistości jest tak obrzydliwe, że narzędzia Xilinx wygenerują błąd dla tego warunku. Ale możesz ustawić wyjątek w pliku UCF dla dotkniętych sieci i kontynuować syntezę sił. O wiele lepiej byłoby używać GPMC w trybie synchronicznym, ale ta technika jest wystarczająco dobra dla FPGA, dopóki nie mam czasu na zbudowanie synchronicznej wersji interfejsu, synchronicznego modelu szyny GPMC do symulacji i nauczenia się, jak modyfikować drzewo urządzeń dalej.

    Oprócz blokowania adresu i zapisywania wartości danych w rejestrach przechwytujących, sygnały sterujące GPMC_CSN, GPMC_WEN i GPMC_OEN są rejestrowane i wprowadzane do domeny zegara 100 MHz FPGA. Po przejściu do domeny zegara FPGA, sygnały WEN i OEN są bramkowane z wykrytym sygnałem CSN i krawędzią w celu wykrycia zapisów do celu GPCM i odczytania z celu GPMC. Po wykryciu odczytu lub zapisu zawartość rejestrów przechowywania danych adresu i zapisu przechwytywana jest do rejestrów w dziedzinie zegara 100MHz FPGA.

    Głównym powodem spowolnienia magistrali GPMC w stosunku do pliku konfiguracyjnego drzewa urządzenia było wydłużenie czasu, w którym każdy z tych sygnałów sterujących jest niski lub wysoki do co najmniej 30 ns, aby zagwarantować, że krawędzie sygnałów mogą być wykryte w 100MHz FPGA domena zegara. Zagwarantowało to również, że adres i dane będą stabilne w ich własnych rejestrach gospodarstwa przed przeniesieniem zawartości tych rejestrów do rejestrów adresów i danych, które są taktowane w domenie zegara 100MHz FPGA.

    Wyjściami celu GPMC są autobusy, które nazywam wolną magistralą. Wolna magistrala łączy cel GPMC z interfejsem rejestru FPGA. Rysunek 7 pokazuje przykładową operację zapisu wolnej magistrali. Rysunek 8 pokazuje przykładową operację odczytu wolnej magistrali.

    Rysunek 7. Symulacja powolnego zapisu magistrali.

    sb_addr, sb_wr i sb_wr_data będą obowiązywały dla dokładnie jednego impulsu zegara 100MHz za każdym razem, gdy wystąpi zapis na magistrali GPMC. Gdy interfejs rejestru zobaczy, że sb_wr został zapisany, zapisuje sb_wr_data do rejestru w sb_addr.

    Rysunek 8. Symulacja odczytu wolnej magistrali.

    sb_addr i sb_rd będą ważne dla dokładnie jednego impulsu zegarowego 100 MHz za każdym razem, gdy odczyt wystąpi na magistrali GPMC. Interfejs rejestru widzi sb_rd potwierdzony, a następnie musi zwrócić wartość rejestru pod adresem sb_addr na magistrali sb_rd_data w następnym cyklu zegara.

    Zarejestruj interfejs

    Interfejs rejestru jest implementowany na najwyższym poziomie Verilog FPGA. Interfejs rejestru definiuje widok oprogramowania FPGA. Tabela 1 poniżej zawiera listę rejestrów w FPGA.

    Adres FPGA BBB SOC Address Imię Opis
    0x0000 0x0000 Test R / W Reg 1 Rejestr testu odczytu / zapisu. Wpisz dowolną wartość do tego rejestru. Czyta powrót poprzednio zapisanej wartości.
    0x0001 0x0002 R / W Test Reg 2 Rejestr testu odczytu / zapisu. Wpisz dowolną wartość do tego rejestru. Czyta powrót poprzednio zapisanej wartości.
    0x0002 0x0004 R / W Test Reg 3 Rejestr testu odczytu / zapisu. Wpisz dowolną wartość do tego rejestru. Czyta powrót poprzednio zapisanej wartości.
    0x0003 0x0006 Test R / W Reg 4 Rejestr testu odczytu / zapisu. Wpisz dowolną wartość do tego rejestru. Czyta powrót poprzednio zapisanej wartości.
    0x0004 0x0008 Tylko do odczytu Reg 1 Rejestry testów tylko do odczytu. Czyta powrotne zakodowane wartości. Zobacz RTL dla zwróconych wartości.
    0x0005 0x000a Test tylko do odczytu Reg 2 Rejestry testów tylko do odczytu. Czyta powrotne zakodowane wartości. Zobacz RTL dla zwróconych wartości.
    0x0006 0x000c Tylko do odczytu Reg 3 Rejestry testów tylko do odczytu. Czyta powrotne zakodowane wartości. Zobacz RTL dla zwróconych wartości.
    0x0007 0x000e Test do odczytu Reg 4 Rejestry testów tylko do odczytu. Czyta powrotne zakodowane wartości. Zobacz RTL dla zwróconych wartości.
    0x0008 0x0010 Wyświetl rejestr adresów bufora Zapisuje do tego rejestru ustawienie wskaźnika adresu bufora wyświetlania. Wskaźnik adresu bufora wyświetlającego wskazuje na lokalizację w pamięci bufora wyświetlacza, która zostanie zmodyfikowana, gdy wartość piksela zostanie zapisana w rejestrze danych bufora wyświetlacza. Zobacz sekcję bufora wyświetlania tego dokumentu, aby rozmieścić piksele w pamięci.
    0x0009 0x0012 Wyświetl rejestr danych bufora Zapisanie wartości piksela do tego rejestru powoduje zapisanie wartości piksela w buforze wyświetlania pod adresem wskazywanym przez wskaźnik adresu bufora wyświetlania. Po każdym zapisie wskaźnik adresu bufora wyświetleń jest zwiększany o jeden, aby wskazać następny piksel w buforze wyświetlania.
    0x000a 0x0014 Display Buffer Wybierz Register 0 wybiera bufor 0 do wyświetlenia; 1 wybiera bufor 1 do wyświetlenia; Czyta zwrot, który bufor jest aktualnie wyświetlany.

    Tabela 1. Rejestry FPGA.

    Wyświetlaj bufory

    Bufory wyświetlania są zaimplementowane w pamięci Xininx Block RAMs, skonfigurowanych jako pamięci dwuportowe z asynchronicznymi portami odczytu i zapisu. Pierwsza pamięć RAM zawiera bufory wyświetlania 0 i 1 dla górnej połowy ekranu. Druga pamięć RAM zawiera bufory wyświetlania 0 i 1 dla dolnej połowy ekranu. Strukturyzacja pamięci tak, aby zawierała połowę ekranu, umożliwia odczytywanie pikseli z rzędów od 0 do 15 z pamięci na tym samym zegarze, w którym piksele w wierszach od 16 do 31 są odczytywane z pamięci.

    Bufor wyświetlacza 0 znajduje się pod adresem 0x0000. Bufor wyświetlacza 1 znajduje się pod adresem 0x0400. Każdy bufor wyświetlania zawiera 1024 12-bitowe wartości RGB ułożone w 32 wiersze z 32 kolumnami. Wewnątrz każdego bufora wyświetlania lewy górny piksel jest przechowywany z przesunięciem 0, a dolny prawy piksel jest zapisywany z przesunięciem 0x3ff. Bity od 4 do 0 przesunięcia pikseli to 0x00 dla pikseli w skrajnie lewej kolumnie na wyświetlaczu; bity od 4 do 0 przesunięcia piksela to 0x1F dla pikseli w skrajnej prawej kolumnie.

    Piksele są przechowywane w pamięci jako 12-bitowe wartości RGB. Wartości te są przechowywane z justizacją prawą. Bity od 11 do 8 to poziom czerwonego piksela, bity od 7 do 4 to poziom zielony, a bity od 3 do 0 to poziom niebieski.

    Sterownik ekranu

    Sterownik wyświetlacza odczytuje wartości pikselowi z pamięci, przesuwa te wartości na wyświetlacz i cyklicznie przechodzi przez rzędy wyświetlacza zgodnie z wymaganiami, aby zaimplementować kodowanie kodowane binarnie, jak opisano w sekcji teorii działania tego dokumentu. Sterownik ekranu jest zaimplementowany jako automat stanów. Każdy stan implementuje krok w procesie odświeżania. Po zakończeniu tego kroku automat stanowy przechodzi do następnego etapu procesu.

    Rysunek 9 poniżej pokazuje przebiegi symulacji dla danych wyjściowych sterowania i danych dla trzech wierszy o wartości wyświetlanych danych. Podstawowym procesem jest wygaszenie ekranu, zatrzaśnięcie w uprzednio przesuniętych danych, aktualizacja wyboru wierszy, odblokowanie wyświetlania, przesunięcie w następnym zbiorze danych pikseli, a następnie oczekiwanie na wygaśnięcie licznika aktualizacji. Powtarza się to cztery razy dla każdego rzędu. Jeśli przyjrzysz się wyjściowi wygaszania, zauważysz, że jego niski okres podwaja się trzykrotnie w okresie wyjściowym dla każdego wiersza wyświetlania. Jest to wynikiem użycia kodowania binarnego w celu zmiany intensywności każdego piksela.

    Rysunek 9. Symulacyjne przebiegi dla połączeń wyświetlania danych wyjściowych.

    Oprogramowanie

    Oprogramowanie demonstracyjne używa urządzenia / dev / logibone_mem do komunikacji z układem FPGA. Sterownik tego urządzenia jest częścią zapasowego obrazu LogiBone Ubuntu, a jego ładowalny moduł jądra jest instalowany przez zmodyfikowany skrypt powłoki instalacji urządzenia, który jest zawarty w repozytorium GitHub dla panelu LED. (Więcej na ten temat w dalszej części). Ten sterownik mapuje rejestry w FPGA na część przestrzeni adresowej procesora BBB za pomocą GPMC. GPMC normalnie mapuje pamięć do przestrzeni adresowej procesora. Ponieważ nasza FPGA przypomina pamięć do magistrali GPMC, jej rejestry mogą być mapowane również w przestrzeni adresowej procesora. Całkiem fajne. Bez SPI, I2C itp .; tylko szybki równoległy dostęp pomiędzy procesorem a układem FPGA. Dostęp do tej przestrzeni odwzorowanej w pamięci można uzyskać, otwierając urządzenie / dev / logbone_mem przy użyciu funkcji otwartej biblioteki biblioteki C, a odczyty i zapisy do rejestru w układzie FPGA można wykonywać przy użyciu wywołań funkcji biblioteki pread i pwrite C.

    Rysunek 10 poniżej przedstawia schemat blokowy stosu oprogramowania demonstracyjnego. W oprogramowaniu demonstracyjnym, główna otwiera urządzenie / dev / logibone_mem, wypełnia globalną pamięć bufora, gLevels , wszystkimi czarnymi, a następnie wywołuje WriteLevels, aby zapisać globalny bufor na wyświetlaczu i wyczyścić wyświetlacz. Po wyczyszczeniu wyświetlacza główna funkcja tworzy instancję wzorcową / animacyjną, taką jak promieniujący okrąg, szum perlina lub podklasa koloru płukania. Ta podklasa pochodzi od ogólnej podstawowej klasy wzorca.

    Ogólna klasa podstawowa wzorca używa konstruktora do ustawienia wysokości i szerokości wzoru do wygenerowania. Klasy pochodne mogą dodawać własne argumenty do swoich własnych konstruktorów. Klasa podstawowa ma również dwie funkcje czystego wirtualnego elementu, init i następne , które muszą zostać zaimplementowane przez dowolne klasy pochodne. Funkcja init przygotowuje wzór, który będzie wyświetlany po raz pierwszy. Zwykle resetuje wszelkie informacje o stanie z powrotem do początku wzorca. Następna funkcja oblicza następną ramkę wzoru i zapisuje tę ramkę do globalnego bufora gLevels .

    Po tym, jak główny instancjonuje podklasę wzorca, wywołuje funkcję init podklasy. Główny następnie instaluje zegar, który wykonuje się z częstotliwością 50 Hz i idzie spać. Kiedy upłynie czas, wywoływana jest funkcja przekaźnika czasowego. Funkcja programatora czasowego wywołuje WriteLevels, aby zapisać wcześniej obliczoną ramkę w gLevels do następnego dostępnego bufora wyświetlania w FPGA i aktywuje ten bufor wyświetlania. Zapisy do buforów wyświetlania FPGA są wykonywane przy użyciu rejestrów udokumentowanych w sekcji rejestrowania interfejsu tego dokumentu.

    Po zakończeniu funkcji WriteLevels funkcja programu obsługi zegara wywołuje następną funkcję elementu wzorca. Następna funkcja generuje następną klatkę animacji, zapisuje ją do gLevels i zwraca - bez wywoływania WriteLevels. Program obsługi zegara następnie śpi, aż do następnego wygaśnięcia licznika czasu. Wywołanie WriteLevels przed następnym wywołaniem, czas pomiędzy wyświetlanymi ramkami nie będzie się różnił, nawet jeśli ilość czasu, który trzeba wykonać, aby wykonać, zależy od ramek.

    Aby animacje działały płynnie, funkcja timera musi zakończyć wykonywanie zanim upłynie czas następnego timera. Oznacza to, że każda klatka animacji musi obliczyć mniej niż około 20 ms.

    Rysunek 10. Schemat blokowy stosu oprogramowania demonstracyjnego.

    Podłączanie sprzętu

    Wyświetlacz wymaga jedynie połączenia transmisji danych z płytą FPGA LogiBone i podłączenia zasilania do źródła zasilania o napięciu 3,3V. Połączenia te zostały szczegółowo opisane w poniższych sekcjach.

    Wyświetl połączenia danych

    Rysunek 11 poniżej przedstawia połączenia między złączami PMOD i złączem wejściowym danych wyświetlacza. Konieczne będzie wykonanie 16 połączeń między płytą LogiBone a panelem wyświetlacza. Trzynaście z nich to połączenia danych; trzy z nich są podstawą. Można użyć przewodów połączeniowych lub karty adaptera PMOD do wyświetlenia. Jeśli użyjesz przewodów połączeniowych, okaże się, że okablowanie wygląda jak na Rysunku 12. Z kartą adaptera będzie wyglądać jak na Rys. 13. Zwróć uwagę, że styki wtyków PMOD są ponumerowane inaczej, niż nagłówki dwurzędowe są zwykle ponumerowane.

    Rysunek 11. Wysuwanie złącza PMOD, połączenia między złączami PMOD i wejściowym złączem wyświetlacza oraz wyjście złącza wyświetlacza.

    Rysunek 12. Płytka LogiBone FPGA podłączona do panelu LED RGB za pomocą przewodów połączeniowych.

    Rysunek 13. Płytka LogiBone FPGA podłączona do panelu LED RGB za pomocą karty adaptera PMOD do wyświetlenia.

    Wyświetl połączenie zasilania

    Po podłączeniu sygnałów danych, podłącz zasilanie do wyświetlacza. Rysunek 14 poniżej pokazuje podstawy. Korzystając z adaptera DC barrel barrel, podłącz dodatni zacisk zasilacza do czerwonego przewodu wiązki przewodów i podłącz ujemny zacisk zasilacza do czarnego przewodu wiązki przewodów. Przed podłączeniem wiązki przewodów do wyświetlacza należy użyć woltomierza, aby sprawdzić polaryzację połączeń. Po sprawdzeniu polaryzacji należy odłączyć zasilanie i podłączyć wiązkę przewodów do wyświetlacza.

    Zostawiłem łopaty na wiązce przewodów, ponieważ planuję użyć wyświetlacza w większym projekcie i nie chcę ich usuwać, dopóki nie będę pewny, że nie będę ich potrzebował w większym projekcie. Jeśli zostawisz również łapki, uważaj, aby przypadkowo nie zwiesić ich do żadnej innej elektroniki. Jeśli chcesz, możesz chcieć owinąć je taśmą elektryczną. Jeśli nie potrzebujesz lub nie chcesz, aby złącza szpadowe, możesz je odciąć, usunąć kawałek izolacji z przewodów i podłączyć je bezpośrednio do adaptera gniazda DC.

    Rysunek 14. Podłączenie zasilania do panelu LED RGB za pomocą żeńskiego adaptera gniazda DC.

    Szczegóły kontaktu
    Leeman Display Technology Limited

    Osoba kontaktowa: Leeman

    Wyślij zapytanie bezpośrednio do nas (0 / 3000)

    Inne produkty