LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

Mikrokontrolery Infineon XMC4500 w praktyce, część 5. Obsługa kolorowego wyświetlacza LCD TFT

Opis aplikacji

System w warstwie fizycznej składa się z płytki XMC4500 Relax Kit oraz modułu KAmodTFT2. Wyprowadzenia RESET, SCE, DIN oraz CLK wyświetlacza z modułu KAmodTFT2 zostały podłączone odpowiednio do wyprowadzeń P1.8, P1.9. P1.10 oraz P1.11 mikrokontrolera z płytki XMC4500 Relax Kit. Schemat elektryczny pokazano na rysunku 5. Rzeczywiste połączenie przedstawiono na fotografii 6.

 

Rys. 5. Schemat elektryczny komponentów wykorzystanych w aplikacji

Fot. 6. Zdjęcie połączonej płytki XMC4500 Relax Kit z modułem z KAmodTFT2

Aplikacja ma być prostym przykładem wykorzystania wyświetlacza, dlatego przewidziany scenariusz obejmuje wyświetlenie kolejno tekstu, figury geometrycznej oraz obrazka. Schemat blokowy programu przedstawiono na rysunku 7.

Rys. 7. Schemat blokowy działania aplikacji

Biblioteka obsługi wyświetlacza

Wyświetlacz od telefonu Nokia 6100/6610 cieszy się dużą popularnością wśród elektroników hobbystów, dzięki czemu powstało wiele dedykowanych dla tych wyświetlaczy bibliotek, które ich twórcy udostępniają bezpłatnie w Internecie. Tworząc aplikację warto skorzystać z takiej formy gotowego oprogramowania, zamiast pisać je od początku. W niniejszej aplikacji postąpiono właśnie w taki sposób. Użyta biblioteka pochodzi ze strony http://atomsoft.wordpress.com, którą prowadzi Jason Lopez. Kod biblioteki, który napisany został dla mikrokontrolera Microchip PIC18F248 można pobrać pod adresem. Biblioteka ta składa się z dwóch plików: źródłowego o nazwie lcd.c oraz nagłówkowego o nazwie lcd.h. Lista najważniejszych zaimplementowanych w nich funkcji wraz z krótkim opisem działania została przedstawiona w tabeli 1.

Tab. 1. Lista najważniejszych zaimplementowanych funkcji w bibliotece wyświetlacza wraz z krótkim opisem

Funkcja

Opis działania

LCDFill()

Wypełnienie ekranu zadanym kolorem

LCDInit()

Zainicjowanie wyświetlacza

LCDInit()

Wypełnienie wskazanego piksela zadanym kolorem

LCDSetLine()

Narysowanie linii o zadanym kolorze między wskazanymi punktami

LCDSetRect()

Narysowanie prostokąta o zadanym kolorze między wskazanymi punktami

LCDSetCircle()

Narysowanie okręgu o zadanym kolorze i promieniu i punkcie będącym środkiem okręgu

LCDPutChar()

Napisanie pojedynczego znaku o zadanym rozmiarze oraz kolorze tekstu i tła, w zadanym miejscu

LCDPutStr()

Napisanie łańcucha znaków o zadanym rozmiarze oraz kolorze tekstu i tła, w zadanym miejscu

LCDWriteBMP()

Narysowanie obrazka z pliku graficznego typu BMP

W bibliotece interfejs komunikacyjny do transmisji szeregowej zaimplementowany został programowo. Oznacza to, że wysyłanie danych do wyświetlacza odbywa się nie za pomocą sprzętowego interfejsu SPI, a przy użyciu portów wejścia/wyjścia.

Jako że biblioteka została napisana pod mikrokontroler Microchip PIC18F248, aby mogła ona być używana przez mikrokontroler z rodziny XMC4000 firmy Infineon konieczne jest dokonanie w niej pewnych zmian.

Zmiany w pliku lcd.h:

  • Usunięcie dwóch dyrektyw #include:
#include 
#include
  • Usunięcie linii:
#ifndef __LCD_H
  • Usunięcie definicji do sterowania portami:
#define LCD_RES LATBbits.LATB0       //RESET
#define LCD_DIO LATBbits.LATB1       //SERIAL DATA
#define LCD_SCK LATBbits.LATB2       //CLOCK
#define LCD_CS  LATBbits.LATB3       //CHIP SELECT
#define LCD_TRIS TRISB
#define LCD_MASK 0xF0
  • Usunięcie słowa ‘rom’ z: deklaracji funkcji LCDPutRomStr() i LCDWriteBMP()

Zmiany w pliku lcd.c:

  • Dodanie dyrektyw #include:
#include 
#include 
  • Usunięcie słowa ‘rom’ z: deklaracji funkcji LCDPutRomStr() i LCDWriteBMP(), tablic FONT6x8[],FONT8x8[] i FONT8x16[] oraz wskaźników *pFont i *pChar
  • Dodanie deklaracji i definicji funkcji do sterowania portami:
void LCD_RES(unsigned char value)
{
	IO003_WritePort(IO003_Handle0,value);
}
void LCD_CS(unsigned char value)
{
	IO003_WritePort(IO003_Handle1,value);
}
void LCD_DIO(unsigned char value)
{
	IO003_WritePort(IO003_Handle2,value);
}
void LCD_SCK(unsigned char value)
{
	IO003_WritePort(IO003_Handle3,value);
}

  • Zamiana definicji do sterowania portami i ich przypisań (LCD_RES = 1, LCD_RES = 0, LCD_DIO = 1, LCD_DIO = 0, LCD_SCK = 1, LCD_SCK = 0, LCD_CS = 1, LCD_CS = 0) na wywołanie funkcji (LCD_RES(1), LCD_RES(0), LCD_DIO(1), LCD_DIO(0), LCD_SCK(1), LCD_SCK(0), LCD_CS(1), LCD_CS(0))
  • Usunięcie wyrażeń ‘Nop()’
  • Usunięcie linii:
LCD_TRIS &=LCD_MASK;
LCD_TRIS = 0;
  • Zmiana ciała funkcji delay_ms() na:
  unsigned int x;
    for(x=0;x<ms;x++)
   {
     int i=0;
     for(i=0; i<10; i++)
     {
      }
    }
SZYMON PANECKI urodził się 17 lutego 1985 roku w Milanówku. Tytuł inżyniera Elektroniki i Telekomunikacji, a następnie magistra inżyniera na Wydziale Elektroniki Politechniki Wrocławskiej uzyskał kolejno w roku 2008 i 2010. Ponadto tytuł inżyniera Informatyki na Wydziale Elektroniki Politechniki Wrocławskiej uzyskał w roku 2011. Szymon Panecki jest doświadczonym elektronikiem-konstruktorem, który w trakcie swojej zawodowej kariery koncentruje się na definiowaniu i projektowaniu (zarówno w warstwie sprzętowej jak i programowej) systemów wbudowanych opartych na mikrokontrolerach z rdzeniem ARM od różnych producentów, w tym przede wszystkim Infineon Technologies (rodzina XMC1000 i XMC4000), STMicroelectronics (STM32 i STR7), Freescale Semiconductor (Kinetis L) oraz Silicon Labs (EFM32 i Precision32). Obszarem jego szczególnego zainteresowania są systemy wykorzystujące czujniki środowiskowe (wilgotności, ciśnienia, temperatury) oraz przemysłowe i motoryzacyjne interfejsy komunikacyjne, głównie CAN. Szymon Panecki od wielu lat współpracuje z czasopismem "Elektronika Praktyczna" oraz portalem Mikrokontroler.pl, na łamach których publikuje liczne artykuły dotyczące swoich projektów, jak również nowości produktowych firm z branży półprzewodnikowej.