Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: kostebek - 11 Şubat 2009, 22:17:05

Başlık: PIC18F452 VE Grafik LCD
Gönderen: kostebek - 11 Şubat 2009, 22:17:05
Merhaba arkadaşlar. Birtane 18f452 pic ve bir tane KS108 uyumlu grafik lcd ekranım var 128x64 lük.

Yahu simulasyonda çalışan kod normal devrede çalışmıyor. Sanırım birşeyler yanlış. PIC iç E portuna led bağladım istediğim gibi onlar yanıyor . PIC çalışıyor yani. ama LCD de hiçbişey yok.

KOD BU:

#include <18F452.h>

#use delay(clock=20000000)
//#define FAST_GLCD    // Try commenting this out to see the differences
#define GLCD_WIDTH   128

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOOSCSEN                 //Oscillator switching is disabled, main oscillator is source
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES BORV27                   //Brownout reset at 2.7V
#FUSES NOPUT                    //No Power Up Timer
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOCPD                    //No EE protection
#FUSES NOCPB                    //No Boot Block code protection
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES CCP2B3

#include "HDM64GS12.c"
#include "graphics.c"
#include "math.h"

void displayVoltage(int adc) {
  char voltage[9];
  sprintf(voltage, "%f", (float)adc * .01960784); // Converts adc to text
  voltage[4] = '\0';                              // Limit shown digits to 3
  glcd_rect(45, 18, 69, 25, YES, OFF);            // Clear the old voltage
  glcd_text57(45, 18, voltage, 1, ON);            // Write the new voltage
}

void main() {
  int1  warn = FALSE;
  int8  adc = 0, adc_old = 0;
  char  voltText[] = "Volts", warning[] = "Warning";
  float theta = 0;

  setup_adc_ports(RA0_ANALOG);
  setup_adc(ADC_CLOCK_INTERNAL);
  set_adc_channel(0);

  glcd_init(ON);                               // Must initialize the LCD
  glcd_rect(1, 5, 126, 15, NO, ON);            // Outline the bar
  glcd_text57(70, 18, voltText, 1, ON);        // Display "Volts"
  glcd_circle(30, 47, 10, NO, ON);             // Draw the clock circle

  for(;;) {
 
     output_e(0x02);
     
     adc = read_adc();                         // Read a value from the ADC
     displayVoltage(adc);                      // Display the reading
     adc = (adc > 249) ? 249 : adc;            // Keep the value 249 or less

     if(adc != adc_old) {
        glcd_rect(adc/2+1, 6, adc_old/2+1, 14, YES, OFF);  // Clears the old bar
        glcd_rect(1, 6, adc/2+1, 14, YES, ON);             // Draws a new bar
        adc_old = adc;                                     // Set old value to new

        if(adc > 200 && !warn) {                  // Check if over 4 volts
           glcd_rect(45, 38, 124, 55, YES, ON);   // Draw a filled black rectangle
           glcd_text57(47, 40, warning, 2, OFF);  // Write "Warning" on the LCD
           warn = TRUE; }
        else if(adc <=200 && warn) {
           glcd_rect(45, 37, 125, 55, YES, OFF);  // Draw a filled white rectangle
           warn = FALSE; }
     }

     // The following 3 lines make the clock hand spin around
     glcd_line(30, 47, 30+(int)(8*sin(theta)+.5), 47-(int)(8*cos(theta)+.5), OFF);
     theta = (theta > 5.9) ? 0 : (theta += .3);
     glcd_line(30, 47, 30+(int)(8*sin(theta)+.5), 47-(int)(8*cos(theta)+.5), ON);

     #ifdef FAST_GLCD
     glcd_update();
     #else
     delay_ms(100);    // Reduces flicker by allowing pixels to be on
                       // much longer than off
     #endif
  }
}


LCD nin herşeyi eyvallah ama VEE ye ne bağlayacağımı çözemedim bir türlü.

////  *18: Negative voltage is also connected to the 20k Ohm POT

böyle demiş. Diğer bağlantılar okey. Bunu direk - bağlayıncada da bişey olmuyor. POT a bağlayın demiş de nasıl bağlıcaz.

