Grafik Lcd Nasıl sürülür

Başlatan ltcelik, 23 Kasım 2010, 22:42:47

ltcelik

Öncelikle konuyu doğru yerde eçmadıysam özür dilerim..

Konun çok acemisiyim...

Elimde eski bir dijital fotoğraf makinesi var.. Bunun lcd panellerini çıkarıp bilgisayar veya başka kaynaktan video sinyali göndermek istiyorum bu prensipte nasıl mümkün olur?

muhittin_kaplan

zor olur.
önce bu lcd nin bilgi sayfasını (datasheet) bulmak gerek. bunun için bu lcd nin parça kodunu öğrenmek gerek.

Mujdat117

merhaba arkadaşlar
sizlerle kendi yaptığım bir kodu paylaşmak istiyorum.
asm dili ile yazılmış glcdlere resim yükleme uygulaması pic16f877 ve 16f874 ile denedim va çalıştırdım
glcd olarak ta ks0108 sürücü entegresine sahip herhanigib bir glcd olabilir benim elimde powertıp pg-12864d(128×64) ve NANYA LMC97S005C(128×64) tip glcdlerde denedim bağlantıları doğru yaptıgınız sürece görüntü elde edersiniz.
diğim gibi ks0108 entegresine sahip herhangibi bir glcde sürebilirsiniz yeterki pin bağlantılarını düzgün yapın. koduları yanında  nasıl çalıştıklarını ve ne iş yaptıklarını gösterir açıklamalar mevcut.
kısaca Glcd lerin nasıl çalıştığını ilim döndüğünce açıklamaya çalışaym ve kodları inceleyelim
öncelikle pinleri ve kısaca neişe yaradıklarını açıklamakla başlayalım işe
Pinler ve Anlamları height=294
1 Nolu Pin (VDD): güç kaynağından +5V bağlanacağı pin
2 Nolu Pin(VSS): güç kaynağından GND bağlanacağı pin
3 Nolu Pin(V0): 10k tirimpot 'un 1 nolu bacağı (VEE bacağı olan glcd lerde Vee bacağına)Gnd ye bağlanır. 3 nolu bacağı +5v bağlanırr ve ortadaki out bacağı ise glcd nin 3 nolu bacağına bağlanarak ekran kontrası ayarlamada kullanılır.
4-11 Nolu Pin(D0-D7): glcdye veri/komut bu pinler üzerinden gönderilir.
14 Nolu Pin(RST): Glcd resetlemek için kullanılır.(ekranı siler)
15 Nolu Pin(R/W): Okuma(1)/Yazma(0) pini yani glcden veri okunacaksa bu pin 1(5v) yapılır ve glcde den okuma işlemi yapılabilir. Bu pin 0(0v) iken glcdye yazma modunda kuulanılır ve veri/komut gönderimi yapılabilir.
16 Nolu Pin(D/I): Veri/Komut pini glcdye gönderilen data nın verisi 'mi(karekter yada resim verisi)  yoksa komut 'mu (glcd yi aç veya satır komutu) olduğunu oldugu bu pinin durumunagöre belirlenir. pinin değeri 0(0v) iken glcd komut kaydedicisi modundadır. pinin değeri 1 (5v) iken glcd veri kaydedicisi modunda oldugun gösterir.
17 Nolu Pin(E): glcdye gönderilen datanın glcd tarafından işlenmesini sağlar. 1 durumundan 0 'a çekildiğinde D0-D8 pinlerindeki veriyi glcde tarafından işleme alınır.
18 Nolu Pin(VEE): bu pin glcd nin -volut pinidir. glcdye gelen akımın – olarak bu bacaktan çıkış alınır. bu pin 10kohm luk bir potla glcd nın V0 pinine baplanarak kullanılabilir veya boş bırakılır.
19-20 Nolu Pin(Led A ve Led K): glcd nin zemin aydınlatması için kullanılan pinidir Anot ucu +5v bağlanır ve Katot pini -Gnd ucuna bağlanarak led çalıştırılır.
12-13 Nolu Pin(CS1 ve CS2): 128×64 Glcd ler aslında 64×64 boyutlarında 2 sayfadan (yani 2 adet ks0108 entegre ile sürülür) oluşur. Cs1 ve Cs2 pinleri hangi parçanın (entegrenin) aktif edileceğini seçmeye yarayan pinlerdir.

