Spisu treści:

64-pikselowy wyświetlacz LED RGB - kolejny klon Arduino: 12 kroków (ze zdjęciami)
64-pikselowy wyświetlacz LED RGB - kolejny klon Arduino: 12 kroków (ze zdjęciami)

Wideo: 64-pikselowy wyświetlacz LED RGB - kolejny klon Arduino: 12 kroków (ze zdjęciami)

Wideo: 64-pikselowy wyświetlacz LED RGB - kolejny klon Arduino: 12 kroków (ze zdjęciami)
Wideo: Oczekiwania na 2024 - Gralogi Podcast #020 (polskie napisy / english subs) 2024, Listopad
Anonim
64-pikselowy wyświetlacz LED RGB - kolejny klon Arduino
64-pikselowy wyświetlacz LED RGB - kolejny klon Arduino
64-pikselowy wyświetlacz LED RGB - kolejny klon Arduino
64-pikselowy wyświetlacz LED RGB - kolejny klon Arduino
64-pikselowy wyświetlacz LED RGB - kolejny klon Arduino
64-pikselowy wyświetlacz LED RGB - kolejny klon Arduino

Ten wyświetlacz jest oparty na matrycy LED 8x8 RGB. W celach testowych podłączono go do standardowej płytki Arduino (Diecimila) za pomocą 4 rejestrów przesuwnych. Po zdobyciu go do pracy permatyzowałem go na wymyślonej płytce drukowanej. Rejestry przesuwne mają szerokość 8 bitów i są łatwo połączone z protokołem SPI. Modulacja szerokości impulsu służy do mieszania kolorów, o czym później. Część pamięci RAM MCU jest używana jako bufor ramki do przechowywania obrazu. Pamięć RAM wideo jest analizowana przez procedurę przerwań w tle, dzięki czemu użytkownik może wykonywać inne przydatne czynności, takie jak rozmowa z komputerem, odczytywanie przycisków i potencjometrów. Więcej informacji o "Arduino": www.arduino.cc

Krok 1: Modulacja szerokości impulsu do mieszania kolorów

Modulacja szerokości impulsu do mieszania kolorów
Modulacja szerokości impulsu do mieszania kolorów

Modu szerokości impulsu - CO? Modulacja szerokości impulsu zasadniczo włącza i wyłącza zasilanie urządzenia elektrycznego. Moc użyteczna wynika z matematycznej średniej funkcji fali prostokątnej z przedziału jednego okresu. Im dłużej funkcja pozostaje w pozycji ON, tym więcej mocy otrzymujesz. PWM ma taki sam wpływ na jasność diod LED, jak ściemniacz na światłach AC. Zadaniem przed nami jest indywidualne sterowanie jasnością 64 diod RGB (=192 pojedyncze diody!) w tani i łatwy sposób, aby można było uzyskać całość spektrum kolorów. Najlepiej, aby nie występowało migotanie ani inne niepokojące efekty. Nieliniowe postrzeganie jasności oka ludzkiego nie będzie tutaj brane pod uwagę (np. różnica między 10% a 20% jasności wydaje się „większa” niż między 90% a 100%). Obraz (1) ilustruje zasadę działania algorytm PWM. Powiedzmy, że kod ma wartość 7 dla jasności LED (0, 0). Ponadto wie, że jasność ma maksymalnie N kroków. Kod uruchamia N pętli dla wszystkich możliwych poziomów jasności i wszystkich niezbędnych pętli do obsługi każdej diody LED we wszystkich rzędach. W przypadku, gdy licznik pętli x w pętli jasności jest mniejszy niż 7, dioda LED jest włączona. Jeśli jest większy niż 7, dioda jest wyłączona. Robiąc to bardzo szybko dla wszystkich diod LED, poziomów jasności i kolorów bazowych (RGB), każda dioda LED może być indywidualnie dostosowana, aby pokazywać żądany kolor. Pomiary oscyloskopem wykazały, że kod odświeżania wyświetlacza zajmuje około 50% czasu procesora. Resztę można wykorzystać do komunikacji szeregowej z komputerem PC, odczytu przycisków, rozmowy z czytnikiem RFID, wysłania I2C dane do innych modułów…