Teşekkürler
Başlık: PIC18F452 VE Grafik LCD
Gönderen: ahmet2004 - 11 Şubat 2009, 22:26:24
https://www.picproje.org/index.php/topic,10650&highlight= (https://www.picproje.org/index.php/topic,10650&highlight=)
Başlık: PIC18F452 VE Grafik LCD
Gönderen: kostebek - 11 Şubat 2009, 23:14:49
ahmet bey :)

Size ne desem azdır valla çalıştı ;)


Çok teşekkür ederim

(http://img18.imageshack.us/img18/9521/dsc065346704682pr6.jpg)
Başlık: PIC18F452 VE Grafik LCD
Gönderen: fractal - 12 Şubat 2009, 09:20:27
bendekide glcd çalışmıyor.proteusta süper çalışıyor.pin ayarlarımda şöyle acabu bu pinlerdedemi bir sorun var...


#ifndef GLCD_CS1
#define GLCD_CS1     PIN_C2   // Chip Selection 1
#endif

#ifndef GLCD_CS2
#define GLCD_CS2     PIN_C3   // Chip Selection 2
#endif

#ifndef GLCD_DI
#define GLCD_DI      PIN_E0   // Data or Instruction input
#endif

#ifndef GLCD_RW
#define GLCD_RW      PIN_E1   // Read/Write
#endif

#ifndef GLCD_E
#define GLCD_E       PIN_E2   // Enable
#endif

#ifndef GLCD_RST
#define GLCD_RST     PIN_C0   // Reset
Başlık: PIC18F452 VE Grafik LCD
Gönderen: berkay_yalan - 12 Şubat 2009, 09:40:42
hocam sema ve kodlarınızı paylasmanız mumkunmudur?
Başlık: PIC18F452 VE Grafik LCD
Gönderen: kostebek - 12 Şubat 2009, 09:59:36
Elbette mümkün. Zaten şuana kadar yaptığım her bişeyi neredeyse bu siteyle yaptım. Paylaşmak güzel şey :)

