CCS ile GLCD Projesi

Başlatan Faruk53, 13 Ağustos 2014, 00:02:17

Faruk53

Arkadaşlar merhaba

CCS C de GCLD sürerken bütün bacakları tek tek değiştrebiliyoruz. Yanlız data portlarını değiştiremiyoruz. Sorum şu yönde olacak. data portları işlemcinin D portuna sırası ile bağlı ;


RD0 = DB0
RD1 = DB1
RD2 = DB2... burda sorun yok

ama portları tersten sıraladığımız zaman GLCD görüntü gelmiyor.

RD0 = DB7
RD1 = DB6
RD2 = DB5 ... bunun çözümü var mıdır arkadaşlar. Teşekkür ederim..

Kabil ATICI

C bit işlemler konusunda biraz  zorlar ama yapılır sadece işlem uzar.
iki tane değişken olsun
deg_RD; //porta gönderdiğimiz veri
deg_PB ;  //değiştirieceğimiz verimiz
deg_rb=0;

if (deg_RD&0b00000001)==0b00000001)
deg_PB=deg_PB|0b10000000;
if (deg_RD&0b00000010)==0b00000010)
deg_PB=deg_PB|0b01000000;
if (deg_RD&0b00000100)==0b00000100)
deg_PB=deg_PB|0b00100000;
if (deg_RD&0b00001000)==0b00001000)
deg_PB=deg_PB|0b00010000;
if (deg_RD&0b00010000)==0b00010000)
deg_PB=deg_PB|0b00001000;
if (deg_RD&0b00100000)==0b00100000)
deg_PB=deg_PB|0b00000100;
if (deg_RD&0b01000000)==0b01000000)
deg_PB=deg_PB|0b00000010;
if (deg_RD&0b10000000)==0b10000000)
deg_PB=deg_PB|0b00000001;

//bu noktada doğrudan deg_pb verisini porta göndererebiliriz. belirttiğiniz bacak bağlantısını uyar.

Programı kontrol edin, eğer LCD meşgul kontrolu yapıyorsa o değeri de uygun şekilde değiştirmeniz gerekecektir
ambar7

Faruk53

Hocam teşekkür ederim. Maskeleme işlemini D portunu tersleyecek şekilde yaptım. Sizin verdiğiniz komut dizisine uygun olarak. bu komut dizisini program içine mi yoksa 'HDM64GS12.C' kütüphanesi içine mi yerleştireceğim. Kullandığım LCD 128x64 lük bir LCD.

MrDarK

// Purpose:    Write a byte of data to the specified chip
// Inputs:     1) chipSelect - which chip to write the data to
//             2) data - the byte of data to write
void glcd_writeByte(int1 side, BYTE data)
{
   set_tris_d(0x00);
   
   output_low(GLCD_RW);       // Set for writing

	 if(side)                   // Choose which side to write to
      output_high(GLCD_CS2);
   else
      output_high(GLCD_CS1);

	 delay_us(1);

   output_d(data);            // Put the data on the port
   delay_us(1);
   output_high(GLCD_E);       // Pulse the enable pin
   delay_us(1);
   output_low(GLCD_E);

   output_low(GLCD_CS1);      // Reset the chip select lines
   output_low(GLCD_CS2);
}


output_d(data);            // Put the data on the port

Bu yukarıdaki bilgiyi göndermeyip data yazan değeri revize etmen gerek ;)

aynı şekilde bu data'yı bitlerine ayırıp istediğin biti istediğin pinden çıkartıp glcd'yi sürebilirsin.
Picproje Eğitim Gönüllüleri ~ MrDarK

Faruk53

hocam eline sağlık teşekkür ederim büyük bir dertten kurtardın beni :)

MrDarK

Alıntı yapılan: Faruk53 - 13 Ağustos 2014, 21:22:53
hocam eline sağlık teşekkür ederim büyük bir dertten kurtardın beni :)

ambar7 hocamızın katkılarıyla :)
Picproje Eğitim Gönüllüleri ~ MrDarK

Faruk53

#6
Hocam yine bir sıkıntı oldu ilk denememde çalıştı ama daha sonraki denemelerimde bir türlü ekrana görüntü veremedim. Herşeyi dediğiniz gibi yapmaya çalıştım. ikinci bi değer de tanıttım ama LCD saçma sapan tarama yapıyor. programda bi sıkıntı var mı diye düşünerek portları RD0 =DB0... olarak bağladığımda ekran taraması gayet düzgün çalışıyor. 'hdm64gs12.c' de yaptığım değişiklikler :