üsteki resimdende anlaşılacağı üzere  Cs1:1 Cs2:0  iken sol taraftaki ekran seçilmiş olur.
Cs1:0 Cs2:1 durumunda iken sağ taraftaki ekran seçilir. her bir sutuna veri gönderildiğinde 8 bitlik satır bilgiside gönderilmiş olur yani buna göre 64 dots /8 bit=8 satır yani herbir parça ekran 8 satırdan oluştuğunu gösterir.



Source code


   

    ;========================================================================
    ;glcd nin ilk (sol) tarafıundaki entegre seçer
    ;CSA=1
    ;CSB=0
    ;glcd nin ikinci (sağ) tarafıundaki entegre seçer
    ;CSA=0
    ;CSB=1
    ; kısacası 0 olan seçili entegre oluyo
    ; RW=glcd okuma / yAZMA MODUNU AKTİF YAPAN PİN
    ; RW=0 (SIFIR) İSE GLCDYE YAZMA MODUNDA OLDUGUNU GÖSTERİR
    ; RW=1 (BİR) İSE GLCD DEN OKUMA MODUNDA OLDUGUNU GÖSTERİR.
    ; OKUMA PAYARKEN İLK OKUNAN DEĞER DİKKATE ALINMAZ 2. DEĞER GEÇERLİDİR. ARDIŞIK OKUMALARDA SADECE İLK OKUNAN ES GEÇİLİR.
    ;*********** komut gönderme*******************
    ;   DI=bacağı 0 (sıfır) ise komut gönderme modundadır.
    ;   DI=bacağı 1 (bir) ise veri gönderme modundadır.
    ;   E=bacağı 1 (bir) den 0 (sıfır) a geçtiğinde komut/veri glcdye yazılır
    ;   RW=0 GLCD YAZMA MODUNDA OLMALIDIR.
    ;************************************************************
    ; 128*64 glcd komutları (ks0108)entegreli lcd komutları
    ; 62=glcd kapalı
    ; 63 =glcd aç
    ; 64 =y kordinatı (0 sütun) adresi(seçili olan çipin cs1/cs2 aderlenmesinde kullanılır)
    ; 127 =y kordinatı (63 sütun) adrersi  (seçili olan çipin cs1/cs2 aderlenmesinde kullanılır)
    ; 184 =xkordinatı (0 satır) adresi(seçili olan çipin cs1/cs2 aderlenmesinde kullanılır)
    ; 255 =xkordinatı (63 satır) adresi(seçili olan çipin cs1/cs2 aderlenmesinde kullanılır)
    ;============================================================
             list   p=16f877a            ; kullanılan pic tanıt
       #include <p16f877a.inc>      ;
       __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &  _LVP_OFF & _DEBUG_OFF & _CPD_OFF; _WRT_ENABLE_OFF &
    ;============================================================
    CBLOCK 0x20
    kolon_ınd   ;equ   20h;
    tablo_ınd   ;equ   21h;     
    LCD_CS      ;equ   25h;
    LCD_PAGE   ;equ   26h;
    LCD_ADR      ;equ   27h;
    LCD_DATA   ;equ   28h;
    COUNTER1   ;equ     29h;
    COUNTER2   ;equ   2Ah;
    COUNTER3   ;equ   2Bh;
    TEMP      ;equ   2Ch;
    satır      ;equ   0x22
    ENDC
    ;********** SOL EKRANI SEÇMEYE YARAYAN MAKRO*********
    CSA MACRO
    BSF   CS1
    BCF   CS2
    ENDM
    ;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
    ;***********SAĞ EKRANI SEÇMEYE YARAYAN MAKRO**********
    CSB   MACRO
    BCF   CS1
    BSF   CS2
    ENDM
    ;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
    #define RST   PORTC,0      ;
    #define   E   PORTC,1      ;
    #define   DI   PORTC,2      ;
    #define   CS1   PORTC,5      ;
    #define   CS2   PORTC,6      ;
    #define RDWR   PORTC,7      ;
    ;============================================================
               ORG     0X0000            ; başlangıç vektörü
    ;      clrf    PCLATH            ; pc sayacının ;yüksek bitini sıfırla
            goto    main              ; ana programa ;dallan
    ;
    ;
    ;
    ;
    ;
    ;
    main
    ;port tanımlamaları yapılıyor.
       banksel TRISC;
          clrf   TRISC
          clrf   TRISD
          clrf   TRISE
          movlw   b'11111111'
          movwf   TRISB
          movlw   b'00111111'
          movwf   TRISA
          movlw   b'10001001'
          movwf   ADCON1
    banksel PORTC;      bcf   STATUS, RP0
    ;**********kurulum bitti******************
          movlw   b'01000000'
          movwf   ADCON0
    ;*********glcd kurulumu*******************
          CSA      ;1. entegre aktif
          bcf   DI      ; komut yazma moduna ;geç
          call   LCD_ON      ; glcd ;aç      bcf   RDWR      ; glcd yazma modunda
          bcf   RST      ; glcd hafızasını ;sıfırla
          call   Pause      ;bekle
          bsf   RST      ;   glcd ;sıfırlama işlemini etkinleştir.
          call   Pause      ;bekle
          bcf   DI      ; komut yazma moduna ;geç
    ;************************************************************; grefik lcdler 128 sutun ve 64 satır noktadan oluşur
    ;satırları taraken bir seferde 8 it gönderilir yani grafik ;lcdler 64/8 =8 satırdan oluşur
    ;buda demek oluyoruki her bir satırda 128 bitlik veri ;göndercek kod düzenlemek gerkir bunu yaparkende
    ; her 64 bitte bir çipseti değiştirmek gerekli aşağıdaki kod ;bu işi yapar.
    scan   ;
          movlw   b'10111000'   ;   184 komutu 0 ;sütüna giden komut
          movwf   LCD_PAGE   ;
          call   LCDPage      ; kordinatı glcdye ;işle
          movlw   b'01000000'   ;   64 KOMUTU 0 ;SATIR BAŞI
          movwf   LCD_ADR      ;
          movf   LCD_ADR, w   ;
          call   Adress      ;
       CSB; 2. entegre AKTİF
          call   LCD_ON   ;   call   LCD_ON      ; glcd aç
          movlw   b'10111000'   ;   184 komutu 0 ;sütüna giden komut
          movwf   LCD_PAGE   ;
          call   LCDPage      ; kordinatı glcdye ;işle
          movlw   b'01000000'   ;   64 KOMUTU 0 ;SATIR BAŞI
          movwf   LCD_ADR
          movf   LCD_ADR, w   ;
          call   Adress      ;
       MOVLW   .7   ;grafik lcd 8 satırdan oluşur
       MOVWF   satır
       movlw   .2
       movwf   tablo_ınd
    bir_artır
    ;
          call   SendDataTOGLCD   ;glcd veri gönder
          incf   LCD_PAGE,f   ;
    CSA;
          movfw   LCD_PAGE;, w
          call   LCDPage
          movfw   LCD_ADR;, w   ;
          call   Adress
    CSB;
          movfw   LCD_PAGE;, w
          call   LCDPage
          movfw   LCD_ADR;, w   ;
          call   Adress
          decfsz   satır
    GOTO   bir_artır
    son
    ;   sleep
       goto son
    LCDPage
          bsf   E
          ;nop
          movf   LCD_PAGE, w
          movwf   PORTD
          ;nop
          bcf   E
          return
    LCD_ON;glcd nin aktif olan entegresini komut/veri yazmak ;için kullanıma açar
          bsf   E
          ;nop
          movlw   b'00111111'   ; 63 komutu (lcd aç)
          movwf   PORTD
          ;nop
          bcf   E
          return
    Adress;
          bsf   E
          ;nop
          movwf   PORTD
          ;nop
          bcf   E
          return
    ByteToLCD
          bsf   DI
          ;nop
          bsf   E
          ;nop
          movwf   PORTD
          ;nop
          bcf   E
          ;nop
          bcf   DI
    ;
          return
    Pause
          movlw   .25
          movwf   COUNTER1
    P2
          movlw   .255
          movwf   COUNTER2
    P3
          decfsz   COUNTER2, f
          goto   P3
          decfsz   COUNTER1, f
          goto   P2
           return
    SendDataTOGLCD;karekter bilgisini lcd ye gönderiri
    CSA;    1. entegre aktif
          movlw   .64
          movwf   COUNTER1
    SC1   ;1. entegre yazdır
          call   TabSim
          call   ByteToLCD
          incfsz   kolon_ınd, f
          goto   $+2
          incf   tablo_ınd,f
          decfsz   COUNTER1, f
          goto   SC1
    CSB;   2. entegre aktif
          movlw   .64
          movwf   COUNTER1
    SC2   ;2. entegreyi yazdır
          call   TabSim
          call   ByteToLCD
          incfsz   kolon_ınd, f
          goto   $+2
          incf   tablo_ınd,f
          decfsz   COUNTER1, f
          goto   SC2
          return
    ;************************************************************; glcd gösterilecek resmin verileri bu alanda tablodan alınır
    ;************************************************************;
       org 0x01Fc
    TabSim   ;tablo bilgilerini gir 2 parçadan oluşacak ayarla
       movfw   tablo_ınd
       movwf   PCLATH
    tabloya_git
       movfw   kolon_ınd
       addwf   PCL, f
    ; ekranda benim hazırladığım 2 adet kod var.
    ;hangisini göstermek isterseniz onu kullanabilir veya kendi ;resim dosyanızı oluşturup
    ;inc uantısıyla kaydettikten sonra aşağıdaki gibi include ;deyiminden sonra
    ;ekleyebilirisniz. görmek istediğiniz resmi seçtikten sonra ;diğer resmin tanılama satyırının önüne ";" sembolünü
    ;koymaıy unutmayın: kolay gelsin.
    include   sunger bob(128 x 64).inc
    ;include   kelebek.inc
       end


