Raspberry Pi Pico Wyjście wideo
TL;DR
Raspberry Pi Pico to niesamowity mały mikrokontroler. Chociaż nie ma wbudowanego interfejsu wyjścia wideo, tak jak jego większe rodzeństwo Raspberry Pi Zero / 1 / 2 / 3 / 4 / 400 (HDMI / podwójne HDMI w ich przypadku), możliwe jest dodanie wyjścia wideo do Pico! (Jako VGA lub DVI przez złącze HDMI, czytaj dalej, aby uzyskać szczegółowe informacje)
W tym poście wyjaśnimy, dlaczego wyjście wideo jest bardzo specjalną funkcją dla mikrokontrolerów i jakie typy wyjść wideo można zbudować lub kupić dla swojego Pico. Pokażemy również przykładowy kod - już wstępnie skompilowany, więc można go pobrać bezpośrednio, a następnie porozmawiamy o tym, co należy zmodyfikować, aby go uruchomić.
Nasz siostrzany sklep, buyzero.desprzedaje różnorodne akcesoria Pico - w tym DVI Socki Płytka nośna VGA dla Pico.
Uwaga: Pico nie posiada systemu operacyjnego Linux, takiego jak Raspberry Pi Zero W na przykład. Więc najprawdopodobniej będziesz musiał nieco głębiej zagłębić się w naukę kodowania i przesyłania aplikacji do Pico. Jeśli to nie twoja sprawa, Pi Zero W może być lepszym wyborem do rozpoczęcia zabawy 🙂
Jeśli udało Ci się zrealizować własny projekt wideo z Raspberry Pi Pico, daj nam znać w komentarzach!
Dlaczego dodanie wyjścia wideo Raspberry Pi Pico jest wyzwaniem?
Raspberry Pi 400na przykład, jest oparty na BCM2711 SoC. Ten system-on-a-chip ma wyspecjalizowany sprzęt, który dba o wyjście wideo, doskonale przygotowując je w formacie określonym dla konkretnego interfejsu (interfejsów) wideo, dwóch portów HDMI w przypadku Pi 400. Posiada również ogromną pamięć (4 GB), w której można przechowywać dane wyjściowe wideo.
Aby lepiej to zrozumieć, musimy przyjrzeć się niektórym podstawom komputerowego wyjścia wideo:
Wyświetlanie i transmisja wideo
Widzimy obraz na ekranie "jednocześnie". Nasz mózg ma masowo równoległe okablowanie, w którym pobiera informacje ze wszystkich dostępnych komórek siatkówki jednocześnie (komórki stożkowe i pręcikowe).
(* mechanizm transmisji do mózgu integruje informacje z kilku komórek siatkówki, ale faktem jest, że wiele informacji jest przesyłanych równolegle. Zobacz komórki dwubiegunowe jeśli chcesz dowiedzieć się więcej)
Mózg ma jednak opóźnienia - nie jest w stanie rozstrzygnąć zmiany bodźców wzrokowych szybsze niż 13 ms. (czyli około 1 na 75 klatek na sekundę).
Dla nas oznacza to, że jeśli chcemy wyświetlić naprawdę płynną animację, musimy pokazać około 60 różnych statycznych obrazów na sekundę. Nasz mózg zinterpretuje te statyczne obrazy jako płynne i realistyczne odtwarzanie.
Zazwyczaj chcemy, aby te zdjęcia były kolorowe.
Mamy trzy różne fotoreceptory dla kolorów, więc ekran wyświetla tylko te trzy różne kolory o różnej jasności. Ponownie, nasz mózg zsyntetyzuje kolory pomiędzy nimi na podstawie otrzymanych informacji. (Na marginesie, fioletowy tak naprawdę nie istnieje jako własna długość fali - jest mieszanką czerwonego i niebieskiego).
Istnieją trzy kolory podstawowe:
- czerwony
- zielony
- niebieski
Razem znane są jako RGB. Po dodaniu wszystkich trzech otrzymujemy kolor biały. Dodanie czerwonego do zielonego daje żółty, dodanie zielonego do niebieskiego daje cyjan, dodanie niebieskiego do czerwonego daje magentę.
Więc to, co naprawdę chcemy uzyskać, to:
- trzy różne kolory,
- każdy z inną wartością jasności
- Idealnie około 60 różnych wartości na sekundę (60 Hz)
- określona rozdzielczość ekranu - np. 640 x 480
Obliczmy, ile danych przypada na sekundę:
- 3 kolory
- x 8-bitowa głębia kolorów
- x 60
- x 640 x 480
= 442 368 000 bitów na sekundę = ok. 422 MBit/s
(Weźmy pod uwagę, że na przykład interfejs USB v1.1 w Pico ma około 10 Mbit/s - około 40 razy mniejszą przepustowość!)
Aby wyprowadzić te informacje, idealnie byłoby również przechowywać je jako bitmapę w pamięci RAM - jedna część aplikacji zaktualizuje obraz w pamięci RAM, podczas gdy inna zajmie się dostarczeniem danych w formacie, z którym może pracować monitor. Musi to być pamięć RAM, ponieważ działamy z dużymi prędkościami i musimy być w stanie odczytać to niezawodnie z małymi opóźnieniami - czego nie zapewni pamięć Flash.
Obliczmy, ile pamięci RAM potrzebujemy:
- 640 x 480 (rozdzielczość)
- x 3 (kolory)
- x 8 bitów (głębia kolorów)
= 7372800 bitów = 900 kBajtów (uwaga: 1 bajt = 8 bitów)
Podczas gdy 900 kBajtów zmieści się wielokrotnie w pamięci RAM komputera Raspberry Pi 400, Pico ma tylko 264 KB pamięci RAM.
Jak widać, będziemy musieli zmniejszyć niektóre parametry (np. rozdzielczość, głębię kolorów, ...), jeśli chcemy zmieścić bitmapę w pamięci RAM, lub musimy wymyślić kilka sprytnych pomysłów, jak sprawić, by działała bez przechowywania wszystkiego!
RP2040 PIO firmy Pico umożliwia wyprowadzanie danych wideo
Wreszcie, podczas gdy Raspberry Pi 400 i inne modele Raspberry Pi mają dedykowane obwody sprzętowe do przetwarzania wszystkich tych informacji i przesyłania ich w niezawodny sposób, Pico nie ma specjalnych obwodów dedykowanych tylko do wyjścia wideo.
Ale ma jedną sztuczkę w rękawie! RP2040 obsługuje PIO (programowalne IO). PIO jest dedykowany do emulacji różnych interfejsów z precyzyjnym taktowaniem i jest bardzo potężny! Może być zaprogramowany do odczytu z pamięci RAM i wyjścia z dużą prędkością.
Będziemy używać PIO do wysyłania sygnału wideo do niektórych pinów GPIO i użyjemy dodatkowych obwodów (rezystorów), aby doprowadzić sygnał do pożądanego stanu, w zależności od interfejsu wyjścia wideo, do którego chcemy podłączyć Pico.
Historia formatów wyjściowych wideo
Zanim przejdziemy do tego, jak dodać wyjście wideo do Raspberry Pi Pico, przyjrzyjmy się trochę historii formatów wyjściowych wideo.
Jak już wspomniano, ludzkie oko nie jest w stanie wykryć zmian w obrazach szybciej niż około 13 ms. Dlatego też jednym z pierwszych podejść do budowy monitorów komputerowych było CRT (kineskop) monitor.
Kineskop ma trzy wyrzutnie promieni, które omiatają piksel po pikselu, linia po linii. (a następnie potrzebują trochę czasu, aby powrócić do punktu początkowego). Ekran ma kolorowe luminofory, które będą emitować światło przez pewien czas po przejściu przez nie promienia. Przy kolejnym przeciągnięciu promienia nad tym konkretnym pikselem intensywność promienia może się zmienić, co zobaczymy jako ciemniejszy piksel. Nasz mózg łączy sąsiednie kolorowe piksele luminoforu w jeden piksel i nie jest w stanie zauważyć zmian jasności między kolejnymi przeciągnięciami promienia.
W ten sposób powstaje iluzja ruchomego obrazu.
W efekcie nie muszą mieć wszystkich danych obecnych na początku obrazu - ale tylko bieżąca wartość jasności piksela. Intensywność promienia zostanie odpowiednio zmodyfikowana. Możemy użyć do tego sygnału analogowego - na przykład zwiększenie napięcia zwiększy jasność.
Potrzebujemy trzech różnych przewodów dla różnych kolorów (aby napędzać każdy pistolet promieniowy indywidualnie) i musimy mieć sposób, aby poinformować monitor, kiedy należy rozpocząć nową linię i kiedy należy rozpocząć nowy obraz (gdy wszystkie linie zostały wyświetlone).
VGA (matryca graficzna wideo)
VGA zostało zaprojektowane z myślą o monitorach CRT. Nadal jest dość powszechne jako wejście w monitorach, mimo że staje się coraz bardziej przestarzałe w miarę przechodzenia na całkowicie cyfrową transmisję (więcej na ten temat później).
Jest to również najłatwiejszy standard wyjścia wideo do uruchomienia na Pico.
Obok specyfikacji (z domyślnymi trybami rozdzielczości) określono złącze, złącze VGA:
Posiada 15 pinów:
- RED (czerwone wideo)
- GREEN (zielone wideo)
- BLUE (niebieskie wideo)
- ID2/RES (zarezerwowane)
- GND (Uziemienie HSync)
- RED_RTN (czerwony powrót, masa analogowa dla czerwonego)
- GREEN_RTN (zielony powrót, masa analogowa dla koloru zielonego)
- BLUE_RTN (niebieski powrót, masa analogowa dla niebieskiego)
- KEY/PWR (+5 V DC zasila układ EDID EEPROM w niektórych monitorach)
- GND (Uziemienie VSync, DDC)
- ID0/RES (zarezerwowane)
- ID1/SDA (dane I2C od DDC2)
- HSync (synchronizacja pozioma)
- VSync (synchronizacja pionowa)
- ID3/SCL (zegar I2C od DDC2)
Uwaga: Kable VGA mogą obsługiwać różne rozdzielczości, głębie kolorów i częstotliwości odświeżania, podczas gdy słowo "VGA" w odniesieniu do rozdzielczości zwykle oznacza 640 x 480.
Jak widać, istnieją trzy przewody przenoszące dane obrazu, po jednym dla każdego koloru. Sygnał jest przesyłany ze szczytowym (maksymalnym) napięciem 0,7 V. Sygnały przesyłane dla kolorów mają charakter analogowy - wyższe napięcia zwiększają jasność, napięcie 0 oznacza, że piksel jest ciemny / wyłączony.
Sprawianie, by wyjście VGA działało na Pico
Oznacza to, że Pico z wyjściem cyfrowym 3,3 V ma wystarczająco wysokie napięcie, aby móc podłączyć te piny RGB do kabla VGA (który oczekuje napięcia 0 - 0,7 V). W rzeczywistości musimy zmniejszyć napięcie za pomocą rezystorów.
Możemy zbudować prosty DAC (przetwornik cyfrowo-analogowy), łącząc kilka rezystorów i pinów GPIO. W zależności od kombinacji pinów GPIO, które są aktywne w danym momencie, mamy różne poziomy napięcia (= poziomy jasności):
Jak widać na powyższym obrazku, pięć GPIO (0 -4) steruje jednym kanałem (w tym przypadku czerwonym), co daje nam pięciobitową głębię. Rezystory są ważone 1:2:4:8:16, na przykład najmniej znaczący bit (LSB) koloru czerwonego ma rezystor 8,06K.
Próbując zbudować ten obwód, powinieneś wybrać 1 rezystor tolerancji % aby uzyskać dobry obraz.
Więcej informacji można znaleźć w "Konstrukcja sprzętowa z RP2040", aby zrozumieć, w jaki sposób obliczono wartości rezystorów. Krótko mówiąc, jeśli wysterujemy wszystkie naraz, uzyskamy napięcie 0,74 V, które jest w porządku dla naszych celów.
Mówiąc dokładniej, ten projekt referencyjny sugeruje obsługę powszechnie używanego 16-bitowego formatu danych RGB (RGB-565), który wykorzystuje 5 bitów dla koloru czerwonego i niebieskiego oraz 6 dla zielonego. Możemy zmniejszyć rzeczywiste fizyczne wyjście do zielonego do 5 pinów GPIO, tak jak w przypadku innych kolorów, aby zaoszczędzić jeden pin.
Oprócz tego potrzebne są jeszcze 2 piny do poziomego i pionowego wygaszania (HSYNC i VSYNC)
Daje nam to w sumie 17 pinów GPIO do sterowania wyjściem VGA. Na szczęście Pico ma 26 dostępnych pinów GPIO, co pozwala nam na wysterowanie wyjścia VGA.
Jak wspomniano wcześniej, Pico jest również w stanie sterować tymi pinami z wymaganą częstotliwością i precyzyjnym taktowaniem, dzięki funkcji RP2040 PIO (programowalne wejścia/wyjścia).
Sprzętowe wyjście wideo Raspberry Pi Pico VGA
Raspberry Pi zaprojektowało i udostępniło płytkę nośną dla Pico, która prezentuje różne funkcje:
- Wyjście VGA
- przyciski
- Gniazdo microSD
- wyjścia audio (analogowe PWM, cyfrowe I2S)
Zakup karty Pico VGA / Audio / microSD
My (buyzero.de) są obecnie w trakcie budowy i montażu tej referencyjnej płytki projektowej. Skontaktuj się z nami, jeśli chcesz zostać powiadomiony, gdy płyta będzie mogła zostać zakupiona!
Strona Płytka Pico VGA jest już dostępna w sprzedaży, początkowy stan magazynowy jest ograniczony!
W międzyczasie Pimoroni stworzyło również wersję tej tablicy, którą nazywają Pimoroni Pico VGA Demo Base.
Uwaga dodatkowa: każdy z 15 pinów wyjściowych rgb nadal będzie musiał być wysterowany z prędkością około 17,58 Mbit/s, co nadal jest imponującą - ale znacznie łatwiejszą do opanowania liczbą!
Oprogramowanie wymagane do sterowania wyjściem VGA
Ponieważ pracujemy na Pico, nie ma "sterowników graficznych", które możemy po prostu zainstalować. Musimy sami napisać kod... lub nie 🙂
Na szczęście ludzie, którzy zaprojektowali dla nas płytkę sprzętową, dostarczyli już kod, którego możemy użyć, dzięki czemu możemy skupić się na naszym projekcie.
Przykładowy kod można znaleźć w repozytorium pico-playground:
W tym repozytorium znajduje się prosty odtwarzacz filmów o nazwie popcorn (która odtwarza filmy w niestandardowym formacie). A Big Buck Bunny o rozmiarze 1,6 GB można pobrać tutaj. Należy pamiętać, że są to nieprzetworzone obrazy dysków do zapisania na karcie SD - w tym przykładzie założono, że masz płytę demonstracyjną VGA, która ma gniazdo SD. Instrukcje dla konwertowanie filmów są również podane.
Kod używa pico_scanvideo (pico/scanvideo.h) z biblioteki pico_extras repozytorium. Zajrzyj również do tego repozytorium, aby zapoznać się z przykładowym kodem audio!
- pico_scanvideo - zawiera obszerną dokumentację!
API wyprowadza równoległe dane RGB i sygnał synchronizacji na pinach dla DPI VGA (przy użyciu rezystorowych przetworników cyfrowo-analogowych, jak opisano powyżej).
Zgrabna uwaga:
- Domyślny program PIO scanline akceptuje dane o zakodowanej długości przebiegu - oznacza to, że można zaoszczędzić pamięć RAM w celu wygenerowania płaskich obszarów kolorów (mam tu na myśli gry!).
Ogólnie rzecz biorąc, powinieneś używać biblioteka pico_scanvideo zamiast tworzyć kod wyjścia VGA od zera 🙂
dobre praktyki kodowania
Więcej wersji demonstracyjnych
Sprawdź katalog scanvideo repozytorium pico-playground:
- mandelbrotgenerator mandelbrota używający bufora ramki 320x240x16
- sprite_demo: odbijające się głowy Ebena (wideo na górze naszej strony!)
- test_pattern: Wyświetlanie pasków kolorów
Korzystanie z karty VGA
Podczas kompilacji należy przekazać dodatkowy parametr do CMake:
-DPICO_BOARD=vgaboard
TBD: Dodanie przewodników krok po kroku
DVI: Cyfrowy interfejs wizualny
Technologia idzie naprzód. Życie idzie naprzód. Kineskopy stają się coraz bardziej przestarzałe, wypierane przez bardziej nowoczesne płaskie ekrany z cyfrowymi interfejsami. Żadnych ruchomych wiązek, tylko piksele.
Przez pewien czas sygnały nadal były analogowe - ale nie jest to zbyt pożądane, ponieważ musimy wziąć coś cyfrowego, przekształcić to w coś analogowego, a następnie ponownie przekształcić w coś cyfrowego. Obraz będzie mniej precyzyjny, a my mamy dodatkowe obwody, z których moglibyśmy zrezygnować.
Pojawiło się DVI. Sprytnie oferował on również opcję przesyłania sygnałów analogowych, dzięki czemu można było zbudować proste adaptery / kable DVI do VGA. Oczywiście karta graficzna musiała wysyłać zarówno dane analogowe, jak i cyfrowe. Pomogło to jednak w zaakceptowaniu standardu i jego rozpowszechnieniu.
Interesują nas tutaj sygnały cyfrowe (DVI-D), ponieważ chcielibyśmy bit-bangować je z Raspberry Pi Pico.
W przypadku DVI-D dane obrazu są przesyłane w sposób szeregowy.
"Pojedyncze łącze" (najbardziej podstawowe) połączenie DVI składa się z cztery tzw. łącza TMDS (transition minimized differential signaling):
- czerwony
- zielony
- niebieski
- zegar pikselowy
Sygnalizacja różnicowa jest stosowana w celu zminimalizowania zakłóceń (ponieważ
Mamy w sumie 24 bity na piksel (8 bitów x 3 kolory) i kodujemy dane przy użyciu kodowania 8b10b (8 bitów jest mapowanych na 10-bitowe symbole na rzeczywistej linii fizycznej, aby osiągnąć między innymi równowagę DC).
DVI traktuje piksele podobnie do VGA: wszystko jest ponownie przesyłane za każdym razem, gdy obraz "zaczyna się" ponownie, a dane są precyzyjnie taktowane. Przypomina to linię telefoniczną, gdzie linia jest stale używana, gdy dwie osoby rozmawiają.
Uwaga: w przeciwieństwie do tego, DisplayPort traktuje dane jako pakiety - która ma wiele zalet.
W przeciwieństwie do przykładu VGA omówionego powyżej, ponieważ dane są przesyłane cyfrowo, zamiast analogowych wartości jasności, oznacza to znacznie większą ilość danych.
Luke Wren, inżynier z Raspberry Pi, uważał, że RP2040 (serce Pico) będzie również w stanie sterować wyjściem DVI, ponownie używając PIO.
Rezultatem jest Repozytorium PicoDVI i projekty oraz Skarpeta Pico DVI.
Luke Wren obliczył, że około Dane szeregowe 252 Mb/s musi być sterowany przez cyfrowe pady GPIO - szeregowe różnicowe, które są emulowane przez dwa pady single-ended.
Powyżej widać obwód używany do sterowania wyjściem DVI (przy użyciu złącza HDMI, więcej na ten temat poniżej) - jest ich po prostu kilka 270 Ohm rezystory.
Luke Wren posunął się nawet dalej i dodał podwójne wyjście DVI do swojego układu PicoDVI za pomocą wtyczki:
HDMI: kompatybilne w dół z DVI
HDMI to następna ewolucja złączy (i konkurencja dla DisplayPort). Jest w pełni kompatybilny w dół z cyfrowymi sygnałami DVI - dzięki temu można mieć proste, czysto pasywne konwertery DVI / HDMI.
Skarpeta Pico DVI
Pico DVI Sock to proste i tanie rozwiązanie umożliwiające dodanie cyfrowego wyjścia wideo do komputera Pi. Została zaprojektowana przez Luke'a Wrena (patrz opis powyżej). Jest to wyjście DVI ze złączem HDMI. Ponieważ HDMI jest kompatybilne w dół z DVI, można użyć kabla HDMI do podłączenia Pico do wyświetlaczy HDMI:
Programowanie gniazda Pico DVI Sock
TL;DR
Możesz pobrać nasze picodvi-test.zip i rozpocząć zabawę z przykładowymi kompilacjami .UF2. Zawiera również plik PDF, który zawiera przewodnik krok po kroku.
Przykłady kodu
Luke Wren zapewnia przykłady kodu w jego repozytorium. Aby jednak używać ich z Pico DVI Sock, należy ustawić prawidłową konfigurację. W tym mini-poradniku pokażemy, jak to zrobić.
Wymagania wstępne instalacji
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
Sklonuj repozytorium PicoDVI od Luke'a Wrena:
cd ~
mkdir pico
cd pico
git clone https://github.com/raspberrypi/pico-sdk
cd pico-sdk
git submodule update --init
cd ~/pico
git clone https://github.com/Wren6991/PicoDVI.git
Aby użyć przykładów kodu z Pico DVI Sock, należy ustawić opcję Prawidłowa konfiguracja pinów do użycia. Dodaj następującą linię do common_dvi_pin_configs.h po prostu przed pierwszy #ifndef
#define DEFAULT_DVI_SERIAL_CONFIG pico_sock_cfg
Tworzenie przykładów
cd PicoDVI/software/
mkdir build
cd build
export PICO_SDK_PATH=~/pico/pico-sdk
make -j$(nproc)
Zainstaluj przykłady na Pico
Zbudowane przykłady będą znajdować się w folderze software/build/apps.
Naciśnij i przytrzymaj przycisk BOOTSEL na Pico, a następnie podłącz płytkę do komputera za pomocą złącza microUSB. Skopiuj i wklej odpowiedni plik .uf2, który chcesz wypróbować - np. sprite_bounce.uf2 - do Pico.
Pico automatycznie uruchomi się ponownie i powinieneś być w stanie zobaczyć wyjście na złączu HDMI (pamiętaj, że tak naprawdę jest to DVI :-)).
Pobierz
Możesz pobrać nasze picodvi-test.zip i rozpocząć zabawę z przykładowymi kompilacjami .UF2. Zawiera również plik PDF, który zawiera przewodnik krok po kroku. Jeśli sprite_bounce.uf2 przykład nie działa, wypróbuj inny monitor - prawdopodobnie nie wszystkie monitory są kompatybilne z tym wyjściem wideo.
Jeśli udało Ci się dotrzeć tak daleko, daj nam znać w komentarzach, jak Ci się to udało i jakie pomysły na projekty wpadły Ci do głowy!
Zakup skarpety Pico DVI Sock
Nasza siostrzana strona, buyzero.de, oferuje następujące produkty Skarpeta Pico DVI w dwóch wariantach:
- Tylko gniazdo DVI Pico (do samodzielnego lutowania) @ 6,58 € obecnie
- Pico DVI Sock na Pico, z wstępnie przylutowanymi nagłówkami 17,89 € obecnie
Uwaga: wyświetlacze DBI i DSI
Na marginesie, repozytorium Raspberry Pi Pico Extras zawiera symbole zastępcze dla DBI (16-bitowe wyświetlacze MIPI DBI - z danymi przekazywanymi równolegle) i DSI (szeregowe wyświetlacze MIPI), więc być może w przyszłości zobaczymy również wsparcie dla tych wyświetlaczy.
Jakiś przykład wyjścia kompozytowego z genlockiem?
Myślę, że wyjście kompozytowe powinno być możliwe, ale nie widziałem jeszcze nic na ten temat.
Jako alternatywę dla scanvideo, zaimplementowałem inną bibliotekę VGA/TV dla Raspberry Pico - 'PicoVGA', która moim zdaniem jest łatwiejsza w użyciu: http://www.breatharian.eu/hw/picovga/index_en.html
Dziękujemy za udostępnienie informacji o bibliotece!
Hej, czy ten HDMI może być używany jako INPUT i przetwarzać dane.
sposób, w jaki jest zaprogramowany, a ponieważ rezystory działają w celu ograniczenia sygnału wyjściowego Raspberry Pi - nie.
Możliwe, że można by użyć adaptacji projektu, z czymś, co zwiększa poziom sygnału zamiast go obniżać / i oczywiście dostosowanym kodem, aby wyjścia działały jako wejścia, aby móc przetwarzać dane wideo wewnątrz Pico.
Kilka praktycznych wskazówek. Ze względu na loterię krzemową, konkretna jednostka może nie podkręcać proporcjonalnie procesora graficznego i części procesora. Jeśli więc nie potrzebujesz szybszej grafiki, nie podkręcaj GPU. Zwiększa to szansę na wyższe podkręcenie i stabilny system. Również niższy pobór mocy i mniejszy prąd zasilania oznacza lepszą stabilność. Raspberry Pis z 4 rdzeniami CPU może uderzyć w ścianę dostarczania energii, gdy wszystkie 4 rdzenie są aktywne. Zintegrowany układ PMIC (układ zarządzania energią) może nie dostarczać wymaganego prądu dla wszystkich rdzeni i wyłączyć się na krótki czas, powodując ponowne uruchomienie Pi. Należy również chłodzić PMIC. Nie przesadzaj z maksymalnym napięciem, jeśli potrzebujesz obciążenia wszystkich rdzeni (kompilacje jądra, ciężkie obliczenia itp.). Tutaj mamy RPI4, który może pracować z częstotliwością 1850 MHz z aktywnymi wszystkimi rdzeniami przy over_voltage=2, ale przy wyższym over_voltage=3, restartuje się po obciążeniu. Wyższe over_voltage oznacza również wyższy prąd, a obwody PMIC mają ograniczony prąd wyjściowy. Im bardziej rozgrzany jest PMIC i otaczające go cewki, tym mniejszy prąd może dostarczyć. Jest to ograniczenie układu PMIC, a nie chipsetu BCM. Tak więc, jeśli napotkasz sporadyczne restarty pod dużym obciążeniem, może to być przegrzanie PMIC. Jeśli Pi się zablokuje, nie będzie to ten konkretny problem, ale być może utrata loterii krzemowej. Podkręcanie części GPU może być interesującym sposobem na zwiększenie możliwości podkręcania (bardziej stabilny system), ale AFAIK, starsze Raspberry Pis miały pamięć podręczną L2 powiązaną z GPU, więc podkręcanie może również spowolnić procesor. Udokumentowałem, jak nagrzewa się PMIC w Raspberry Pi 4 - wszystkie inne chipy są chłodzone bezpośrednio do radiatora. Widok jest od spodu, czyli widać nagrzewającą się płytkę PCB. W lewym dolnym rogu znajduje się PMIC.
Bardzo dziękuję za te praktyczne wskazówki!
Cześć,
Jestem tutaj noobem.. Czy ktoś może dostarczyć schemat wyjścia wyświetlacza cvbs. I wszelkie niezbędne zmiany w kodzie źródłowym?
Niestety, nie mam pomysłu na cvbs
Witam
Dzięki za fajny post. Przeczytałem go od początku do prawie końca 😉
Mam jednak kilka głupich pytań:
1. RPi Pico ma PWM. Czy możliwe jest użycie pojedynczego pinu z PWM do wyprowadzenia sygnału analogowego do zasilania pinów VGA? dzięki czemu będzie używanych mniej pinów. Również prostsze i małe obwody.
2. Czy możliwe jest uzyskanie analogowego wyjścia AV z RPi Pico ponownie przy użyciu PWM? Myślę, że większość telewizorów to obsługuje. Być może przy użyciu modułu takiego jak https://thecaferobot.com/store/pub/media/catalog/product/cache/14d1897c7f1bd4f35a7de1523300314a/l/c/lcd-01-057-1.jpg dostępny w lokalnym sklepie, do którego mam dostęp. Jednak zdjęcie, które wysłałem, jest modułem dla Arduino, ale przypuszczam, że powinno być możliwe użycie go również z Pico.
3. Jeśli ktoś chciałby korzystać z VGA lub DVI w połączeniu z Pico, czy można nie używać tych pomocniczych kart VGA lub DVI? Ponieważ nie są one dostępne w moim regionie, aby je kupić, a moje umiejętności nie są wystarczająco dobre, aby samemu je stworzyć.
1. Piny PWM prawdopodobnie nie będą miały precyzji taktowania, jaką chciałbyś mieć dla wyjścia wideo (dlatego używamy PIO, które ma bardzo precyzyjne taktowanie). Ale dlaczego nie spróbować 🙂
2. Zakładam, że powinno być możliwe wygenerowanie analogowego wyjścia AV z Raspberry Pi Pico. Wątpię, czy PWM będzie do tego "wystarczający" (chętnie wysłucham opinii kogoś z większym doświadczeniem!).
Należy pamiętać, że PWM po prostu włącza i wyłącza sygnał, podczas gdy drabinka rezystorowa używana na przykład w karcie VGA zapewnia ciągłe poziomy sygnału. Tak więc, aby rozwiązanie PWM działało, musi działać przy znacznie wyższych częstotliwościach niż jest to wymagane dla rzeczywistego sygnału. Nie jestem też pewien, jak zewnętrzny sprzęt zareagowałby na sygnał PWM zamiast ciągłego sygnału analogowego.
Ewentualnie można to wygładzić za pomocą bardzo małego kondensatora, dla którego trzeba by wykonać odpowiednie obliczenia.
3. pomocnicze płytki VGA / DVI zawierają to, co niezbędne (głównie rezystory). Możesz spojrzeć na schemat i ewentualnie zbudować własną konfigurację na płytce prototypowej, widziałem, jak ktoś to zrobił dla VGA.
W związku z tym wysyłamy towary za granicę:
https://buyzero.de/products/raspberry-pi-pico-vga-audio-sd-expansion-board?variant=39412666335412
Pico DVI Sock @ sklep buyzero.de
Świetna informacja. Dzięki.
Znalazłem również to: Kompozytowe wyjście wideo na Raspberry pico
http://www.breakintoprogram.co.uk/projects/pico/composite-video-on-the-raspberry-pi-pico
Udało mi się zbudować picoDVI od Wren6991 i zintegrować go z potrójnym ADC do skanowania RGB 15Khz (640×240).
W 320×240, który wykorzystuje tylko jeden rdzeń, drugi jest pozostawiony w spokoju, aby odbierać przerwania HSYNC / VSYNC i przygotowywać transfery dma bez kłopotów, ale w 640×480 użycie 2 rdzeni blokuje system do prawidłowego działania.
Ponieważ potrzebuję połowy linii, czy istnieje sposób, aby mieć zawsze przygotowaną czarną linię dla nieparzystych linii? dzięki temu zwolnię jeden rdzeń dla moich obowiązków.
Nie sądzę, aby trzeba było wysyłać puste linie. Wysyłasz wszystkie nieparzyste linie, wysyłasz sygnał vsync z dodatkową połową linii i wysyłasz parzyste linie. Poszukaj informacji na temat "impulsów synchronizacji wideo z przeplotem".
Czy ktoś wie, jak załadować filmy stworzone przeze mnie, a nie przykładowe? Z góry dzięki!
Jestem zainteresowany wykorzystaniem go do unikalnych celów audiowizualnych. Proszę, czy ktoś może mi powiedzieć:
Czy można zasilać Pico przez kabel HDMI, nawet jeśli znajduje się on po stronie nadawczej kabla?
Czy można ustawić przestrzeń kolorów Rec2100 (przestrzeń kolorów Rec 2020 HDR)?
Czy można podłączyć dodatkowe linie do HDMI, aby przesyłać dźwięk (i sygnalizację rec2020/HDR)?
Czy można wyprowadzać wideo przez jeden z formatów wideo USB (wideo z niezmienionego Pico przez adapter USB na Pico)?
Czy Pico może obsługiwać Miracast bezprzewodowo?
Czy można zrobić zwykły tryb wideo bitmapowego i manipulować nim w celu uzyskania grafiki w grze z pozostałymi cyklami?
Seedstudio ma płytkę mini RP2040. Czy płytka interfejsu HDMI i oprogramowanie mogą na niej działać. Mają również wersję RiscV z wifi, więc byłoby dobrze, gdyby można było ją przekompilować.
https://www.seeedstudio.com/XIAO-RP2040-v1-0-p-5026.html?queryID=31d59a67f7c148df996ba9c1bb7563e3&objectID=5026&indexName=bazaar_retailer_products
Interesują mnie aplikacje gamingowe, takie jak zegarki do gier.
Jakaś minimalna realna platforma uruchomieniowa JavaScript?
Przepraszam, że proszę o wiele, ale
Najbardziej interesujące.
Dziękujemy.
Czy mogę używać karty wraz z interpreterem MMBasic Geoffa? Czy są jakieś ograniczenia sprzętowe dla moich programów ze względu na kartę?
Wielkie umysły myślą podobnie, ja też myślałem w ten sposób! Zbudowałem już komputer MMBASIC oparty na Raspberry Pico z wyjściem VGA i jest on po prostu fantastyczny! Jednak wyjście DVI-D (pseudo HDMI) przenosi możliwości graficzne na nowy poziom! Oczywiście MMBASIC nie musi w pełni wykorzystywać wyższej głębi kolorów lub rozdzielczości, ale praca w rozdzielczości 640×480 z powiedzmy 64 kolorami byłaby całkiem fajna.
Mając to na uwadze, przewiduję dwa bezpośrednie problemy.
1. Rozwiązanie VGA wykorzystuje również piny PIO, a następnie jeden z rdzeni jest używany do zarządzania sprite'ami, buforowania ramek itp. Tak sądzę. Przynajmniej będzie wymagana zmiana kodu, przynajmniej w celu zastąpienia implementacji VGA PIO. Jako API też będę zaskoczony, jeśli interfejs między PIO (VGA) a kodem rdzenia bufora ramki jest taki sam jak rozwiązanie DVI PIO, ale mogę się mylić. Tak czy inaczej, konieczna będzie zmiana kodu.
2. PAMIĘĆ RAM. Jest jej za mało, więc wyższa rozdzielczość i większa głębia kolorów będą problemem. Ale myślę, że mam rozwiązanie. Użyj zewnętrznej pamięci PSRAM i być może użyj jednego RP2040/Pico jako "GPU", który ma podłączoną własną dedykowaną pamięć PSRAM. Następnie komunikuje się z drugim RP2040, który zapewnia "CPU" lub mózg systemu, uruchamiając MMBASIC i może manipulować / przesuwać zasoby graficzne, instruując GPU przy minimalnym narzucie (powiedzmy przez łącze I2C). Chcę/potrzebuję tego 😉
64 euro za "Raspberry Pi Pico VGA Audio SD Expansion Board"? Lepiej byłoby użyć zera...
Pimoroni ma tańszy (30 €), ale wciąż dużo. DVI Sock kosztuje tylko kilka euro ...