Wyświetlacz graficzny LCD ze sterownikiem



Podobne dokumenty
Obsługa wyświetlaczy graficznych z wbudowanym kontrolerem S6B1713, część 2 Przykłady dla mikrokontrolera AT91SAM7S256

Programowanie Mikrokontrolerów

Wyświetlacze graficzne : 162x64 z kontrolerem S1D x60 z kontrolerem S1D15710

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

Alternatywa dla alfanumerycznych wyświetlaczy LCD

GND(VSS) i VCC - masa i zasilanie. V0 - regulacja kontrastu

Programowanie mikrokontrolerów. 8 listopada 2007

Instytut Teleinformatyki

Technika Mikroprocesorowa

PRUS. projekt dokumentacja końcowa

2. Architektura mikrokontrolerów PIC16F8x... 13

dokument DOK wersja 1.0

Kurs programowania mikrokontrolerów PIC (5)

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

3.4. Opis konfiguracji layoutów.

Alfanumeryczny wyświetlacz LCD

Wstęp Architektura... 13

Instrukcja do oprogramowania ENAP DEC-1

Instrukcja programu użytkownika OmegaUW.Exe. Program obsługuje następujące drukarki fiskalne: ELZAB OMEGA II generacji ELZAB OMEGA F, MERA, MERA F.

ZL8AVR. Płyta bazowa dla modułów dipavr

OPTIMA PC v Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA ELFON. Instrukcja obsługi. Rev 1

MIERNIK T-SCALE BWS 1

Szkolenia specjalistyczne

Licznik rewersyjny MD100 rev. 2.48

Uniwersalny sterownik silnika krokowego z portem szeregowym RS232 z procesorem AT90S2313 na płycie E200. Zestaw do samodzielnego montażu.

4 Transmisja szeregowa, obsługa wyświetlacza LCD.

Laboratorium Komputerowe Systemy Pomiarowe

WIZUALIZACJA DANYCH SENSORYCZNYCH Sprawozdanie z wykonanego projektu. Jakub Stanisz

ADVANCE ELECTRONIC. Instrukcja obsługi aplikacji. Modbus konfigurator. Modbus konfigurator. wersja 1.1

Zespół Szkół Technicznych. Badanie wyświetlaczy LCD

Obsługa modułu wyświetlacza LCD

Zewnętrzne układy peryferyjne cz. 1 Wykład 12

MODBUS RTU wersja M1.14 protokół komunikacyjny wyświetlaczy LDN

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Interfejs analogowy LDN-...-AN

Programator ICP mikrokontrolerów rodziny ST7. Full MFPST7. Lite. Instrukcja użytkownika 03/09

4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD.

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED

Uczeń/Uczennica po zestawieniu połączeń zgłasza nauczycielowi gotowość do sprawdzenia układu i wszystkich połączeń.

INSTRUKCJA OBSŁUGI. Przekaźnik czasowy ETM ELEKTROTECH Dzierżoniów. 1. Zastosowanie

Instrukcja integracji urządzenia na magistrali Modbus RTU. wersja 1.1

Gdzie przyjęto, że: IR7...IR4 to starsze bity przesyłanej danej lub rozkazu, IR3...IR0 to młodsze bity przesyłanej danej lub rozkazu.

Dell P2018H Dell Display Manager Instrukcja użytkownika

CECHY URZĄDZENIA: Podłączenie wyświetlacza

Ćwiczenie 3 Wyświetlacz ciekłokrystaliczny

INSTRUKCJA UŻYTKOWNIKA MPCC

Politechnika Wrocławska

Kod produktu: MP01611-ZK

Xelee Mini IR / DMX512

Stanowisko laboratoryjne dla mikrokontrolera ATXmega32A4 firmy Atmel

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

Kurs programowania mikrokontrolerów KURS PIC Kurs programowania mikrokontrolerów PIC (6) Sterowanie kolorowym wyświetlaczem Nokii 3510i

Moduł Komunikacyjny MCU42 do systemu AFS42

Kod produktu: MP01611

GRM-10 - APLIKACJA PC

Wyjście do drukarki Centronix

Dokumentacja Techniczna. Konwerter USB/RS-232 na RS-285/422 COTER-24I COTER-24N

LITEcomp aplikacje Współpraca z wyświetlaczem LCD od telefonu NOKIA 3310

Kontroler LED programowalny czasowo 12V 20A 5 kanałów

LITEcomp aplikacje Cyfrowy potencjometr audio sterowany pilotem RC5

Moduł licznika położenia LP 2.

ZL29ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Instytut Teleinformatyki

