Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.
Pokazywanie postów oznaczonych etykietą Drzasiek. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Drzasiek. Pokaż wszystkie posty

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:

DSO uLAB1 - Przenośny oscyloskop i/lub płytka prototypowa z XMEGA - Opis modułu


Autor: drzasiek
Redakcja: dondu

7 Października 2013 roku firma Modulowo oraz MSX Elektronika wprowadziły do sprzedaży moduł przenośnego laboratorium elektronicznego, o nazwie DSO uLAB1 .




Moduł ten można nabyć w sklepie modułowo lub na Allegro u sprzedającego msx_elektronika.
Szczegółowe informacje o parametrach i funkcjonalności modułu można znaleźć na stronie producenta.

Moduł ten służyć może dodatkowo jako płytka prototypowa z wyświetlaczem lub osobno sama płytka lub wyświetlacz.



Ponieważ jestem autorem projektu, postanowiłem napisać kilka artykułów z opisem płytki oraz z przykładowymi bibliotekami w języku C, aby ułatwić potencjalnym nabywcom uruchomienie poszczególnych bloków systemu według własnych potrzeb.

W tym artykule przedstawię w skrócie część sprzętową modułu.


Mikrokontroler

Na płytce zamontowany został mikrokontroler ATXMega256A3BU.


Na etapie produkcji urządzenia, ma on wgrywany bootloader, a więc do programowania go nie potrzebujemy żadnego programatora. Wystarczy kabelek USB oraz darmowe oprogramowanie firmy Atmel o nazwie FLIP. Jak zaprogramować ten mikrokontroler za pomocą programu FLIP opisał Tomasz Francuz w artykule: XMEGA: Podłączamy przez USB

Aby wejść w tryb bootloadera, należy uruchomić urządzenie z wciśniętym przyciskiem TR (najwyżej położony przycisk).

Zasilanie

Urządzenie może być zasilane za pomocą kabla USB lub z baterii 3.7V. (standardowy akumulator li-ion lub li-pol). Na płytce umieszczony został także scalony układ kontroli ładowania – MCP73834.


Wyświetlacz

Zamontowany został moduł HY-28A z wyświetlaczem LCD TFT o przekątnej 2,8 cala, rozdzielczości 320x240, 65 tys. kolorów oparty o sterownik ILI9320. Wyświetlacz posiada zintegrowany rezystancyjny panel dotykowy ze sterownikiem XPT2046. Komunikacja z wyświetlaczem oraz sterownikiem panelu dotykowego obywa się za pomocą interfejsu SPI.

Bibliotekę obsługi wyświetlacza i przykładowy program opisałem w artykule: DSO uLAB1 - Uruchomienie wyświetlacza.


Interfejs
  • 4 klawisze 
  • wyprowadzone łącznie 16 nóg mikrokontrolera na listwy kołkowe
  • buzzer
  • dioda LED

Elementy dodatkowe
  • bateria 3V (CR1220) do zasilania RTC
  • kwarc zegarkowy


Wejścia analogowe

Dwa wejścia analogowe z gniazdami BNC, zakres wejściowy: +/- 20 V, rezystancja wejściowa 1MΩ, podłączone do 2 przetworników analogowo-cyfrowych mikrokontrolera. Możliwość próbkowania z częstotliwością do 2MHz na kanał.


Wyjście analogowe

Jedno wyjście analogowe z gniazdem BNC, rezystancja wyjściowa 600Ω, obciążalność max ±5mA, napięcie wyjściowe ±2V, podłączone do przetwornika cyfrowo-analogowego mikrokontrolera. Możliwość konwersji z częstotliwością 1MHz.


Wymiana danych

Gniazdo kart pamięci microSD.


Schemat modułu

A oto schemat ideowy modułu:

DSO uLAB1 - Schemat ideowy modułu przenośnego laboratorium elektronicznego.
Schemat ideowy modułu.

W następnym artykule przedstawię bibliotekę obsługi wyświetlacza oraz zamieszczę prosty projekt demonstracyjny.


Pytania?

Jeżeli macie jakieś pytania to z chęcią odpowiem :-)

Pozdrawiam,
Drzasiek

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

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.