...
....
if(side)                   // Choose which side to write to
      output_high(GLCD_CS2);
   else
      output_high(GLCD_CS1);

   output_low(GLCD_RW);       // Set for writing

  // output_d(data);// Put the data on the port
 
   
   if ((data&0b00000001)==0b00000001)
       data=data|0b10000000;
       
    if ((data&0b00000010)==0b00000010)
       data=data|0b01000000;   
       
      if ((data&0b00000100)==0b00000100)
       data=data|0b00100000;
       
        if ((data&0b00001000)==0b00001000)
        data=data|0b00010000;
       
          if ((data&0b00010000)==0b00010000)
          data=data|0b00001000;
       
           if ((data&0b00100000)==0b00100000)
           data=data|0b00000100;
       
             if ((data&0b01000000)==0b01000000)
             data=data|0b00000010;
       
              if ((data&0b10000000)==0b10000000)
              data=data|0b00000001;
       
   delay_cycles(1);
   output_high(GLCD_E);       // Pulse the enable pin
   delay_cycles(5);
   output_low(GLCD_E);

   output_low(GLCD_CS1);      // Reset the chip select lines
   output_low(GLCD_CS2);
}

Kabil ATICI

     if ((data&0b00001000)==0b00001000)//<<<data ile

        data=data|0b00010000;//<<<data aynı olmaması gerekir yoksa işlem yaparken veri bozulur.

     if ((data1&0b00001000)==0b00001000)
        data=data|0b00010000;

gibi olması gerekir.
en iyi durumda bu bölümü bir fonksiyon oluşturursun.
bu bölümü fonksiyon oluşturursan


veri_gonder(int veri1);//fonksiyon olarak tanımla. nasıl yapıldığını bir bakman gerekecek
{
int veri;
   if ((veri1&0b00000001)==0b00000001)
      veri=veri|0b10000000;
       
    if ((veri1&0b00000010)==0b00000010)
       veri=veri|0b01000000;   
       
      if ((veri1&0b00000100)==0b00000100)
       veri=veri|0b00100000;
       
        if ((veri1&0b00001000)==0b00001000)
        veri=veri|0b00010000;
       
          if ((veri1&0b00010000)==0b00010000)
          veri=veri|0b00001000;
       
           if ((veri1&0b00100000)==0b00100000)
           veri=veri|0b00000100;
       
             if ((veri1&0b01000000)==0b01000000)
             veri=veri|0b00000010;
       
              if ((veri1&0b10000000)==0b10000000)
              veri=veri|0b00000001;

output_d(veri);// Put the data on the port
}

programında
....
if(side)                   // Choose which side to write to
      output_high(GLCD_CS2);
   else
      output_high(GLCD_CS1);

   output_low(GLCD_RW);       // Set for writing

  // output_d(data);// Put the data on the port
  veri_gonder(data);   //şeklinde kullanabilirsin.
       
   delay_cycles(1);
   output_high(GLCD_E);       // Pulse the enable pin
   delay_cycles(5);
   output_low(GLCD_E);

   output_low(GLCD_CS1);      // Reset the chip select lines
   output_low(GLCD_CS2);
}
ambar7

Faruk53

ambar7 hocam katkılarınızdan dolayı teşekkür ederim. ISIS de programı denedim ufak tefek pixel hataları dışında kayda değer bi sorunla karşılaşmadım. yarın ilk işim projeyi gerçekte denemek olacak. inş bir sorun yaşamam :) tekrar yardımlarınız için teşekkür ederim hocam.

MrDarK

Ben hiçbirşey yaşayacağını sanmıyorum , piksel hataları da senden kaynaklanıyordur eminim. Daha önce 74Hc595 ile hiçbir simetriği olmadan D0 - D7 bağlantı yapıp tüm pinlerin yerlerini değiştirmiştim. Yetmedi PCB çizen arkadaş tasarlarken kartı dikkat etmemiş kutuya göre GLCD ters görünüyordu, Resmi yazıları herşeyi ters çevirecek şekilde kütüphaneyi değiştirdim. :D

Ah ne günlerdi pehhh.
Picproje Eğitim Gönüllüleri ~ MrDarK

Faruk53

Dediğin gibi hiç bir sorunla karşılaşmadım. ısısdeki pixel sorunları ne resimlerde ne de yazılarda pcb üzerinde bir sıkıntı yaşatmadı. tekrar yardımlarınız için teşekkür ederim. başka projelerde görüşmek dileğiyle :)