PGM12864B-NSW grafik ekranı Arduino UNO ile kullanmak

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
24,020
Elimde 128x64 piksel olan PGM12864B-NSW grafik LCD var. Bunu Arduino UNO ile kontrol etmek için hangi bağlantıları yapmamız gerektiğini araştıralım. Mümkün olduğunca bir yerlerden hazır kod almadan, display ve arduino'nun teknik dokümanlarından giderek işi yapmaya çalışalım.

1731173607289.jpeg


1731173617755.jpeg
 
Öncelikle üreticinin bu display için verdiği datasheet'i buluyoruz. Ben özdisan'dan almışsım ve oradaki datasheet'i referans alacağım.

 

Ekler

  • 859983_1896570268..pdf
    968.7 KB · Görüntüleme: 14
Display pin yapısı şöyle:

1731173856227.png
 
Datasheet'e bakınca arka plan aydınlatması için 5V verin demiş, ama Anot ve Katot bağlantısı vermiş. Seri direnç bağlanacak mı yoksa gerek yok mu belli değil. Ben de 100 mA akım sınırlama ile 5V verdim. 92 mA gibi bir akım çekti, ekran da uygun bir parlaklığa geldi. Demekki seri dirence gerek yok.
 
Yalnız abi SPI bağlaman lazım. Beslemeler hariç 3 kablo kullanacaksın.
 
Hmm şimdi baktım da Özdisan'daki şu anda benim elimde olan değil. Bendeki ürün kalkmış onun yerine PGM12864A-NSW-BBW-01 gelmiş. Bendekinin tam olarak model numarası PGM12864B-NSW-BBS-01. Zaten bu 2013 yılı yapımı, oldukça eski.

Elektrovadi'de daha yakın bir model var, ama pin yapıları özdisan'daki ile aynı değil.

Screenshot 2024-11-09 at 21-10-49 PGM12864B.pdf.png
 
Hmm şimdi baktım da Özdisan'daki şu anda benim elimde olan değil. Bendeki ürün kalkmış onun yerine PGM12864A-NSW-BBW-01 gelmiş. Bendekinin tam olarak model numarası PGM12864B-NSW-BBS-01. Zaten bu 2013 yılı yapımı, oldukça eski.

Elektrovadi'de daha yakın bir model var, ama pin yapıları özdisan'daki ile aynı değil.

38013 eklentisine bak
PGM12864B-NSW-BBS-01 pin yapısını söyler misin

ChatGPT:​


PGM12864B-NSW-BBS-01, 128x64 piksel çözünürlüğe sahip bir grafik LCD (GLCD) modülüdür. Bu tür ekranlar genellikle ST7920 veya benzeri bir denetleyici çipi kullanır ve birçok mikrodenetleyici platformu ile uyumludur. İşte bu ekranın pin yapısı:

PGM12864B-NSW-BBS-01 Pin Yapısı

  1. VSS: GND (Toprak)
    • Ekranın toprak bağlantısı. Mikrodenetleyicinin veya güç kaynağının GND hattına bağlanır.
  2. VDD: +5V
    • Besleme voltajıdır. Genellikle 5V ile çalışır. Bu pini, mikrodenetleyicinin veya güç kaynağının +5V çıkışına bağlayın.
  3. VO: Kontrast Ayarı
    • Kontrast voltajı için kullanılan pindir. Bu pine bir potansiyometre (genellikle 10kΩ) bağlanarak kontrast ayarı yapılabilir. Potansiyometrenin bir ucu GND'ye, diğer ucu 5V'a, orta ucu ise VO pinine bağlanır.
  4. RS: Register Select (Komut veya Veri Seçme)
    • Bu pin komut ve veri modunu seçer. Komut modu için LOW, veri modu için HIGH yapılır.
  5. R/W: Read/Write (Okuma/Yazma)
    • Bu pin okuma ve yazma işlemlerini seçer. Yazma için LOW, okuma için HIGH yapılır.
  6. E (EN): Enable (Etkinleştirme)
    • Bu pin veri transferini tetikler. Veri yazılacaksa bu pine kısa bir yüksek darbe (pulse) uygulanır.
7-14. DB0 - DB7: Veri Pinleri (D0 - D7)
  • 8-bit veya 4-bit veri aktarımı için kullanılan veri pinleridir. Ekrana veri gönderirken bu pinler kullanılır.
  1. PSB: Seri/Paralel Seçimi
  • Bu pin, seri ve paralel veri modları arasında seçim yapar. Paralel mod için HIGH, seri mod için LOW yapılır.
  1. NC: Not Connected
  • Bu pin genellikle kullanılmaz.
  1. RST: Reset
  • Ekranı sıfırlamak (resetlemek) için kullanılır. Düşük (LOW) sinyal verilerek ekran sıfırlanır.
  1. VOUT: Voltaj Çıkışı
  • Dahili voltaj regülatörü çıkışıdır. Harici bir bağlantı gerektirmez.
  1. BLA: LED Arka Aydınlatma Anot (+)
  • Arka aydınlatmanın pozitif ucu. Genellikle 5V beslemeye bağlanır.
  1. BLK: LED Arka Aydınlatma Katot (-)
  • Arka aydınlatmanın negatif ucu. Genellikle GND’ye bağlanır.
Bu pinler ile PGM12864B-NSW-BBS-01 modülünü mikrodenetleyiciye doğru bir şekilde bağlayabilir ve 128x64 grafik LCD ekranı kullanabilirsiniz.

