Witam serdecznie!
Projekt ten jest moim pierwszym projektem który był tworzony nie tylko z chęci nauczenia się czegoś, czy wykorzystania jakichś elementów, lecz ze względów czysto praktycznych i użytkowych.
Cele:
Ograniczenie ilości pinów wykorzystywanych przez wyświetlacz graficzny LCD
Opis układu:
Sercem układu jest zaprogramowany procesor AT90S2313. Wgrane do niego oprogramowanie pozwala na przesyłanie do niego danych magistralą I2C. Odpowiednie komendy umożliwiają sterowanie wyświetlaczem graficznym opartym na sterowniku T6963C.
Dostępne komendy to:
Czyszczenie wyświetlacza
Czyszczenie strony tekstowej wyświetlacza
Czyszczenie strony graficznej wyświetlacza
Ustawianie/kasowanie piksela
Rysowanie/mazanie linii
Rysowanie/mazanie okręgu
Umieszczenie kursora w podanym wierszu i kolumnie
Wyświetlenie tekstu
Oraz komenda systemowa pozwalająca na zmianę adresu tego układu.
Wykonanie i trudności:
Oprogramowanie napisałem w języku BASCOM z wykorzystaniem biblioteki 12c_slave.
Pierwszą trudnością była niewystarczająca liczba wyprowadzeń aktywnych procesora. Po podpięciu wszystkich linii sterujących wyświetlacza pozostawało tylko jedno wolne wyprowadzenie (magistrala I2C potrzebuje 2). problem rozwiązałem ustawiając w programie pin sterowania trybem czcionki (FS) na wewnętrzne wyprowadzenie komparatora analogowo-cyfrowego, a fizycznie zwierając pin FS wyświetlacza do stanu wysokiego (wybór trybu czcionki 6*8).
Kolejną trudnością był czas potrzebny na zapisanie w odpowiedniej zmiennej wartości odebranej z magistrali. stąd w programie nadrzędnym musiałem wprowadzić opóźnienia między wysyłaniem kolejnych bajtów sygnału (na razie czas ten wynosi 1ms, ale będę starał się zejść z nim niżej bez utraty danych)
Jeszce jedną trudność stanowił czas konieczny na obliczenia pozycji pikseli (na przykład dla okręgu) co powodowało przesyłanie komendy podczas rysowania koła i utratę danych). Dlatego wprowadziłem bajt zajętości (odczyt czegokolwiek z kości powoduje właśnie odczyt tego bajtu). Podczas obliczeń przyjmuje on wartość 1, co umożliwia sprawdzenie przez urządzenie nadrzędne, kiedy można posyłać następne dane (nie można odczytywania przeprowadzać jednak zbyt często, gdyż wtedy także następuje krótkie przerwanie rysowania. W swoim oprogramowaniu nadrzędnym ustanawiam częstotliwość sprawdzania zajętości także co 1ms.
Wadą jest konieczność zapewnienia procesorowi zewnętrznego oscylatora, ale użyłem tego mikrokontrolera, ponieważ taki miałem pod ręką. Jeśli kotś by chciał to na PW mogę przesłać kompilacje pod inne procesory i inne wyświetlacze (o innych rozdzielczościach)
Resztę danych zamieszam w krótkiej specyfikacji, załączam kody źródłowe i plik wsadowy .hex do AT90S2313 (skompilowany dla wyświetlacza 240*64)
Proszę o komentarze i wszelką krytykę, oprócz tej, ze BASCOM to nieprofesjonalne oprogramowanie (bo mam tego świadomość, acz mimo wszystko programuje mi się w nim niezwykle przyjemnie)
Fajne? Ranking DIY