yanda standar glcd ve mcu bağlantısı görülmekte bizim kullanacağımız 16f877 mikrodenetleyicinin bağlantıları sırasıyla şöley yapılmalı
Mcu portD=glcd D0-D7
Mcu portC.0=glcd RST
Mcu portC.1=glcd E
Mcu portC.2=glcd DI
Mcu portC.7=glcd RW
Mcu portC.5=glcd CS1
Mcu portC.6=glcd CS2
glcd bağlantıların yapmadan önce kullancağınız glcd nin datasheetini inceleyin bağlantılarını ona göre yaparsanız aşağıdaki gibi görüntü elde edersainiz.


uygulama ile ilgili tüm dosya resim,  gerekli convert programlarını ve dökümanları burdan indirebilirsiniz.
https://rapidshare.com/files/3205127997/grafik_lcd.zip
niz.
Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

t2

Alıntı YapElimde eski bir dijital fotoğraf makinesi var.. Bunun lcd panellerini çıkarıp bilgisayar veya başka kaynaktan video sinyali göndermek istiyorum

Burak B

LCD nin üzerine ne yazıyor? Kaç inç? Söktüğün makinenin marka modeli nedir?

Bende sana bir soru sorayım elimde bir meyve var bil bakalım nedir ? Hadi bilsene ? :)
"... a healthy dose of paranoia leads to better systems." Jack Ganssle