
Witajcie moi drodzy
Dzisiaj pokażę wam moją kolejną płytkę rozwojową z mikrokontrolerem PIC, tym razem pozwalającą na generowanie sygnału PAL, czyli na wyświetlanie danych na telewizorze.
Wstęp
Są różne sposoby na wyświetlanie informacji z mikrokontrolera. Najczęściej korzysta się z wyświetlaczy LCD (z reguły opartych na HD44780), wyświetlaczy LED 7-segmentowych, bądź takimi od Nokii 3310 i podobnych. Ale te wszystkie metody są już opisane wiele razy w sieci na wszelke możliwe sposoby. Ja chcialem zająć się czymś bardziej nietypowym i mniej popularnym, więc wybrałem... wyświetlanie danych na TV!
Parametry płytki
Mikroprocesor: PIC18F4620
Taktowanie: 32MHz (oscylator 8MHz z PLL x 4)
Rodzaj generowanego sygnału: PAL (czarno-biały)
Rozdzielczość generowanego obrazku: 128x128 (można zwiększyć, ale ogranicza nas ilość pamięci RAM)
Czcionka: 256 znaków (ASCII+dodatkowe znaki)
Programowanie: poprzez ICSP programatora takiego jak PICKIT2 lub PICKIT3
Zasilanie: bezpośrednio z ICSP (5V, wymaga ściągnięcia zworki) bądź z zasilacza 9V lub 12V poprzez stabilizator 7805.
Złącza: SCART, RCA
Wymiary: 10cm x 9cm
Dodatkowo:
- gniazdo RS232 z MAX232
- dwie kości EEPROM (nie są potrzebne do generowania sygnału video)
Uwaga: cały PORTC na płytce jest zajęty ze względu na to jak działa generacja sygnału video. Pozostałe dostępne porty są wyprowadzone na goldpiny i dostępny do użytku.
Użycie innego mikroprocesora?
Projekt w przedstawionej tu wersji używa PIC18F4620, ale kod można by bez większego problemu skompilować pod innego PICa z rodziny 18F. Jednak należy rozważyć użycie pamięci RAM przez bufor obrazu.
W przedstawionej tu wersji mamy rozdzielczość 128 na 128.
Daje to w sumie 16384 pikseli.
Jest to obraz czarno biały, więc mamy 1 bit na piksel, co daje nam 2048 bajtów pamięci RAM potrzebnych na sam bufor obrazu.
PIC18F4620 użyty tutaj ma 3968 bajtów RAM, więc całość się mieści.
Natomiast np. popularniejszy PIC18F4550 ma 2048 bajtów RAM, więc nie dałby tutaj rady, bo jeszcze w RAM musi być miejsce na parę innych drobniejszych rzeczy.
Kod można by odpalić też na PIC18F4550, ale tylko przy mniejszej rozdzielczości generowanego obrazu.
Projekt płytki
Projekt płytki wykonałem w Eagle. Płytka jest jednostronna, ścieżki są grubsze, wszystko można bez problemu wykonać metodą termotransferu.

Uwaga: na projekcie płytki nie są uwzględnione kondensatory 22pF (lub zbliżona wartość) pomiędzy pinami rezonatora a masą. Powinno się je tam dodać, tak jak sugeruje datasheet, bo bez nich PIC może działać niestabilnie.
Tak prezentowała się płytka po prawie całym wykonaniu (brakuje m. in. opcjonalnych rezystorów pull-up przy porcie A i przycisku RESET):



Kosztorys
Podstawowa wersja, tzn. bez pamięci i RS232:
- PIC18F4620 - 24 zł
- 7805 - 1 zł
- rezonator 8MHz - 1 zł
- złącze SCART z wylutu - 0 zł
- złącze RCA z wylutu - 0 zł
- drobnica (kondensatory, goldpiny) - 5 zł
SUMA (wersja podstawowa): niecałe 30 zł
Wersja pełna:
- MAX232 - 6 zł
- 24AA128P x 2- 8 zł
- złącze RS232 DSUB9 - 1 zł
- drobnica (kondensatory, goldpiny) - 5 zł
SUMA (wersja pełna): 50 zł
Kod projektu i jego kompilacja
Projekt napisany jest w mikroC PRO for PIC. Generacja PAL oparta jest na bibliotece autorstwa Bruno Gavand. Przy kompilacji projektu proszę zwrócić uwagę na dwa istotne szczegóły:
- wartość rezonatora w ustawieniach projektu wpisana jest po przemnożeniu przez PLL, czyli 32MHz, a nie 8MHz, mimo iż taki rezonator jest użyty.

