logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2

p.kaczmarek2 02 Mar 2019 18:58 5355 5
  • Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2
    Witajcie moi drodzy.
    Dziś przedstawię projekt, o którym myślałem od bardzo dawna. Początkowo byłem pewny, że będę musiał go zrealizować od 0, ale dość długie poszukiwania w sieci pozwoliły mi odnaleźć gotowe rozwiązanie, które spełnia moje oczekiwania, a mianowicie ASCII Video Terminal autorstwa Geoffs.
    Strona domowa projektu: http://geoffg.net/terminal.html
    Jest to w skrócie 'mikrokomputer' który wyświetla na ekranie to, co odbierze przez UART oraz wysyła na UART to, co zostanie mu podane przez klawiaturę z PS/2.
    Wspiera on generowanie sygnału NTSC, PAL oraz VGA.
    Jego rozdzielczość VGA to 24 linie po 80 znaków.
    Dodatkowo można go programować poprzez USB dzięki zastosowaniu odpowiedniego bootloadera.

    Schemat i PCB
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2

    Konstrukcja
    Gerbery wziąłem ze strony autora projektu, a następnie zamówiłem wykonanie 10 płytek z jednej z fabryk z chin. Paczka przyszła po paru tygodniach:
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2
    Większość elementów miałem już pod ręką, jedynie gniazdko VGA musiałem wylutować z pomocą opalarki ze starej płyty głównej od komputera. Mogłoby się zdawać, że to dość destruktywny proces, ale odlutowane tak elementy radzą sobie całkiem nieźle.
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2

    Złączę na klawiaturę (PS/2) zamówiłem online, ponieważ te z płyty głównej od komputera niestety tu nie pasuje (jako że jest podwójne):
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2
    Po zlutowaniu wszystkiego wybrałem jaki chcę mieć kolor czcionki VGA (kropla cyny na odpowiedniej zworce):
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2
    Tak wygląda prawie gotowa całość:
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2
    I ostatecznie wgrałem wsad z pomocą PICKIT3 oraz MPLAB IPE v4.01:
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2
    Projekt ruszył z miejsca, aczkolwiek tak naprawdę do tej pory nie znalazłem czasu by dolutować dwa brakujący kondensatory paręnaście-pF obok rezonatora kwarcowego.

    Bootloader
    Projekt korzysta z bootloadera oferowanego przez Microchip, dzięki czemu po jednorazowym zaprogramowaniu go z pomocą PICKIT3 lub innego programatora PIC można już aktualizować jego soft bezpośrednio przez USB. Jest to duże ułatwienie, zwłaszcza dla osób które nie mają stałego dostępu do programatora.
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2
    Plik wykonywalny bootloadera też zamieszczam w załącznikach do tematu.

    Testowanie w trybie 'echo'
    Najprościej przetestować można całość poprzez dodanie zworki na złączu UART, tzn. poprzez połączenie RX z TX:
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2
    W ten sposób to co podamy na klawiaturę od razu idzie do wyświetlania. Można tak pisać małe i duże litery, cyfry oraz pozostałe znaki, jak również poruszać kursorem pisania z pomocą strzałek:
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2


    Testowanie z Arduino UNO
    Układ można podłączyć bezpośrednio do Arduino UNO, mimo iż UNO zasilane jest z 5V a PIC w konstrukcji 3.3V. To dlatego, że przy pinie RX dodany jest dzielnik napięcia na rezystorach, który (wg. autora schematu) chroni układ nawet przed napięciami rzędu ±12V.

    Test z Arduino - tabelka
    Na początek odpaliłem przykłady kod użycia UART z oficjalnej strony Arduino. Generuje on tabelkę z liczbami w różnych formatach:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Wynik na ekranie:
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2

    Test z Arduino - gwiazdki
    Ten prosty program z kolei wydrukuje na terminalu prostokąt z gwiazdek.
    Kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Wynik na ekranie:
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2

    Test z Arduino - escape codes na okrąg
    Video terminal VGA również wspiera tzw. 'escape codes', które pozwalają wydać mu polecenia inne niż wyświetlanie samego tekstu, czyli np. rysowanie prostych kształtów czy tam czyszczenie ekranu.
    Ten przykład rysuje prosty okrąg o promieniu 100 pikseli na pozycji 240;144.
    Kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Wynik na ekranie:
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2
    Wszystkie 'escape codes' są dostępne w dokumentacji projektu:
    TerminalEs...eCodes.pdf Download (19.42 kB)

    Załączniki
    Załączam tutaj całą 'construction pack' dla projektu, która zawiera też pliki Gerber:
    Constructi..ack.zip Download (5.23 MB)Punkty: 1 dla użytkownika
    Kod źródłowy (dla Microchip MPLAB X i kompilatora XC32)
    Terminal_S..rce.zip Download (571.1 kB)Punkty: 0.45 dla użytkownika
    Dokumentacja VT100:
    VT100_User..ide.pdf Download (1022.22 kB)Punkty: 0.8 dla użytkownika
    Aktualizacja firmware V1.3:
    Terminal_V...PGRADE.zip Download (265.04 kB)Punkty: 0.21 dla użytkownika


    Podsumowanie
    Projekt był prosty do wykonania i uruchomienia, ale moim zdaniem można by spróbować go rozwinąć i generować kolorowy obraz VGA, ale nie wiem na ile to jest możliwe przy zachowaniu rozdzielczości takiej jak w projekcie. Zmiana PICa na szybszy z pewnością by pomogła, ale z tego co wiem to użyty tutaj PIC32MX250F128B należy do najszybszej rodziny PICów która jest teraz dostępna w obudowach DIP. Cokolwiek mocniejszego byłoby już w TQFP.
    Jakby kogoś zainteresował ten projekt, to tak jak widać na zdjęciach zostało mi trochę PCB czy tam złącz, a wsad na PICa też mogę wgrać (dalej można korzystać z bootloadera).

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
  • #2 17815772
    LChucki
    Poziom 31  
    p.kaczmarek2 napisał:
    ale moim zdaniem można by spróbować go rozwinąć i generować kolorowy obraz VGA, ale nie wiem na ile to jest możliwe przy zachowaniu rozdzielczości takiej jak w projekcie.

    Na uC to karkołomne albo wręcz niemożliwe. Takie rzeczy robi się na FPGA ewentualnie CPLD + szybkie RAM, DAC.
  • #3 17816692
    tmf
    VIP Zasłużony dla elektroda
    LChucki napisał:
    p.kaczmarek2 napisał:
    ale moim zdaniem można by spróbować go rozwinąć i generować kolorowy obraz VGA, ale nie wiem na ile to jest możliwe przy zachowaniu rozdzielczości takiej jak w projekcie.


    Na uC to karkołomne albo wręcz niemożliwe. Takie rzeczy robi się na FPGA ewentualnie CPLD + szybkie RAM, DAC.


    E tam. To proste, a jedynym ograniczeniem jest ilość dostępnej pamięci. Niestety nawet żeby zapamiętać 320x200 mono potrzeba 8 kB, a jak chcemy mieć np. 16 kolorów to już 32 kB i dla małych procesorków robi się problem. Do krórejś z książek o XMEGA dołączyłem przykład takiego projektu i działa to całkiem nieźle. Żeby było śmieszniej, generowanie obrazu VGA nawet nie obciąża za bardzo procesora. Można też przejrzeć YT, aby się przekonać jakie cuda ludzie robią na prostych procesorkach w kwestii generowania obrazu.
    VGA jest o tyle proste, że są rozdzielone sygnały kolorów RGB, o wiele bardziej nieciekawe jest generowanie kolorowego sygnału NTSC lub PAL, ale też się da.
  • #4 17816768
    prosiak_wej
    Poziom 39  
    p.kaczmarek2 napisał:
    Mogłoby się zdawać, że to dość destruktywny proces, ale odlutowane tak elementy radzą sobie całkiem nieźle.
    Terminal PAL/NTSC/VGA na PIC32 z obsługą klawiatury PS/2


    Łojezu! Proponuję inwestycję w jakąś opalarkę Steinel z cyfrową regulacją temperatury. Ustawiasz 370 stopni, dmuchasz i po czasie elementy same wypadają, a płyta pozostaje niezniszczona :)
  • #5 17830938
    radiosimon
    Poziom 28  
    Płytka PCB tragiczna, jak z autoroutera. Rozumiem, że autorem jest kto inny ale pierwsze co bym zrobił to smd + nowy layout.
  • #6 17831724
    Olza98
    Poziom 14  
    Jak najbardziej jest to możliwe. W tym trybie do wyświetlenia jednego ekranu potrzeba 1920 bajtów, czyli ok. 2 kB. Jeśli dodasz do tego atrybuty koloru, to przy 8 bitach potrzebujesz dodatkowo 2 kB, a przy 4 bitach 1 kB na ekran.
REKLAMA