Krok 2: Rozmowa z rejestrami przesuwnymi i diodami LED

Rozmowa z rejestrami przesuwnymi i diodami LED
Rozmowa z rejestrami przesuwnymi i diodami LED
Rozmowa z rejestrami przesuwnymi i diodami LED
Rozmowa z rejestrami przesuwnymi i diodami LED

Rejestr przesuwny to urządzenie umożliwiające szeregowe ładowanie danych oraz wyjście równoległe. Odwrotna operacja jest również możliwa z odpowiednim układem. Na stronie arduino dostępny jest dobry samouczek dotyczący rejestrów przesuwnych. Diody LED są sterowane 8-bitowymi rejestrami przesuwnymi typu 74HC595. Każdy port może pobierać lub pobierać około 25mA prądu. Całkowity prąd pobierany lub pobierany na chip nie powinien przekraczać 70mA. Te żetony są bardzo tanie, więc nie płacisz więcej niż około 40 centów za sztukę. Ponieważ diody LED mają wykładniczą charakterystykę prądowo-napięciową, potrzebne są rezystory ograniczające prąd. Zgodnie z prawem Ohma: R = (V - Vf) / IR = rezystor ograniczający, V = 5 V, Vf = napięcie przewodzenia diody LED, I = żądany prądCzerwone diody LED mają napięcie przewodzenia około 1,8 V, niebieski i zielony zakres od 2,5 V do 3,5 V. Aby to ustalić, użyj prostego multimetru. Dla prawidłowego odwzorowania kolorów należy wziąć pod uwagę kilka rzeczy: czułość spektralną oka ludzkiego (czerwony/niebieski: zły, zielony: dobry), wydajność diody LED przy określonej długości fali i prądzie. W praktyce wystarczy wziąć 3 potencjometry i nastawić je, aż dioda LED pokaże właściwe białe światło. Oczywiście maksymalny prąd LED nie może zostać przekroczony. Ważne jest również to, że rejestr przesuwny napędzający rzędy musi dostarczać prąd do 3x8 diod LED, więc lepiej nie zwiększać prądu zbyt wysoko. Udało mi się ograniczyć rezystory do 270 Ohm dla wszystkich diod LED, ale to oczywiście zależy od marki matrycy LED. Rejestry przesuwne są połączone szeregowo z SPI. SPI = Serial Peripheral Interface (zdjęcie (1)). W przeciwieństwie do portów szeregowych w komputerach PC (asynchroniczne, brak sygnału zegara), SPI wymaga linii zegara (SRCLK). Następnie jest linia sygnału informująca urządzenie, kiedy dane są prawidłowe (chip select / latch / RCLK). Wreszcie istnieją dwie linie danych, jedna nazywa się MOSI (master out slave in), druga nazywa się MISO (master in slave out). SPI służy do sprzęgania układów scalonych, podobnie jak I2C. Ten projekt wymaga MOSI, SRCLK i RCLK. Dodatkowo wykorzystywana jest również linia zezwolenia (G). Cykl SPI rozpoczyna się poprzez przeciągnięcie linii RCLK do LOW (zdjęcie (2)). MCU wysyła swoje dane na linii MOSI. Jego stan logiczny jest próbkowany przez rejestr przesuwny na zboczu narastającym linii SRCLK. Cykl kończy się przeciągnięciem linii RCLK z powrotem do HIGH. Teraz dane są dostępne na wyjściach.

Krok 3: Schemat

Schematyczny
Schematyczny
Schematyczny
Schematyczny

Obraz (1) pokazuje, jak okablowane są rejestry przesuwne. Są połączone łańcuchowo, więc dane można przenosić do tego łańcucha, a także przez niego. Dlatego dodanie większej liczby rejestrów przesuwnych jest łatwe.

