LAKI PINGVINI<>
012017<><>

Arduino: Rad sa ekranom (2)

Vizuelizacija informacija

Nastavljamo temu iz prošlog broja i upoznajemo se sa ostalim načinima za prikazivanje informacije upotrebom različitih tipova displeja za platformu Arduino.

Nokia do Tokia

Oni koji se sećaju vremena dolaska mobilne telefonije u naše krajeve svakako će se setiti i modela Nokia 5110 koji je uz Nokia 3210 (posle i 3310) predstavljao najpopularniji telefon na tržištu. Ovi telefoni su za prikazivanje podataka koristili Filipsov displej PCD8544 koji generiše crno-belu sliku rezolucije 84 × 48 tačaka, što je dovoljno za prikazivanje šest redova od po četrnaest karaktera sa matricom 5 × 8 tačaka. Danas se ovakvi displeji, montirani na module pogodne za priključivanje na Arduino, mogu nabaviti već po ceni od oko 1,5 do dva evra, što ih čini odličnim izborom za projekte gde je potreban prikaz jednostavnije monohromne grafike, animacije ili tekstualnih podataka uz minimalnu potrošnju energije (oko 200 mikroampera).

Prvo što treba znati u radu sa ovom vrstom ekrana je činjenica da se oni proizvode sa nekoliko različitih rasporeda pinova konektora. Ovde navodimo one najčešće:

Najcesci rasporedi konektora za displeje PCD8544

Pin  Tip1   Tip2      Tip3

1    RST    VCC       GND

2    CE     GND       VCC

3    DC     SCE       CLK

4    DIN    RST       DIN

5    CLK    D/C       D/C

6    VCC    DN(MOSI)  CS

7    LIGHT  SCLK      RST

8    GND    LED       LED

Osnovna razlika među njima je ta da kod jednih (mahom sa crvenom štampanom pločicom) na pin napajanja pozadinskog osvetljenja dovodimo signal GND, dok kod drugih (plavih) tu povezujemo napajanje od 3,3 volta.

Da bismo pojednostavili stvar, kreirali smo tabelu koja prikazuje različite oznake pinova sa njihovim funkcijama. Vidimo da su funkcije slične sa onima koje smo koristili kod displeja 1602.

Oznaka               Funkcija

VCC                  napajanje modula

GND                  uzemljenje

CE, SCE, CS          aktiviranje cipa (Chip Enable)

RST                  restart

DC, D/C              rezim: Data/Command

DIN, SDIN, DN(MOSI)  ulazni kanal podataka (Data IN)

CLK, SCLK, SCLC      klok sinhronizacija prenosa

LIGHT, LED, BL       napajanje pozad. osvetljenja

Preostaje nam da džamperima povežemo ekran sa linijama napajanja i data pinovima Arduina. Ukoliko želimo da oslobodimo jednu od linija za prenos podataka, moguće je povezati ekranski pin RST sa RESET pinom na Arduinu (obratiti pažnju na napomenu u donjem kodu). Isto tako, ukoliko ne nameravamo da koristimo pozadinsko osvetljenje, jednostavno isključimo žicu koja dovodi uzemljenje na pin LIGHT.

Arduino    LCD

D3         1 (RST)

D4         2 (CE)

D5         3 (DC)

D6         4 (DIN)

D7/RESET   5 (CLK)

5V         6 (VCC)

GND        7 (LIGHT)

GND        8 (GND)

Postoji nekoliko različitih programskih biblioteka koje podržavaju ovu vrstu ekrana. Najpopularnija je (mada i dosta spora) ona koju potpisuje u Arduino svetu poznata firma Adafruit i uz nju je potrebno instalirati biblioteku pod nazivom Adafruit GFX Library. Funkcijom Adafruit_PCD8544(3, 4, 5, 6, 7) određujemo koji pinovi displeja su korišćeni za povezivanje sa Arduinom i to u sledećem poretku: Adafruit_PCD8544(SCK, SDIN, D/C, CS, RES).

Jedan primer korišćenja ove biblioteke bi izgledao od prilike ovako:

#include <Adafruit_GFX.h>

#include <Adafruit_PCD8544.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);

// stavljamo 0 umesto 7 ako koristimo pin RESET

void setup() {

  display.begin(); // inicijalizacija

  display.clearDisplay();

  display.display();

  display.setContrast(45); // kontrast ekrana

  delay(1000);

  display.setTextSize(2); // velicina teksta

  display.setTextColor(BLACK); // boja

  display.setCursor(0,0); // pozicija

  display.println("NOKIA\nDo\nTokia");

  display.display();

}

void loop() {

}