(http://img27.imageshack.us/img27/1800/balksz6xj4.png)

(http://img6.imageshack.us/img6/2817/glcdoo2.jpg)

(http://img17.imageshack.us/img17/7802/dsc065415510562cf9.jpg)

Bu da link:
http://rapidshare.com/files/197332160/GLCD_ORNEK.zip

http://rapidshare.com/files/197098911/GLCD_ORNEK.zip.html

Dosya içerisinde

*Proteus Simulasyonu

*CCS C kodu

*BMP resim

*BMP2ASM programı

mevcut
Başlık: PIC18F452 VE Grafik LCD
Gönderen: fractal - 12 Şubat 2009, 12:39:55
ben data kablolarını ters bağlamışım.teşekkürler.negatif karekter basma nasıldı?ccs c kullanıyorum.
Başlık: PIC18F452 VE Grafik LCD
Gönderen: kostebek - 12 Şubat 2009, 13:33:54
glcd_text57(47, 40, warning, 1, OFF);

Buradaki OFF ters renk basar ;)
Başlık: PIC18F452 VE Grafik LCD
Gönderen: fractal - 12 Şubat 2009, 14:03:55
anlamadım.olmadı ekranda hiç bişey göstermiyor.
Başlık: PIC18F452 VE Grafik LCD
Gönderen: kostebek - 12 Şubat 2009, 16:21:33
Şöyle


yazi[] = "SelamAleykum";
glcd_text57(47, 40, yazi, 1, OFF);

Başlık: PIC18F452 VE Grafik LCD
Gönderen: fractal - 12 Şubat 2009, 16:55:55
aynısını yapıyorum ama ekran da hiç bişey gözükmüyor.proteustada simülasyonda bişey yok.glc init on mu off yapıyorum.onda bi değişiklik oluyormu?

yukardaki resimde ekranda uyarı gözüküyorya onun gibi yapmak istiyorum.benim ekarn siyah beyaz.tüm ekran yazı hariç siyah yazı beyaz olması lazım ama olmuyor...
Başlık: PIC18F452 VE Grafik LCD
Gönderen: fractal - 12 Şubat 2009, 17:12:29
tamam sorunu cözdüm ilk önce bar cizip onun içine yazının negatifini basmak gerekiyor.teşekkürler..
Başlık: PIC18F452 VE Grafik LCD
Gönderen: kostebek - 12 Şubat 2009, 17:14:48
Aynen size bahsettikten sonra bende aynı şeyi düşündüm  ve baktım evet dediğiniz gibi oluyor

(http://img18.imageshack.us/img18/6103/dsc065481519768uo5.jpg)
Başlık: PIC18F452 VE Grafik LCD
Gönderen: fractal - 12 Şubat 2009, 19:07:16
kostebek glcd de nasıl nasıl imlec yapıyorsun.?birde bu değişkenleri sprint f yapıp sonra gösterme işi bu tür şeyler program hafızasını cok yiyor.bu konuda ne yapılabilir?
Başlık: PIC18F452 VE Grafik LCD
Gönderen: teknikelektronikci - 12 Şubat 2009, 20:27:31
köstebek hocam

rapid iptal olmuş dosyayi bir zahmet picproje.4shared e atabilirmisiniz ?
Başlık: PIC18F452 VE Grafik LCD
Gönderen: kostebek - 12 Şubat 2009, 21:35:54
Kusura bakmayın valla 10 tane indirme hakkı veriyormuş. Ben picprojenin şifresini bilmediğim için kendi siteme attım oradan indirebilirsiniz.

http://projects.harmankaya.org/index.php?dir=PIC%2Fuygulamalar4%2FGLCD%2F

fractal arkadaşım;

valla benımde GLCD ile uğraşma işim dün itibariyle karaköye gidip ekranı almamla başladı  :D  İmleç nasıl yanıyor bilmiyorum. Sadece eklediğimiz sürücü dosyalarının içine bakıyorum. Orada yazan neyse o. Mesela şimdi arka arkaya resim göstercem animasyon vari bişey yapıyım dedim. Ama lcd_reset gibi ya da standart lcd ekranlardaki gibi  \f gibi LCD temizleme şeyi yok :) yani sanırım elimizle C0 pininin low-high yapıcaz gibime geliyor.

Uğraşıyorum işte. Dediğin gibi değişkenler çok yer kaplıyor. Onun için DRAM (yani dinamik RAM)  kullanıyorlar. Böyle ce hafıza problemi çekmiyorsunuz.
Başlık: PIC18F452 VE Grafik LCD
Gönderen: fractal - 12 Şubat 2009, 23:06:38
reset pini hiç kullanılmıyor.sanırım o dananımsal oluyor.glc init komutu ekranı temizliyor ve de yeniliyor. başka bir komut yok....ben kendi resmimi bmp cevirip ordan hex koduna dönüştürüp basmıştım.
Başlık: PIC18F452 VE Grafik LCD
Gönderen: ftsahin - 12 Şubat 2009, 23:20:33
Alıntı yapılan: "kostebek"
Ama lcd_reset gibi ya da standart lcd ekranlardaki gibi  \f gibi LCD temizleme şeyi yok :) yani sanırım elimizle C0 pininin low-high yapıcaz gibime geliyor.



glcd_fillScreen(0);


bu komutla ekranı hızlı bir şekilde silebilirsiniz.

CCS içinde bulunan Ex_Glcd örneğinde programa dahil edilen include dosyaları var. Bu dosyaları inceleyerek kullanabileceğiniz komutları görebilirsiniz.
Başlık: PIC18F452 VE Grafik LCD
Gönderen: fractal - 13 Şubat 2009, 10:10:00
peki imlec komutuda varmı sağa kaydır sola kaydırda varmı encok gereken komutlardan biri bunlar.
Başlık: PIC18F452 VE Grafik LCD
Gönderen: kostebek - 13 Şubat 2009, 12:24:25
Teşekkür ederim evet glcd_fillscreen komutu işe yarıyor.

Yalnız şimdi merak ettiğim bir soru ben 20Mhz de çalıştıramadım hiç devreyi ?

Problem nerede sizce. 4mhz lik kristal bağlıyorum herşey normal. 20mhz lik kristal bağlayınca ekran şöyle oluyor.

(http://img21.imageshack.us/img21/9236/dsc065600472861wa9.jpg)

EDİT: şurada [web]http://www.elektrotekno.com/about42417.html[/web] googledan buldum. GLCD ye yazma hızını düşürdüm oldu demiş. Onu nereden ayarlıyoruz ki ?
Başlık: PIC18F452 VE Grafik LCD
Gönderen: fractal - 13 Şubat 2009, 12:46:15
frekans ayarlarında sorun var.yoksa çalışması lazım.bir ihtimalde glcd nin çalışma frekansı yetersiz olabilir.
Başlık: PIC18F452 VE Grafik LCD
Gönderen: kostebek - 13 Şubat 2009, 13:27:45
2 TANE kristal denedim ikiside 20mhz hani belki biris bozulmuştur felan yok hala aynı. LCD nin çalışma frekansını nasıl değiştirebiliriz ki? Yani 20Mhz kullanamamk ve sırf GLCD için 4mhz e düşmek çok kötü :)
Başlık: PIC18F452 VE Grafik LCD
Gönderen: ftsahin - 13 Şubat 2009, 13:38:44
20 MHz kristali takmadan önce programda belirtmeniz lazım.  Bunu yapmıyorsanız anormallik olabilir.
Başlık: PIC18F452 VE Grafik LCD
Gönderen: kostebek - 13 Şubat 2009, 14:01:28
Hayır işte config i de tanımlamayı da ona göre değiştiriyorum.
Başlık: PIC18F452 VE Grafik LCD
Gönderen: fractal - 13 Şubat 2009, 14:07:59
bende aynı sorun olmuştu..aa şimdi geldi aklıma tamam .yazma okuma süreleri varya onları değiştirmen lazım .şimdi hatırladım.bak göndereyim.sürücü dosyadaki süreleri değiştirerk cözmüştüm ben olayı.10 mhz pll yaptım 40 mhz kullanıyorum...


output_low(GLCD_RW);       // Set for writing
  output_d(data);            // Put the data on the port
  delay_cycles(60);         //1---------------------------------------------------
  output_high(GLCD_E);       // Pulse the enable pin
  delay_cycles(60);           //5-----------------------------------------------
  output_low(GLCD_E);

diğeride şöle olcak


delay_cycles(60);--------------------------------------------------------
  output_high(GLCD_E);       // Pulse the enable pin
  delay_cycles(60);-------------------------------------------------
  data = input_d();          // Get the data from the display's output register
  output_low(GLCD_E);
Başlık: PIC18F452 VE Grafik LCD
Gönderen: mktrnk - 14 Mayıs 2009, 02:24:41
Aynı problem bende de var. Board da devreyi kurduktan sonra glcd de hiç bir şekilde görüntü elde edemedim. Garip garip anlamsız sadece çizgiler çıkıyor. GLCD bağlantılarını resimdeki glcd ye göre yaptım. GLCD nin modeli ne bilmiyorum ama arkadaki entegrede ks0108 yazıyor. Proteusta olan glcd'de de ks0108 kontrollü. Ancak Ahmet Beyin vemiş olduğu linkte gösterilen glcd ks0108 olmasına rağmen bağlantılar farklı.

@kostebek siz Ahmet beyin gösterdiği şemadaki bağlayınca sorun çözülmüş gibi gözüküyor. Bağlantıları mı değiştirdiniz? Bendeki glcd nin modelinin ne olduğunu nasıl anlayabilirim?

(http://img9.imageshack.us/img9/6166/devre.jpg) (http://img9.imageshack.us/my.php?image=devre.jpg)
Başlık: PIC18F452 VE Grafik LCD
Gönderen: fractal - 14 Mayıs 2009, 08:44:57
glcd görüntü kaybolmasının nedeni nedir?
Başlık: PIC18F452 VE Grafik LCD
Gönderen: mktrnk - 14 Mayıs 2009, 16:47:28
Bendeki GLCD nin modeli 12864H-2K . Proteusta sanırım buna karşılık gelen model PG12864F. Ben resimdeki GLCD nin (12641BS1R) bacak bağlantılarına göre 12864H-2K yi bağladım sanırım tüm problem bundan kaynaklanıyor. Ancak merak ettiğim bir konu var. CCS de ki GLCD kaynak dosyası benim elimde bulunan modele de uygun mudur?
Başlık: Ynt: PIC18F452 VE Grafik LCD
Gönderen: eem_alper - 13 Ocak 2011, 01:46:14
hocam link ölü. yeniden yükleyebilmeniz mümkün mü acaba?  bu glcd bacak baglantıları valla kafamı cok karıstırıyordu, yorumlarınızı okudum hemen deneyeceğim..   :)