Rysunek (2) przedstawia resztę schematu z MCU, złączami, kwarcem… Załączony plik PDF zawiera całość prac, najlepiej do druku.

Krok 4: Kod źródłowy C++

Kod źródłowy C++
Kod źródłowy C++
Kod źródłowy C++
Kod źródłowy C++
Kod źródłowy C++
Kod źródłowy C++

W C/C++ zwykle trzeba prototypować funkcje przed ich kodowaniem.#include int main(void);void zrób_coś(void);int main(void) { zrób_coś();}void zrób_coś(void) { /* komentarz */ } Arduino IDE nie wymaga tego kroku, ponieważ prototypy funkcji są generowane automatycznie. Dlatego prototypy funkcji nie pojawią się w kodzie pokazanym tutaj. Obraz (1): setup() functionObraz (2): funkcja spi_transfer() używająca sprzętowego SPI układu ATmega168 (działa szybciej)Obraz (3): kod bufora ramki przy użyciu przerwanie przepełnienia timera1. Fragmenty kodu, które mają nieco zagadkowy wygląd dla początkujących, np. while(!(SPSR & (1<<SPIF))) {} używa bezpośrednio rejestrów MCU. Ten przykład w słowach: "podczas gdy bit SPIF w rejestrze SPSR nie jest ustawiony, nic nie rób". Chcę tylko podkreślić, że w przypadku standardowych projektów naprawdę nie jest konieczne zajmowanie się tymi rzeczami tak blisko związanymi ze sprzętem. Początkujący nie powinni się tym bać.

Krok 5: Gotowy gadżet

Gotowy gadżet
Gotowy gadżet
Gotowy gadżet
Gotowy gadżet
Gotowy gadżet
Gotowy gadżet

Po rozwiązaniu wszystkich problemów i uruchomieniu kodu musiałem po prostu stworzyć układ PCB i wysłać go do wspaniałego domu. Wygląda o wiele czyściej:-) Obraz (1): w pełni zapełniona płyta kontrolera Obraz (2): przednia strona nagiego PCBObraz (2): tylna strona Są złącza rozrywające PORTC i PORTD układu ATmega168/328 i 5V/GND. Porty te zawierają szeregowe linie RX, TX, I2Linie C, cyfrowe linie I/O i 7 linii ADC. Służy do układania tarcz na tylnej stronie planszy. Rozstaw jest odpowiedni do użycia płyty perforowanej (0,1 cala). Bootloader można flashować za pomocą nagłówka ICSP (działa z USBtinyISP firmy adafruit). Jak tylko to zrobisz, użyj standardowego adaptera szeregowego FTDI USB/TTL lub podobnego. Dodałem również zworkę z funkcją automatycznego resetowania. Przygotowałem też mały skrypt Perla (patrz mój blog), który umożliwia automatyczne resetowanie za pomocą kabli FTDI, które zwykle nie działają po wyjęciu z pudełka (linia RTS vs. DTR). To działa na Linuksie, może na MAC. Płytki drukowane i kilka zestawów DIY KIT jest dostępnych na moim blogu. Wymagane lutowanie SMD! Zobacz pliki PDF, aby uzyskać instrukcje budowania i źródła dla matryc LED.

Krok 6: Aplikacja: Monitor obciążenia procesora dla systemu Linux przy użyciu Perl

Jest to bardzo prosty monitor obciążenia z wykresem historii. Opiera się na skrypcie Perla, który zbiera „średnie obciążenia” systemu co 1 s za pomocą iostatu. Dane są przechowywane w tablicy, która jest przesuwana przy każdej aktualizacji. Nowe dane są dodawane na początku listy, najstarszy wpis zostaje wypchnięty. Bardziej szczegółowe informacje i pliki do pobrania (kod…) są dostępne na moim blogu.

Krok 7: Zastosowanie: Rozmowa z innymi modułami za pomocą I²C