Bu SPI değil paralel port.
Yani? Benim kendi kullandığımda mı SPI değil paralel port? Ben mi yanlış teaffuz ediyorum?
 
ChatGPT nin önerdiği bağlantı özdisan'ın aynısı gibi duruyor. Ama elektrovadinin datasheet'indeki model numarası da benim ekrana daha yakın. Tipik çin datasheet'leri işte ...

Yani? Benim kendi kullandığımda mı SPI değil paralel port? Ben mi yanlış teaffuz ediyorum?

Seninkisi SPI dır herhalde. Paralel port olsaydı kesinlikle SPI'dan anlamazdı.
 
Abi hangisi olduğunu tespit etmek için şöyle bir yol deneyebilirsin;

Meselea elektrovadideki pin durumuna göre 5 numaralı pin contrast ayarı yapıyor olmalı.
10K potu breadboarda takıp sağına soluna vcc gnd, orta pininide ekrandaki 5 numaralı pine bağlarsan pot ile kontrast ayarı yapabilirsin.
Olmazsa eğer aynı ayaraı 3 numaralı pin ile denersin.
Hangisinde olursa o yapıyı kullanırsın.
 
Birde abi özdisandaki linkini paylaştığın ekran resimdeki IC'lerden birini kullanıyor. Belki onların datasheet'inden bir yere varılır.

Ekran görüntüsü 2024-11-09 215850.png
 
Son düzenleme:
Evet şimdi VO yu iki ihtimal olarak da denedim. Elektrovadi'deki datasheet doğru. O bağlantıya göre yapınca kontrast ayarı çalışıyor.
 
Abi pin sıkarken uyudun mu ne yaptın? Çok ta şeyetme. :D
Ben tüm pinleri kullanarak görüntü aldım. Muhtemelen sende o şekilde alırsın. Ama bana SPI lazım o yüzden B versiyon bir ekran daha almam gerekecek.
 
Sonra da arduino IDE library manager'de KS0108_GLCD kütüphanesini kurdum.

1731186407874.png
 
KS0108_GLCD.h header dosyasına bakınca, iki tane constructor görüyoruz. Birisi 128x64 olan için diğeri de 192x64 olan için.

KS0108_GLCD.h:
  // two KS0108 chip, 128x64 pixel resolution
  KS0108_GLCD(uint8_t DI, uint8_t RW, uint8_t EN, uint8_t DB0, uint8_t DB1, uint8_t DB2, uint8_t DB3, uint8_t DB4,
             uint8_t DB5, uint8_t DB6, uint8_t DB7, uint8_t CS1, uint8_t CS2, uint8_t RES);
  // three KS0108 chip, 192x64 pixel resolution
  KS0108_GLCD(uint8_t DI, uint8_t RW, uint8_t EN, uint8_t DB0, uint8_t DB1, uint8_t DB2, uint8_t DB3, uint8_t DB4,
             uint8_t DB5, uint8_t DB6, uint8_t DB7, uint8_t CS1, uint8_t CS2, uint8_t CS3, uint8_t RES);

Bendeki ekran 128x64, o yüzden ilk prototipi kullanarak ekran nesnesini oluşturuyoruz

C++:
#include "Adafruit_GFX.h"
#include "KS0108_GLCD.h"

#define LCD_DI  8
#define LCD_RW  9
#define LCD_E   10
#define LCD_RST 11
#define LCD_CS1 12
#define LCD_CS2 13

static KS0108_GLCD glcd(LCD_DI,
                        LCD_RW,
                        LCD_E,
                        0, 1, 2, 3, 4, 5, 6, 7,
                        LCD_CS1,
                        LCD_CS2,
                        LCD_RST);

void setup()
{
}

void loop()
{
}
 
Minimal bir test programı yazdım. Ekranı önce piksel piksel ON yapıyor, sonra da piksel piksel off yapıyor. Ama tabiki doğru çalışmıyor :temkinli1:

C++:
#include "Adafruit_GFX.h"
#include "KS0108_GLCD.h"

#define LCD_DI  8
#define LCD_RW  9
#define LCD_E   10
#define LCD_RST 11
#define LCD_CS1 12
#define LCD_CS2 13

static KS0108_GLCD glcd(LCD_DI,
                        LCD_RW,
                        LCD_E,
                        0, 1, 2, 3, 4, 5, 6, 7,
                        LCD_CS1,
                        LCD_CS2,
                        LCD_RST);

void setup()
{
  Serial.begin(115200);

  glcd.begin(true);
  glcd.clearDisplay();
  glcd.display();
}

static int16_t x = 0;
static int16_t y = 0;
static uint16_t color = 0;

void loop()
{
  glcd.drawPixel(x, y, color);
  glcd.display();

  x = x + 1;
  if (x == 128)
  {
    x = 0;
    y = y + 1;

    Serial.print("y = "); Serial.print(y); Serial.print("\n");

    if (y == 64)
    {
      y = 0;
      color = (color == KS0108_ON) ? KS0108_OFF : KS0108_ON;
    }
  }
}

Sadece iki tane satır farklı yerlerde dolduruluyor

1731187977645.jpeg
 
Kütüphanese örnek kod varya abi.
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,896
Mesajlar
117,901
Üyeler
2,803
Son üye
asimavi

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top