Početak programa je posvećen inicijalizaciji ekrana, a posle toga slede komande vezane za ispis teksta. Obavezno je navođenje funkcije display() nakon komandi za ispisivanje bilo kakvog sadržaja. Primećujemo i funkciju setContrast() čiji je zadatak da programski podesi oštrinu slike, koja inicijalno može da bude dosta bleda. Ako je i kod vas takav slučaj, tada se malo poigrajte sa jedinim parametrom ove funkcije i odaberite optimalnu vrednost.

Kada u narednom poglavlju budemo govorili o povezivanju TFT displeja putem hardverskog SPI interfejsa, videćemo kako funkcioniše mehanizam koji možemo primeniti i kod ekrana sa kontrolerom PCD8544. Za to će nam biti potrebna biblioteka koju možemo preuzeti sa lokacije goo.gl/IHCGwK. Ukoliko vam je potrebna veća brzina, svakako uzmite u razmatranje tu varijantu.

Prilikom kreiranja projekata baziranih na ovim ekranima, toplo se preporučuje postavljanje otpornika od deset kilooma između kontrolnih linija displeja i digitalnih izlaza Arduina, kao i otpornika od 330 oma pred pinom napajanja. Ipak je u pitanju uređaj koji je namenjen radu na 3,3 volta. Specifikacija govori da su kontrolne linije tolerantne na napon od pet volti, ali je ipak mudrije zaštititi uređaj i produžiti mu vek trajanja.

Postoji i drugi (komplikovaniji) način povezivanja ovog displeja uz pomoć „šiftera” (IC koji pomera napon sa pet volti na 3,3 volta) ali to zbog ograničenog prostora ovde nećemo obrađivati.

Boje su u nama

Kada je u pitanju Arduino platforma, na raspolaganju nam je desetak modula sa TFT displejima u boji različitih dimenzija, rezolucija i cena koje se (u zavisnosti od modela) kreću između tri i petnaest evra.

Mi ćemo u ovom primeru koristiti modul: 1.8TFT SPI 128*160 v1.1, koji je baziran na displej kontroleru pod nazivom ST7735R. Osim modela koje pokreće taj čip, često se sreću i oni koji su zasnovani na kontroleru ILI9163. Generalno, ovaj prvi je bolji izbor zbog bolje podrške po pitanju programskih biblioteka. Arduino IDE ima ugrađenu biblioteku za ispis na TFT ekranima, ali je ona jako spora, pa se preporučuje izbor alternativnih biblioteka koje donose ubrzanje od dva do deset puta. Moduli vrlo često osim TFT displeja koji prikazuje 262144 boje na sebi imaju i slot za standardne SD memorijske kartice. Kao što je obično slučaj sa vrlo jeftinim stvarima, o njima nećete od prodavca dobiti mnogo informacija, pa ćete morati da se snalazite kako znate i umete. Situacija je slična kao kod opisanih Nokia displeja, pa i ovde imamo više modela sa različitom bojom, rasporedom elemenata i izvoda.

Najčešći su modeli sa osam pinova (plus četiri dodatna za SD konektor), dok je moguće pronaći i one sa deset, jedanaest ili čak šesnaest pinova. U našem konkretnom slučaju raspored izgleda ovako:

pin  displej  funkcija

1    VCC      napajanje modula

2    GND      uzemljenje

3    CS       izbor uredjaja

4    RESET    reset

5    A0       linija komandi

6    SDA      signal podataka

7    SCK      klok signal

8    LED      napajanje svetla

Na zadnjoj stranici modula nalazi se mesto označeno sa J1 i koje predstavlja selektor napona sa kojim će uređaj funkcionisati. Ukoliko dva izvoda nisu spojena lemom, on će raditi na pet volti, dok u slučaju spajanja radi na 3,3 volta. Pri ovome morate biti oprezni jer ukoliko koristite displej sa spojenim konektorom J1 na naponu od pet volti, on će pregoreti. Napajanje osvetljenja displeja obavezno ide na 3,3 volta (ili na GND kod nekih modela). Inače, različiti naponi su stvar koja izaziva glavobolju. Zbog nedostatka dokumentacije smo prisiljeni da informacije tražimo po internetu. Na dosta mesta ćemo pročitati da je rad sa naponom od pet volti (iako ga po specifikaciji podržava) štetan po sam uređaj i da doprinosi njegovom preranom kvarenju. Zato se preporučuje postavljanje otpornika na linijama prenosa podataka. Mi ćemo u našem primeru, jednostavnosti radi, koristiti direktno povezivanje bez otpornika, ali u slučaju realizacije nekog praktičnog projekta, ne košta nas mnogo da ih postavimo.