Zastosowanie: rozmowa z innymi modułami za pomocą I²C
Zastosowanie: rozmowa z innymi modułami za pomocą I²C

To tylko dowód zasady i zdecydowanie nie najprostsze rozwiązanie dla tej pracy. Korzystanie z I2C pozwala na bezpośrednie adresowanie do 127 kart „slave”. Tutaj płyta po prawej stronie w filmie jest „masterem” (który inicjuje wszystkie transfery), lewa płyta to slave (oczekiwanie na dane). i2C potrzebuje 2 linii sygnałowych i zwykłych linii zasilających (+, -, SDA, SCL). Ponieważ jest to magistrala, wszystkie urządzenia są do niej podłączone równolegle.

Krok 8: Aplikacja: „Gra Cube”:-)

Podanie
Podanie

Tylko dziwna myśl. Ta pasuje również do drewnianej obudowy pokazanej na stronie wprowadzającej. Z tyłu ma 5 przycisków, które można wykorzystać do grania w prostą grę. KONIEC ?

Krok 9: Wyświetlanie obrazów/animacji w matrycy - Quick Hack

Wyświetlanie obrazów / animacji w matrycy - Quick Hack
Wyświetlanie obrazów / animacji w matrycy - Quick Hack
Wyświetlanie obrazów / animacji w matrycy - Quick Hack
Wyświetlanie obrazów / animacji w matrycy - Quick Hack
Wyświetlanie obrazów / animacji na matrycy - Quick Hack
Wyświetlanie obrazów / animacji na matrycy - Quick Hack
Wyświetlanie obrazów / animacji na matrycy - Quick Hack
Wyświetlanie obrazów / animacji na matrycy - Quick Hack

Więc ma tylko 8x8 pikseli i kilka dostępnych kolorów. Najpierw użyj czegoś takiego jak Gimp, aby przeskalować swój ulubiony obraz do dokładnie 8x8 pikseli i zapisać go jako surowy format ".ppm" (nie ASCII). PPM jest łatwy do odczytania i przetwarzania w skrypcie Perla. Używanie ImageMagick i narzędzia wiersza poleceń „convert” nie będzie działać poprawnie. Prześlij nowy kod arduino, a następnie użyj skryptu Perla, aby przesłać go do kontrolera. Migotanie to po prostu niedopasowanie odświeżania LED i szybkości klatek mojego aparatu. Po odświeżeniu kodu działa dość szybko. Wszystkie obrazy są przesyłane na żywo przez serial, tak jak je widzisz. Dłuższe animacje mogą być przechowywane w zewnętrznej pamięci EEPROM, tak jak to się dzieje w różnych tablicach szprych-pov.

Krok 10: Interaktywna kontrola przechowywanych animacji

Po co pozwalać mikrokontrolerowi na zabawę? Kult Arduino polega na fizycznym przetwarzaniu i interakcji, więc wystarczy dodać potencjometr i przejąć kontrolę! Użycie jednego z 8 wejść przetwornika analogowo-cyfrowego sprawia, że jest to bardzo proste.

Krok 11: Wyświetlanie wideo na żywo

Korzystanie ze skryptu Perla i kilku modułów sprawia, że dość łatwo jest wyświetlać quasi wideo na żywo na systemach X11. Został zakodowany w systemie Linux i może działać również na komputerach MAC. Działa to w następujący sposób: - pobierz pozycję kursora myszy - przechwyć pole piksela NxN wyśrodkowane na kursorze - przeskaluj obraz do pikseli 8x8 - wyślij go na tablicę LED - powtarzać

Krok 12: Więcej światła prawie za darmo

Więcej światła prawie za darmo
Więcej światła prawie za darmo

W zaledwie dwóch krokach jasność można znacznie zwiększyć. Wymień rezystory 270 Ω na 169 Ω i podłącz kolejny rejestr przesuwny 74HC595 na IC5.

Zalecana: