Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

czwartek, 24 marca 2011

DSO uLAB1 - Uruchomienie wyświetlacza.


Autor: drzasiek
Redakcja: dondu


Wielu początkujących programistów, stając przed potrzebą użycia w swoim projekcie wyświetlacza graficznego, nie zdaje sobie sprawy w jaki sposób taki wyświetlacz działa, oraz jak się z nim komunikować.

Dodatkowym problemem jest wybór wyświetlacza ze względu na cenę (kolorowe wyświetlacze graficzne niestety nie są tanie) oraz czy za taką cenę dany wyświetlacz będzie posiadał odpowiednie możliwości oraz czy zdoła go obsłużyć.

Warto w takich przypadkach skorzystać z gotowych modułów, gdzie nie trzeba się martwić o odpowiednie podłączenie i zasilenie wyświetlacza oraz najlepiej, jeśli można dostać przykładowy program demonstracyjny, aby nie trzeba było rozgryzać danego sterownika od zera wertując setki stron dokumentacji.

W poniższym artykule przedstawię moduł wyświetlacza HY-28A:

Wyświetlacz LCD HY-28A ze sterownikiem ILI9320 i panelem dotykowym ze sterownikiem XPT2046.
HY-28A

jaki został użyty w module DSO uLAB1 oraz omówię w skrócie i zamieszczę bibliotekę obsługi tego wyświetlacza wraz z przykładowym projektem demonstracyjnym, utworzonym w Atmel Studio 6.


Moduł HY-28A

Jest to moduł z wyświetlaczem LCD TFT o przekątnej 2.8 cala, rozdzielczości 320x240 pikseli i 16 bitowej głębi kolorów. Wyświetlacz obsługiwany jest za pomocą sterownika ILI9320, w tym konkretnym module poprzez interfejs SPI. Dodatkowo, wyświetlacz posiada zintegrowany rezystancyjny panel dotykowy wraz ze sterownikiem XPT2046 zamontowanym na module, z którym komunikacja odbywa się również za pomocą interfejsu SPI.

Moduł posiada dodatkowo wbudowany stabilizator napięcia 3.3V oraz sterownik podświetlenia (domyślnie załączony). Poniżej kilka dokumentacji technicznych, które warto pobrać i zapisać:



Podłączenie do mikrokontrolera

Sterowniki wyświetlacza oraz panelu dotykowego zostały podłączone z mikrokontrolerem za pomocą interfejsu USART. Ale zaraz zaraz, przecież dopiero pisałem, że z tymi układami komunikujemy się za pomocą interfejsu SPI. Co jest grane?

Już wyjaśniam. Ponieważ jeden z dwóch dostępnych w tym mikrokontrolerze interfejsów SPI nie mógł być wykorzystany ze względu na współdzielenie pinów z USB, a drugi został wykorzystany do karty pamięci, zmuszony byłem obejść ten problem w taki sposób, aby urządzenia ze sobą nie kolidowały. Ponieważ wyświetlacz i panel dotykowy komunikują się z mikrokontrolerem w innym trybie SPI niż karta pamięci, nie mogłem ich bez przeszkód umieścić na tym samym interfejsie, ponieważ by ze sobą kolidowały i znacznie spowalniały pracę.

Dlatego też do wyświetlacza postanowiłem wykorzystać USART w trybie SPI. Co to znaczy? To znaczy tyle, że USART w mikrokontrolerach XMEGA można tak ustawić, że będzie kompatybilny z SPI.

Podłączenie wyświetlacza do mikrokontrolera można znaleźć na schemacie całej płytki w poprzednim artykule: DSO uLAB1 - Opis modułu


Przykład

A oto przykładowy projekt demonstracyjny przygtowany w Atmel Studio 6.
Pobierz: DSO_uLAB_LCD.rar
Kopia: DSO_uLAB_LCD.rar

Biblioteka obsługi wyświetlacza może zawierać podobne do dostępnych w internecie przykładowych funkcji. Funkcje te powstawały przez pewien okres czasu, ewaluowały z projektu na projekt. Nie jestem w stanie powiedzieć, czy nazewnictwo nie zostało wzorowane na dostępnych w internecie przykładowych kodach.


Projekt składa się z następujących plików:
  • main.c – główny plik źródłowy programu
  • ILI9320.c – plik źródłowy z deklaracjami funkcji obsługi wyświetlacza
  • ILI9320.h – plik nagłówkowy z definicjami wyprowadzeń, kolorów
  • fonts.h – plik nagłówkowy z tablicami wartości czcionek
  • images.h – plik nagłówkowy z tablicą wartości obrazka wyświetlanego na LCD
  • config.c – plik źródłowy z deklaracjami funkcji konfigurujących mikrokontroler
  • config.h – plik nagłówkowy z definicjami do konfiguracji

A oto program główny z opisem poszczególnych linii:

#include <avr/io.h>

#include <util/delay.h>

#include <inttypes.h>

#include "ILI9320.h"

#include "images.h"

 

int main(void)

{

   PORTD_DIR |= (1<<5);//konfiguruje podświetlenie - wyjście

   PORTD_OUT &=~ (1<<5);//konfiguruje podświetlenie – stan niski (wyłączone)

   clock32MHz_init();//włącza zegar 32 MHz

   CCPWrite (&MCU_MCUCR, MCU_JTAGD_bm);//wyłącza JTAG

   PORTF_DIR |= (1<<7);//konfiguruje linię Touch Panel CS - wyjście

   PORTF_OUT &=~ (1<<7);//Touch Panel CS = 0

   LCD_Init();//inicjalizacja LCD

   LCD_Clear(BLACK);//czyści ekran (zapełnia kolorem)

   PORTD_OUT |= (1<<5);//włącza podświetlenie

   LCD_Clear(GREEN);//czyści ekran (zapełnia kolorem)

           
   lcd_str_med_pio("Test czcionki medium",0,3,YELLOW,GREEN);//wyświetla tekst

   lcd_str_small_pio("Test czcionki small",0,20,ORANGE,GREEN); //wyświetla tekst

   lcd_Pixel (20,50,RED);//rysuje pixel

   lcd_Line_poz(10,310,230,WHITE);//rysuje linię poziomą

   lcd_Line_pio(10,40,230,WHITE);//rysuje linię pionową

   lcd_Area(50,150,50,50,BLUE);//zapełnia obszar kolorem

   lcd_line(10,310,40,230,PINK);//rysuje dowolną linię

   lcd_Image(test_img,190,60,40,112);//rysuje obrazek z tablicy danych

   lcd_Frame(188,59,42,115,2,RED); //rysuje ramkę

  
   while(1);  //pętla główna

}

Myślę, że poszczególne funkcje są napisane w taki sposób, że nie potrzeba tłumaczenia jakich argumentów wymagają i co robią.

Obsługa została napisana w taki sposób, aby punkt (0,0) znajdował się w lewym górnym roku ekranu (w normalnym położeniu urządzenia).

A oto fotografia, co powinno pojawić się na ekranie po wykonaniu tego programu demonstracyjnego:


W kolejnym artykule pokażę jak uruchomić i korzystać z panelu dotykowego oraz zamieszczę prosty program demonstracyjny z jego wykorzystaniem.

Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

9 komentarzy:

  1. No chyba każdego to jara, więc nie dziwie się Autorowi, skoro miał ku temu możliwość. Chociaż jak teraz patrzę na jakiejś stronie to 12$ (tylko nie widzę czy z podatkiem i od ilu darmowa dostawa). Za 50 dychy odrazu z panelem dotykowym byłoby ok. Dotychczas widywałem za 90 zł. Może kiedyś. Na elektrodzie koleś podsłuchał telefon i dzięki temu ma za 20 zł tyle wyświetlaczy 3" ile tylko chce. Tylko nie każdy ma FPGA. (i umie to obsłużyć)

    OdpowiedzUsuń
  2. Autorza nasz kochany myślisz wejść w STM32 :) ? Ja na to gorąco czekam .Pozdrawiam serdecznie

    OdpowiedzUsuń
  3. Np tak?:
    http://www.elektroda.pl/rtvforum/topic2544100.html

    OdpowiedzUsuń
  4. Czy w Polsce można zakupić ten wyświetlacz? Pozdrawiam i podziwiam!

    OdpowiedzUsuń
  5. Autorze, podpinam się pod prośbę kolegi który napisał wcześniej. Z chęcią zobaczymy jak konfigurujesz go pod STM32 ;)

    OdpowiedzUsuń
    Odpowiedzi
    1. Drodzy Anonimowi.
      Wystarczy zastąpić konfigurację GPIO i funkcje obsługi transmisji na te dla STM32.
      Reszta zostaje zupełnie ta sama, więc nie rozumiem gdzie jest problem :)

      Usuń
    2. Witaj :) problem jest z tą transmisją jak to ustawić itp. nie mam wielkiego doświadczenia z spi a tym bardziej z wyświetlaczami a hy28a wpadł mi w ręce ostatnio,bardzo chętnie zobaczył bym jak konfigurujesz gpio i obsługę transmisji; pomogło by mi to jakoś zrozumieć te elementy,a nie mogę się doczekać uruchomienia tego cuda. Pozdrawiam

      Usuń
  6. Witam,
    mam pytanie czy artykuł na temat tego panelu dotykowego został już napisany/opublikowany? Szukam już jakiś czas i nie mogę go znaleźć.

    OdpowiedzUsuń
  7. I ja chętnie bym poczytal o obsludze tego panelu dotykowego z jakims przykladem. Ale chyba nie bylo jeszcze nic opublikowanen

    OdpowiedzUsuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.