Zaliczenie Termin zaliczenia: Sala IE 415 Termin poprawkowy: > (informacja na stronie:

Uproszczony schemat blokowy konwertera analogowo-cyfrowego przedstawiony został na rys.1.

IC200UDR002 ASTOR GE INTELLIGENT PLATFORMS - VERSAMAX NANO/MICRO

ZL4PIC. Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

Instrukcja do ćwiczeń

Wizualizacja stanu czujników robota mobilnego. Sprawozdanie z wykonania projektu.

Konfigurator Modbus. Instrukcja obsługi programu Konfigurator Modbus. wyprodukowano dla

Opis procedur asemblera AVR

ZL27ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F103

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

dv-2ps INSTRUKCJA OBSŁUGI

TV LCD LED Samsung seria UE**Fxxxx

3. Sieć PLAN. 3.1 Adresowanie płyt głównych regulatora pco

Opis systemu topto v 2.5. Wprowadzenie

- jasność świecenia L > 7100 cd/m 2 przy jasności pojedynczej diody 1,5 cd,

Kod produktu: MP-1W-2480

ZL9ARM płytka bazowa dla modułów diparm z mikrokontrolerami LPC213x/214x

RS485 MODBUS Module 6RO

Rejestrator danych Log 10, TFA, zakres -30 do +60 C

INSTRUKCJA INSTALACJI WEB SERWER STW. DOKUMENTACJA TECHNICZNA INSTRUKCJA OBSŁUGI wersja instrukcji 1.0

Instrukcja Obsługi. Modułu wyjścia analogowego 4-20mA PRODUCENT WAG ELEKTRONICZNYCH

INSTRUKCJA PANEL STERUJĄCY MT-5

LDA-8/ Z wyświetlacz tekstowy

2. Format danych i zaimplementowane funkcje MODBUS

LITEcomp. Zestaw uruchomieniowy z mikrokontrolerem ST7FLITE19

Obługa czujników do robota śledzącego linie. Michał Wendland czerwca 2011

RS485 MODBUS Module 6RO

DOKUMENTACJA TECHNICZNA. KONWERTER MODBUS v1. INSTRUKCJA OBSŁUGI wersja instrukcji 1.0

UW-DAL-MAN v2 Dotyczy urządzeń z wersją firmware UW-DAL v5 lub nowszą.

Opis systemu topto v 3.01 topto

MODUŁ ETHERNETOWY DS202

WPW-1 ma 2 wejścia sygnalizacyjne służące do doprowadzenia informacji o stanie wyłącznika.

Kod produktu: MP01611-ZK

T2210HD/T2210HDA Szerokoekranowy monitor LCD 21,5 Podręcznik użytkownika

Transkrypt:

Wyświetlacz graficzny LCD ze sterownikiem Samsung S6B0724 sterowanie w języku C od podstaw W artykule zajmiemy się obsługą sterownika S6B0724 produkowanego przez firmę Samsung. Sterownik ten stosowany jest w nowoczesnych modułach wyświetlaczy LCD produkowanych w technologii COG (Chip On Glass), których główną zaletą są małe, w porównaniu do tradycyjnych modułów wyświetlaczy COB (Chip On Board), wymiary oraz znacznie mniejsza waga modułu, co pozwala na stosowanie ich w urządzeniach, w których mała waga i rozmiary mają duże znaczenie. Bohaterem tego odcinka cyklu jest wyświetlacz 64128H-RGB produkowany przez firmę Displaytech Ltd. (http:// www.displaytech.com.hk). Jest to wyświetlacz o organizacji 128x64 piksele, który posiada podświetlenie RGB, co jest cechą rzadko spotykaną w tego typu wyświetlaczach. Rozmieszczenie wyprowadzeń przedstawiono na rys. 1. Opis wyprowadzeń wyświetlacza przedstawiono w tab. 1. Podświetlacz składa się z 4 trójkolorowych diod LED RGB połączonych równolegle. Schemat podświetlacza przedstawiono na rys. 2. Należy zwrócić uwagę na występowanie w gałęzi diod czerwonych (i tylko w tej gałęzi) rezystora o rezystancji 15Ω. Należy uwzględnić go przy obliczaniu prądu płynącego przez diody, który powinien wynosić 80 ma (dla każdej gałęzi diod). Spadek napięcia na diodach wynosi ok. 3,2 V, tak więc możliwe jest ich zasilenie ze źródła napięcia 3,3V, dzięki czemu do pełnego działania wyświetlacza wystarczy jedno źródło zasilania o napięciu +3.3V. Materiały i dodatkowe informacje Dodatkowe materiały są dostępne na płycie dołączonej do numeru. Podłączenie wyświetlacza do mikrokontrolera Procedury obsługi wyświetlacza przygotowano dla mikrokontrolera AT91SAM7S256, jednak dzięki zastosowaniu języka C ich przeniesienie na inne rodziny mikrokontrolerów nie powinno sprawić większych trudności. Do komunikacji z wyświetlaczem użytych zostało 13 wyprowadzeń mikrokontrolera (rys. 3). Magistrala danych zajmuje dowolne osiem kolejnych wyprowadzeń portu, natomiast sygnały sterujące mogą być dowolnie przypisane do dostępnych linii portu. Wyświetlacz 64128H jest przystosowany do zasilania napięciem z przedziału 2,4 3,6 V, co w przypadku stosowania go w systemie z mikrokontrolerem ARM nie stanowi problemu, ponieważ jest to napięcie standardowe dla większości systemów z mikrokontrolerami ARM. W przypadku stosowania wyświetlacza w systemach zasilanych większym napięciem należy bezwzględnie pamiętać o zastosowaniu stabilizatora zapewniającego napięcie zasilania o wartości 2,4 3,6 V oraz odpowiednich konwerterów poziomów napięć na liniach sterujących, gdyż nie są one przystosowane do współpracy z sygnałami o poziomach większych od napięcia zasilania. Wewnątrz układu S6B0724 zintegrowana jest przetwornica napięcia umożliwiająca wytworzenie napięcia zasilania niezbędnego dla matrycy LCD. Aby przetwornica ta mogła pracować, do wyświetlacza należy podłączyć zewnętrzne kondensatory w sposób przedstawiony na rys. 3. Regulacja kontrastu odbywa się drogą programową w 64 krokach zbędny jest więc zewnętrzny potencjometr regulacji kontrastu. Układ S6B0724 może zostać skonfigurowany do pracy z trzema rodzajami interfejsu służącego do komunikacji z mikrokontrolerem: interfejs równoległy zgodny z układami 8080, interfejs równoległy zgodny z układami 6800 oraz interfejs szeregowy. Do wyboru typu interfejsu służą wyprowadzenia PS oraz C86. Zależność pomiędzy stanami na tych wyprowadzeniach a typem interfejsu przedstawiono w tab. 2. W zależności od typu interfejsu wyprowadzenia E_RDB i RW_WRB pełnią funkcje odpowiednie dla wybranego typu interfejsu. Funkcje tych wyprowadzeń przedstawiono w tab. 3. Organizacja pamięci sterownika Pamięć obrazu sterownika S6B0724 podzielona jest na osiem (a właściwie 8 i 1/8) stron po 132 bajty każda. Każdy kolejny bajt pamięci obrazu jest 143

DLA PRAKTYKÓW Tab. 1. Funkcje wyprowadzeń wyświetlacza 64128H-RGB firmy Displaytech Tab. 2. Zależność pomiędzy stanami na tych wyprowadzeniach PS i C86 a typem interfejsu Nr Nazwa Funkcja 1 CS1B Wejście wyboru układu 2 RST Wejście zerowania kontrolera 3 RS Wybór rejestru (1: dane wyświetlacza; 0: dane sterujące) 4 RW_WRB Funkcja zależna od rodzaju interfejsu (patrz tab. 3) 5 E_RDB Funkcja zależna od rodzaju interfejsu (patrz tab. 3) 6 DB0 Bit 0 magistrali danych 7 DB1 Bit 1 magistrali danych 8 DB2 Bit 2 magistrali danych 9 DB3 Bit 3 magistrali danych 10 DB4 Bit 4 magistrali danych 11 DB5 Bit 5 magistrali danych 12 DB6 Bit 6 magistrali danych 13 DB7 Bit 7 magistrali danych 14 VDD Napięcie zasilania +3.3V 15 VCI Wejście napięcia odniesienia dla konwertera 16 VSS Masa 17 VOUT Wejście/wyjście konwertera napięcia 18 C4+ Wyprowadzenie dodatnie kondensatora C4 19 C3+ Wyprowadzenie dodatnie kondensatora C3 20 C1- Wyprowadzenie ujemne kondensatora C1 21 C1+ Wyprowadzenie dodatnie kondensatora C1 22 C2+ Wyprowadzenie dodatnie kondensatora C2 23 C2- Wyprowadzenie ujemne kondensatora C2 24 V1 Napięcie zasilające matrycę LCD 25 V2 Napięcie zasilające matrycę LCD 26 V3 Napięcie zasilające matrycę LCD 27 V4 Napięcie zasilające matrycę LCD 28 V0 Napięcie zasilające matrycę LCD 29 C86 Wybór typu interfejsu (1: 6800; 0: 8080) 30 PS Wybór typu interfejsu (1: równoległy; 0: szeregowy) PS C86 Interfejs 0 0 0 1 Szeregowy 1 0 8080 1 1 6800 Tab. 3. Funkcje wyprowadzeń E_RDB i RW_WRB w zależności od wybranego trybu pracy interfejsu Display ON / OFF Instrukcja włączająca bądź wyłączająca wyświetlanie obrazu na ekranie wyświetlacza. Instrukcja nie ma wpływu na stan pamięci obrazu oraz rejestrów konfiguracyjnych. Wspólne RS E_RDB (E) 6800 8080 RW_WRB (RW) E_RDB (/RD) RW_WRB (/WR) 1 1 1 0 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 0 Rys. 1. Rozmieszczenie wyprowadzeń wyświetlacza 64128H-RGB firmy Displaytech Funkcja Odczyt danych Zapis danych Odczyt rejestru statusowego Zapis instrukcji odwzorowany na 8 pionowych pikseli ekranu. Przedstawiono to rys. 4. Układ S6B0724 umożliwia wysterowanie wyświetlacza LCD o organizacji maksymalnie 132x65 pikseli. W wyświetlaczu 12864H zastosowano matrycę LCD o organizacji 128x64 pikseli, przez co nie wszystkie komórki wewnętrznej pamięci RAM zostaną odwzorowane na ekranie wyświetlacza. Ponieważ cały obszar wyświetlacza jest sterowany przez jeden sterownik, jego obsługa jest prostsza niż wyświetlaczy z kilkoma kontrolerami (np. KS0108). Instrukcje sterownika S6B0724 Niezależnie od wybranego rodzaju interfejsu do komunikacji z wyświetlaczem wykorzystywany jest zbiór kilku podstawowych instrukcji. Wyjątkiem od tej reguły jest brak możliwości odczytu danych ze sterownika przy komunikacji za pomocą interfejsu szeregowego. 0 0 1 0 1 0 1 1 1 DON DON = 0 wyświetlanie obrazu wyłączone DON = 1 wyświetlanie obrazu włączone Initial Display Line Instrukcja określa, która linia pamięci obrazu zostanie wyświetlona w pierwszej linii wyświetlacza. 144

Rys. 2. Schemat elektryczny podświetlacza RGB Rys. 3. Sposób podłączenia wyświetlacza do mikrokontrolera AT91SAM7S256 Rys. 4. Organizacja pamięci sterownika 0 0 0 1 ST5 ST4 ST3 ST2 ST1 ST0 ST5:ST0 Numer linii pamięci obrazu, która będzie wyświetlana jako pierwsza na ekranie (0 63) Set Page Address Instrukcja wyboru adresu aktywnej strony. 0 0 1 0 1 1 P3 P2 P1 P0 Set Column Address Dwubajtowa instrukcja wyboru adresu kolumny. W pierwszej kolejności należy ustawić starszą połówkę adresu kolumny a następnie młodszą. Każda operacja zapisu lub odczytu danych z wyświetlacza powoduje automatyczną inkrementację adresu kolumny. Po osiągnięciu wartości maksymalnej dalsza inkrementacja jest wstrzymywana. 0 0 0 0 0 1 Y7 Y6 Y5 Y4 0 0 0 0 0 0 Y3 Y2 Y1 Y0 Y7:Y0 adres kolumny (0..131) Read Status Instrukcja odczytu rejestru statusowego, zawierającego flagi określające aktualny stan wyświetlacza. 0 1 BUSY ADC ON/ OFF RESETB 0 0 0 0 BUSY = 0: układ gotowy do wykonania instrukcji BUSY = 1: układ zajęty wykonywaniem operacji ADC = 0: kierunek odwrotny (SEG131->SEG0) ADC = 1: kierunek normalny (SEG0->SEG131) ON/OFF = 0: wyświetlacz włączony 145

DLA PRAKTYKÓW ON/OFF = 1: wyświetlacz wyłączony RESETB = 0: układ gotowy do pracy RESETB = 1: układ w trakcie operacji RESET Write Display Data Instrukcja zapisu danych obrazu pod aktualny adres. Po każdej operacji zapisu adres kolumny jest inkrementowany. Po osiągnięciu wartości maksymalnej dalsza inkrementacja jest wstrzymywana, jak również nie ulega zmianie adres aktywnej strony. 1 0 Dane do zapisu Read Display Data Instrukcja odczytu danych spod aktualnego adresu. Po każdej operacji odczytu adres kolumny jest inkrementowany. Po osiągnięciu wartości maksymalnej dalsza inkrementacja jest wstrzymywana, jak również nie ulega zmianie adres aktywnej strony. 1 1 Odczytywane dane Reverse Display ON/OFF Instrukcja wyboru trybu odwzorowania bitu pamięci obrazu na piksel ekranu. 0 0 1 0 1 0 0 1 1 REV REV = 0: wyświetlacz pozytywowy (bit o wartości 1 powoduje zaczernienie piksela) REV = 1: wyświetlacz negatywowy (bit o wartości 0 powoduje zaczernienie piksela) Entire Display ON/OFF Instrukcja zaczerniająca wszystkie piksele. 0 0 1 0 1 0 0 1 0 EON EON = 0: tryb normalny EON = 1: wszystkie piksele zaczernione Set Modify-Read Instrukcja powoduje zatrzymanie inkrementacji adresu po operacji odczytu z zachowaniem inkrementacji po operacji zapisu danych. Instrukcja pozwala zmniejszyć obciążenie procesora podczas modyfikacji dużych obszarów pamięci. Przywrócenie normalnego trybu pracy następuje po wykonaniu instrukcji Reset Modify-Write. 0 0 1 1 1 0 0 0 0 0 Reset Modify-Read Instrukcja kończąca tryb Modify-Write. Po wykonaniu instrukcji przywrócony zostaje stan rejestru kolumn sprzed uaktywnienia trybu Modify-Write. 0 0 1 1 1 0 1 1 1 0 Reset Instrukcja przywracająca rejestry adresu kolumn, stron, linii początkowej oraz rejestrów kierunku przemiatania do stanu domyślnego. Instrukcja nie inicjalizuje układów zasilania, które są inicjalizowane za pomocą wyprowadzenia RESETB. 0 0 1 1 1 0 0 0 1 0 SHL Select Instrukcja wyboru kierunku przemiatania wierszy 0 0 1 1 0 0 SHL x x x SHL = 0: COM0->COM63 SHL = 1: COM63->COM0 ADC Select Instrukcja wyboru kierunku przemiatania kolumn. 0 0 1 0 1 0 0 0 0 ADC ADC = 0: kierunek normalny (SEG0->SEG131) ADC = 1: kierunek odwrotny (SEG131->SEG0) Power Control Instrukcja sterująca wewnętrznymi układami zasilania wyświetlacza. 0 0 0 0 1 0 1 VC VR VF VC VR VF Stan wewnętrznych układów zasilania 0 x x Układ przetwornicy napięcia jest wyłączony 1 x x Układ przetwornicy napięcia jest włączony x 0 x Układ regulatora napięcia jest wyłączony x 1 x Układ regulatora napięcia jest włączony x x 0 Układ wtórnika napięcia jest wyłączony x x 1 Układ wtórnika napięcia jest włączony Procedury obsługi wyświetlacza Jak wspominano na wstępie, procedury obsługi wyświetlacza zostały napisane w języku C dla mikrokontrolerów z rodziny AT91SAM7S oraz kompilatora arm-elf-gcc (WinARM). W przypadku, gdy wyświetlacz ma być podłączony do innych wyprowadzeń mikrokontrolera niż przedstawione na schemacie, należy dokonać modyfikacji w pliku S6B0724.h. W pliku tym umieszczone zostały definicje poszczególnych sygnałów sterujących oraz magistrali danych: #define S6B_E (1 << 8) /* wyprowadzenie PA8 -> E */ #define S6B_RW (1 << 9) 146

/* wyprowadzenie PA9 -> RW*/ #define S6B_RS (1 << 10) /* wyprowadzenie PA10 -> RS */ #define S6B_RST (1 << 11) /* wyprowadzenie PA11 -> RST */ #define S6B_CS1B (1 << 12) /* wyprowadzenie PA12 -> CS1B */ #define S6B_D0 0 /* pierwszym bit szyny danych jest wyprowadzenie PA0 */ Magistrala danych zajmuje osiem kolejnych wyprowadzeń portu PA, przy czym możemy dowolnie określić, które wyprowadzenie portu będzie bitem 0 szyny danych. Wyświetlacz może pracować w dwóch pozycjach (jak widać na fotografiach na początku artykułu): z wyprowadzeniami u dołu ekranu (tryb normalny) i z wyprowadzeniami u góry ekranu (tryb odwrotny ), przy czym współrzędne (0,0) zawsze będą wskazywały na lewy górny róg ekranu. Jest to możliwe dzięki odpowiedniej kombinacji bitów ADC i SHL. Określenie orientacji wyświetlacza sprowadza się do wykomentowania jednej z dwóch następujących linii znajdujących się w pliku S6B0724.h: #define POSITION_NORMAL #define POSITION_REVERSE Zawsze jedna z tych linii powinna być wykomentowana. Odczyt rejestru statusowego Instrukcja odczytu rejestru statusowego. Kontroler wyświetlacza do czasu zakończenia wykonywania poprzedniej instrukcji ignoruje kolejne instrukcje, dlatego też przed zapisaniem instrukcji należy sprawdzić stan flagi BUSY. W przypadku gdy znajduje się ona w stanie wysokim należy odczekać na jej wyzerowanie. (list. 1) unsigned char GLCD_ReadStatus(void) volatile int tmp, i; AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, S6B_CS1B S6B_RS); // CS1B = 0; //RS = 0 AT91F_PIO_SetOutput(AT91C_BASE_PIOA, S6B_RW); // RW = 1 -> Odczyt AT91F_PIO_CfgInput(AT91C_BASE_PIOA,(0xFF << S6B_D0)); tmp = ((AT91F_PIO_GetInput(AT91C_BASE_PIOA) >> S6B_D0) & 0xFF); return tmp; List. 1. Procedura odczytu rejestru statusowego void GLCD_WriteCommand(unsigned char commandtowrite) while((glcd_readstatus()&status_busy)); AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, S6B_RS S6B_CS1B S6B_RW); AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,(0xFF << S6B_D0)); AT91F_PIO_ForceOutput(AT91C_BASE_PIOA, (unsigned int)(commandtowrite << S6B_D0)); List. 2. Procedura zapisu rozkazu (z kontrolą BUSY) void GLCD_WriteData(unsigned char datatowrite) while((glcd_readstatus()&status_busy)); AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, S6B_RW S6B_CS1B); AT91F_PIO_SetOutput(AT91C_BASE_PIOA, S6B_RS); AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,(0xFF << S6B_D0)); AT91F_PIO_ForceOutput(AT91C_BASE_PIOA, (unsigned int)(datatowrite << S6B_D0)); List. 3. Procedura zapisu danej (z kontrolą BUSY) unsigned char GLCD_ReadData(void) unsigned char volatile tmp = 0; while((glcd_readstatus()&0x80)); AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, S6B_CS1B); AT91F_PIO_SetOutput(AT91C_BASE_PIOA, S6B_RS S6B_RW); AT91F_PIO_CfgInput(AT91C_BASE_PIOA,(0xFF << S6B_D0)); tmp = ((AT91F_PIO_GetInput(AT91C_BASE_PIOA) >> S6B_D0) & 0xFF); return tmp; List. 4. Procedura odczytu danej (z kontrolą BUSY) Zapis rozkazu Przed zapisaniem rozkazu sprawdzana jest flaga BUSY, w przypadku gdy jest ona w stanie wysokim program oczekuje na jej wyzerowanie (list. 2). Zapis danej Procedura zapisu danej przeznaczonej do wyświetlenia (list. 3). Przed zapisaniem danych sprawdzana jest flaga BUSY, w przypadku gdy jest ona w stanie wysokim program oczekuje na jej wyzerowanie. Każdorazowe zapisanie danej do wyświetlacza powoduje inkrementacje adresu kolumny. Po osiągnięciu wartości maksymalnej dalsza inkrementacja jest wstrzymywana. Odczyt danej Przed odczytem danych sprawdzana jest flaga BUSY (list. 4), w przypadku gdy jest ona w stanie wysokim program oczekuje na jej wyzerowanie. Po wykonaniu instrukcji adres kolumny jest automatycznie inkrementowany. Po osiągnięciu wartości maksymalnej dalsza inkrementacja jest wstrzymywana. Inicjalizacja wyświetlacza Procedura inicjalizacji wyświetlacza oraz portów mikrokontrolera. Następuje włączenie taktowania układu PIO, konfiguracja linii sterujących w tryb wyjściowy oraz ich ustawienie w stan domyślny oraz konfiguracja szyny danych w tryb zapisu synchronicznego. Inicjalizacja wyświetlacza polega na ustawieniu, w zależności od konfiguracji w pliku S6B0724.h, w tryb wyświetlania normalny bądź odwrócony, włączenia wewnętrznych układów zasilających oraz ustawieniu odpowiedniej wartości napięcia zasilającego wyświetlacz (napięcia kontrastu) oraz włączeniu wyświetlania (list. 5). Ustawienie współrzędnych ekranowych Funkcja ustawia współrzędne wyświetlacza, na których wykonana 147

DLA PRAKTYKÓW Wyświetlenie bitmapy Funkcja wyświetlająca bitmapę przyjmuje 5 argumentów: wskaźnik do tablicy z bitmapą znajdującą się w pamięci Flash, współrzędne pod którymi bitmapa ma zostać wyświevoid GLCD_Initalize(void) volatile int i; // inicjalizacja portów mikrokontrolera AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, (1 << AT91C_ID_PIOA)); // właczenie taktowania układu PIOA AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, (S6B_RS S6B_RW S6B_RST S6B_E S6B_CS1B)); // konfiguracja linii sterujacych AT91F_PIO_OutputWriteEnable(AT91C_BASE_PIOA,(0xFF << S6B_D0)); // konfiguracja linii danych // /inicjalizacja portów mikrokontrolera AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, S6B_RST);// wyzerowanie kontrolera for(i=0; i<100; i++); AT91F_PIO_SetOutput(AT91C_BASE_PIOA,S6B_RST); #ifdef POSITION_NORMAL GLCD_WriteCommand(LCD_SET_ADC_NOR); GLCD_WriteCommand(LCD_SET_SHL_REV); #else GLCD_WriteCommand(LCD_SET_ADC_REV); GLCD_WriteCommand(LCD_SET_SHL_NOR); #endif GLCD_WriteCommand(LCD_SET_BIAS_0); GLCD_WriteCommand(LCD_PWR_CTL 1); for(i=0; i<1000; i++); GLCD_WriteCommand(LCD_PWR_CTL 3); for(i=0; i<1000; i++); GLCD_WriteCommand(LCD_PWR_CTL 7); GLCD_WriteCommand(LCD_REG_RESISTOR 5); GLCD_WriteCommand(LCD_REF_VOLT_MODE); GLCD_WriteCommand(LCD_REF_VOLT_REG 18); for(i=0; i<1000; i++); GLCD_WriteCommand(LCD_DISP_ON); List. 5. Procedura inicjalizacji wyświetlacza void GLCD_GoTo(unsigned char column, unsigned char page) GLCD_WriteCommand(LCD_SET_PAGE page); GLCD_WriteCommand(LCD_SET_COL_HI ((column + COLUMN_OFFSET) >> 4)); GLCD_WriteCommand(LCD_SET_COL_LO ((column + COLUMN_OFFSET) & 0x0F)); List. 6. Procedura ustawienia współrzędnych void GLCD_WriteChar(char charcode) unsigned char fontcollumn; for(fontcollumn = 0; fontcollumn < FONT_WIDTH; fontcollumn++) GLCD_WriteData(font5x7[((charCode FONT_OFFSET) * FONT_WIDTH) + fontcollumn]); GLCD_WriteData(0); List. 7. Procedura wyświetlenia znaku alfanumerycznego void GLCD_WriteString(char * string) while(*string) GLCD_WriteChar(*string++); List. 8. Procedura wyświetlania ciągu znaków void GLCD_SetPixel(int x, int y, int color) unsigned char temp = 0; // zmienna pomocnicza GLCD_GoTo(x, (y/8)); // ponowne ustawienie współrzędnych temp = GLCD_ReadData(); // odczyt aktualnego stanu pikseli if(color) temp = (1 << (y % 8)); else temp &= ~(1 << (y % 8)); GLCD_GoTo(x, (y/8)); // ponowne ustawienie współrzędnych GLCD_WriteData(temp); // zapis odpowiednio zmodyfikowanej wartości List. 9. Procedura włączenia piksela Wyświetlenie znaku Wyświetlenie znaku polega na zapisie do wyświetlacza 5 kolejnych bajtów tworzących dany znak. Ponieważ nie ma sensu marnować miejsca w pamięci programu na znaki niewyświetlane (czyli pierwszych 31 znaków tablicy ASCII) pierwszy znak w tablicy (spacja) ma indeks 0, podczas gdy w tablicy ASCII ten znak posiada kod 32. Należy więc od kodu znaku przekazanego do funkcji jako parametr odjąć liczbę 32 (list. 7). Wyświetlenie ciągu znaków Parametrem funkcji jest wskaźnik do typowego dla języka C ciągu znaków zakończonego zerem. Napis wyświetlany jest począwszy od aktualnej wartości adresów strony i kolumny. Przekroczenie maksymalnej współrzędnej pionowej nie powoduje przeniesienia wyświetlanego tekstu do kolejnej linii (list. 8). Włączenie piksela Włączenie piksela polega na ustawieniu odpowiadającego mu bitu w pamięci wyświetlacza. Ponieważ możemy odczytywać i zapisywać tylko cały bajt procedura włączenia piksela przebiega następująco: ustawiamy współrzędne: poziomą oraz podzieloną przez 8 pionową (ponieważ dostęp do pamięci odbywa się całymi bajtami), odczytujemy z wyświetlacza aktualny stan pikseli, modyfikujemy odczytany bajt poprzez wykonanie na nim odpowiedniej operacji w zależności od wartości parametru color, zapisujemy tak zmodyfikowany bajt danych pod odpowiedni adres pamięci wyświetlacza (list. 9). Czyszczenie ekranu Procedura czyszcząca zawartość pamięci obrazu. Na wskutek jej wykonania pamięć obrazu zostanie wypełniona bajtami o wartości zero. Współrzędne ekranowe po wyczyszczeniu ekranu są ustawiane na wartość (0,0) (list. 10). zostanie następna operacja (odczyt, bądź zapis). Współrzędna pionowa może przyjmować wartości z zakresu 0 8 (numer strony). Współrzędna pozioma może przyjmować wartości z zakresu 0 131. Należy jednak pamiętać, że w przypadku wyświetlacza 64128H współrzędne są ograniczone organizacją ekranu wyświetlacza (list. 6). 148

Rys. 5. Okno początkowe programu Asystent LCD Rys. 7. Przykład wykorzystania funkcji rysującej prostokąt i linie proste Rys. 8. Przykład wykorzystania funkcji rysującej okręgi void GLCD_ClearScreen(void) unsigned char pageindex, columnindex; for(pageindex = 0; pageindex < NUMBER_OF_PAGES; pageindex++) GLCD_GoTo(0, pageindex); for(columnindex = 0; columnindex < NUMBER_OF_COLUMNS; columnindex++) GLCD_WriteData(0); GLCD_GoTo(0,0); List. 10. Procedura czyszczenia ekranu Rys. 6. Przykładowa bitmapa wyświetlona na ekranie wyświetlacza 64128H-RGB firmy Displaytech tlona oraz jej rozmiar. Współrzędna pionowa przyjmuje wartości 0 7 (numer strony). Wysokość bitmapy może przyjmować wartości będące wielokrotnością liczby 8. Natomiast współrzędna pozioma i szerokość bitmapy mogą przyjmować dowolne wartości (mieszczące się oczywiście na ekranie wyświetlacza) (list. 11). Do konwersji plików BMP można wykorzystać na przykład program Asystent Wyświetlacz do testów udostępniła redakcji firma Compart, www.compart.pl, tel. 22-6108527. void GLCD_Bitmap(char * bitmap, unsigned char left, unsigned char top, unsigned char width, unsigned char height) unsigned char pageindex, collumnindex; for(pageindex = 0; pageindex < height / 8; pageindex++) // pętla wykona się tyle razy, ile stron zajmuje bitmapa GLCD_GoTo(left, top + pageindex); // ustawienie współrzędnych for(collumnindex = 0; collumnindex < width; collumnindex++) // pętla wykona się tyle razy, ile pikseli szerokości ma bitmapa GLCD_WriteData(*(bitmap++)); List. 11. Procedura wyświetlenia bitmapy LCD http://radzio.dxp.pl/asystentlcd/ (rys. 5), korzystając z opcji konwersji bitmapy 128x64 pikseli dla sterownika KS0108 (organizacja pamięci kontrolera S6B0724 jest bardzo podobna do organizacji pamięci kontrolera KS0108). Przykład bitmapy wyświetlonej na wyświetlaczu przedstawiono na rys. 6. // zapis danych Funkcje graficzne Przykład działania funkcji rysującej prostokąt i linie przedstawiono na rys. 7, natomiast działanie funkcji rysującej okrąg przedstawiono na rys. 8. Radosław Kwiecień, EP radoslaw.kwiecien@ep.com.pl LCD i PC Pod adresem http://graphlcd.berlios.de jest dostępne oprogramowanie umożliwiające obsługę wyświetlaczy wyposażonych w sterowniki wymienione w ramce za pomocą komputera PC. Za jego pomocą można wyprowadzić wybrane dane z PC i oprogramowania na nim zainstalowanego na wyświetlacz graficzny (także VFD), co pozwala stosunkowo niewielkim kosztem efektownie doposażyć komputer. Hitachi HD61830 Toshiba T6963C Samsung KS0108 Epson SED1520 Epson SED1330 Noritake GU140X32F-7806 Noritake GU256X64-372 Noritake GU256X64-3XX0 Noritake 800 Series Z S I E C I 149