Skocz do zawartości

Generowanie sygnału VGA za pomocą Raspberry Pi Pico


Pomocna odpowiedź

Napisano (edytowany)

Pracuję właśnie nad projektem, który zakłada wykorzystanie klawiatury PS/2 i monitora VGA w roli terminala tekstowego. Wczesna wersja korzystała z STM32F411, gdzie monochromatyczny sygnał VGA był generowany za pomocą SPI i DMA.

Teraz chciałem poeksperymentować z generowaniem kolorowego sygnału. Tutaj jest kilka opcji. Z jednej strony mógłbym po prostu wziąć jakiś większy STM32 z kontrolerem LTDC i odpowiednią ilością pamięci na framebuffer. Jednak z tego co widzę Raspberry Pi Pico posiada bibliotekę scanvideo, przeznaczoną właśnie do generowania sygnału wideo, m.in. właśnie dla monitorów VGA. Sama biblioteka jest dostępna w repozytorium pico-extras, przykłady można znaleźć w repozytorium pico-playground. Problem polega na tym, że domyślne przykłady zostały przygotowane z myślą o RGB555 na szesnastobitowej magistrali.

Ponieważ w moim projekcie potrzebuję pinów do innych zastosowań, postawiłem na konfigurację z ośmiobitowym kolorem (RGB332). Najwyraźniej jest to możliwe, bo chociażby w tym repozytorium mamy przykład projektu, który wykorzystuje bibliotekę scanvideo do generowania obrazu z ośmiobitowym kolorem. Tutaj co prawda jest nim karmiony cyfrowy wyświetlacz LCD, ale to nie ma wielkiego znaczenia, bo w przypadku analogowego monitora VGA na liniach danych będzie znajdowała się po prostu drabinka rezystorowa, generująca odpowiednie napięcia.

W swoim CMakeLists.txt dodałem definicje, które (jak mi się wydaje) odpowiadają za konfigurację pod ośmiobitowy kolor.

target_compile_definitions(vga_text PRIVATE
    PICO_SCANVIDEO_COLOR_PIN_BASE=2
    PICO_SCANVIDEO_COLOR_PIN_COUNT=8
    PICO_SCANVIDEO_PIXEL_RCOUNT=3
    PICO_SCANVIDEO_PIXEL_GCOUNT=3
    PICO_SCANVIDEO_PIXEL_BCOUNT=2
    PICO_SCANVIDEO_PIXEL_RSHIFT=0
    PICO_SCANVIDEO_PIXEL_GSHIFT=3
    PICO_SCANVIDEO_PIXEL_BSHIFT=6
    PICO_SCANVIDEO_SYNC_PIN_BASE=10
)

Wstawiłem do swojego projektu plik z przykładem textmode.c (tymczasowo, zamiast mojego pliku main.c). Dodałem też wszystkie wymagane pliki, m.in. z definicjami czcionek. Projekt się buduje i jako-tako działa. Niestety tekst na ekranie wygląda dziwnie: powinien być biały, a tymczasem kolory poszczególnych liter zmieniają się. Do tego litery są trochę niewyraźne.

Ktoś orientuje się co powinienem zmienić, żeby zaczęło to działać poprawnie z moim projektem?

Dodam jeszcze, że docelowo planuję przeznaczyć do renderowania wideo jedynie core1, core0 zostawiając na FreeRTOS i moją aplikację.

photo_2026-06-14_23-34-24.jpg

Edytowano przez atlantis86
  • Lubię! 1

@atlantis86 Nie mam pojęcia co powinieneś zmienić :-} , ale na Twoim miejscu podpiął bym dla testów konwerter vga/hdmi albo coś podobnego, aby wykluczyć, że to wina monitora. Zakładam, że fabryczny konwerter nie zmieni kolorów. 

5 minut temu, bjrk napisał:

@atlantis86 Nie mam pojęcia co powinieneś zmienić :-} , ale na Twoim miejscu podpiął bym dla testów konwerter vga/hdmi albo coś podobnego, aby wykluczyć, że to wina monitora. Zakładam, że fabryczny konwerter nie zmieni kolorów. 

Testowałem na trzech różnych monitorach: dwóch LCD i jednym CRT. Wszystkie zachowują się tak samo.

  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...