- przy kompilacji należy wyłączyć optymalizacje (ustawić jej poziom na 0), ponieważ optymalizacja psuje timingi generacji PAL i TV traci synchronizacje

Testowanie płytki
Na początek mały testowy program. Wyświetla najpierw parę linii- animacje rysowania, pokazuje czcionkę, a następnie wykonuje skan urządzeń podlączonych do magistrali I2C na płytce. Gdy obie pamięci są w socketach, to na ekranie powinny wyświetlić sie ich adresy.
Początkowy ekran


Test czcionki

Test animacji (do tego jest jeszcze ruch obiektu po ekranie, ale nie udało mi się tego ładnie uchwycić aparatem):


Skan I2C wraz z odczytanymi adresami EEPROMów:

Zastosowanie płytki - prosta gra Tetris
Mało praktyczne, ale ciekawe zastosowanie. Na płytce można zrealizować proste, czarno-białe gry od telewizor. Programowanie ich różni się znacznie od programowania gier na PC, ponieważ trzeba wziąć pod uwagę wiele czynników takich jak np. migotanie ekranu przy odświeżeniu. W tym celu w moim Tetrisie przy przesunięciu klocka tylko odświeżam te piksele, które uległy zmianie.
Tak prezentuje się ekran początkowy gry:

No i gra w akcji:

Game over:

Gra korzysta z dwóch przycisków, które są już na płytce. Pozwalają one przesuwać klocek w obie strony, a jednoczesne wciśnięcie ich obraca klocek.
Zastosowanie płytki - prosty terminal RS232
Teraz coś bardziej praktycznego. Prosty terminal RS232, który wyświetla odebrane informacje na ekranie telewizora. Na płytce znajduje się gniazdo RS232 i MAX232, więc nie potrzebna żadnych dodatkowych konwerterów by odebrać informacje bezpośrednio z kompa, ale oczywiście można też podpiąć się bezpośrednio do wyprowadzonych pinów RX/TX od PICa (tam są już poziomy TTL).
Całość prezentuje się tak:

Moduł testowałem z pomocą Arduino:

Jak widać, zaimplementowane jest również "dzielenie linii" jeśli całość nie mieści się w jednym wierszu.
Może i wydawać się banalne, ale w połączeniu z małym telewizorkiem przenośnym (ja mam model TOP2001) taki terminalek może być przydatny. Sam z niego korzystam, jeśli chodzi o sam odbiór danych UART jest to dla mnie wygodniejsze niż konwerter na USB (zajmujący jeden slot USB) i otwieranie terminala na komputerze.
Całość można by jeszcze rozwinąć o wsparcie klawiatury na PS/2 i wtedy można by było również wysyłać dane po UART.
Testy z nowszym telewizorem (LCD firmy LG)
Nowoczesne telewizory również nie mają problemu z odbiorem generowanego sygnału. Płytkę można podłączyć zarówno kablem SCART jak i RCA, w obu przypadkach sygnał odbierany jest bez problemów i zakłóceń.
Test podłączenia kable RCA

Po podłączeniu i uruchomieniu płytki telewizor wykrywa sygnał:

I poprawnie wyświetla obraz:

Test podłączenia kablem SCART

Po podłączeniu i uruchomieniu płytki telewizor wykrywa sygnał:

I również poprawnie wyświetla obraz:

Zatem jak najbardziej można użyć całości z nowszym sprzętem.
Podsumowanie
Ten projekt był jednym z ciekawszych, które do tej pory udało mi się zrobić. Co prawda może nie jest za bardzo praktyczny, ale na pewno jest czymś nowym w porównaniu z wałkowanymi setki razy wyświetlaczami na HD itp. Zrobiona płytka do tej pory służy mi w postaci terminalu UART i ułatwia testowanie nastepych projektów.
Cool? Ranking DIY