U oznaci naziva modula smo videli da se koristi akronim SPI, sa značenjem Serial Peripheral Interface. Arduino podržava kako hardverski SPI interfejs tako i onaj koji se emulira softverskim putem. SPI je protokol koji omogućava simultanu dvosmernu komunikaciju između dva ili više uređaja od kojih je jedan u režimu Master, dok su ostali povezani kao Slave. Za njegovu punu implementaciju potrebne su četiri linije prenosa podataka, kao što prikazuje sledeća ilustracija:

Kod modela Arduino Uno, sledeći pinovi obavljaju funkciju hardverskog SPI interfejsa:

pin  skraćenica  puni naziv

13   SC(L)K      Serial Clock

12   MISO        Master In, Slave Out

11   MOSI        Master Out, Slave In

10   SS          Slave Select

SCK je zadužen za klok sinhronizaciju prenosa, MOSI prenosi podatke od mastera prema slejvu, MISO, opet, od slejva prema masteru, a SS određuje sa kojim se od slejv uređaja trenutno komunicira. Treba znati da je SDA analogno funkciji MOSI. Kao što vidimo, MISO je ostao neiskorišćen, pošto je po svojoj prirodi ispis na ekran komunikacija u samo jednom smeru. Dakle, shema povezivanja ekrana i Arduina Uno bi izgledala ovako:

Hardverski SPI

pin  TFT    Arduino

1    VCC    +5V

2    GND    GND

3    CS     10

4    RESET  8

5    A0     9

6    SCK    13

7    SDA    11

8    LED    +3,3V

Prilikom implementacije softverskog SPI interfejsa moguće je koristiti proizvoljne digitalne izlaze. Jedan takav slučaj bi mogao da izgleda ovako:

Softverski SPI

pin  TFT    Arduino

1    VCC    +5V

2    GND    GND

3    CS     2

4    RESET  3

5    A0     4

6    SCK    5

7    SDA    6

8    LED    +3,3V

Treba odmah reći da upotreba hardverskog SPI ima za posledicu veoma brže iscrtavanje na ekranu pa bi je trebalo koristiti kad god je to moguće. Softverski SPI je od koristi kada su linije hardverskog SPI iz nekog razloga zauzete. Navodimo primer jednostavnog koda zasnovanog na standardnoj TFT Arduino biblioteci:

#include <TFT.h> // Arduino LCD biblioteka

#include <SPI.h> // podrska SPI interfejsa

#define RST 8 // pin za reset

#define A0 9 // pin prenosa podataka

#define CS 10 // pin izbora uredjaja

// inicijalizacija biblioteke

TFT displej = TFT(CS, A0, RST);

void setup() {

  displej.begin(); // uvek ide na pocetku

  displej.background(50, 0, 0); //tamno plava

  displej.stroke(0, 0, 255); // crvena boja ispisa

  displej.setTextSize(1); // najmanji font

  displej.text("Svet Kompjutera\n ", 0, 0);

  displej.stroke(0, 255, 0); // zelena

  displej.setTextSize(2); // veci font

  displej.text("Svet\nKompjutera\n ", 0, 15);

  displej.stroke(255, 255, 255); // bela

  displej.setTextSize(3); // jos veci font

  displej.text("Svet\nKompjutera\n ", 0, 50);

}

void loop() {}

Prvo u projekat uključujemo kôd iz biblioteka TFT i SPI, da bismo zatim definisali na koje pinove Arduina su priključene tri navedene linije prenosa. Onda te vrednosti prosleđujemo kao argumente funkcije za inicijalizaciju biblioteke. Funkcija Begin se poziva pre početka ispisivanja na ekran (inicijalizacija). Zatim sledi funkcija za postavljanje boje pozadine i nakon nje blok linija za ispis tri niza znakova na ekranu. Svakom nizu karaktera zadajemo veličinu fonta i boju ispisa. Treba napomenuti da se boje definišu u formatu BGR umesto mnogo češćeg RGB. Kao i u slučaju kada smo pisali o ekranu Nokia i ovde je preporučljivo korišćenje biblioteka pod nazivom Adafruit ST7735 i Adafruit GFX (ova druga je potrebna za funkcionisanje prve) koje u sebi sadrže rašireni set komandi za crtanje i ispis teksta.

• • •

U sledećem broju bavićemo se načinima povezivanja uređaja Arduino sa modulima za bežičnu komunikaciju.

Igor S. RUŽIĆ

 
BunsenLabs Linux
Kada se pakao smrzne
Stonoga zvana GPIO
Arduino: Rad sa ekranom (2)
Šta mislite o ovom tekstu?
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2018. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 3.22
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



Naslovna stranaPrethodni brojeviOpšte informacijeKontaktOglašavanjePomoćInfo in English

Svet kompjutera