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
https://www.picproje.org/index.php/topic,10650&highlight= (https://www.picproje.org/index.php/topic,10650&highlight=)
ahmet bey :)
Size ne desem azdır valla çalıştı ;)
Çok teşekkür ederim
(http://img18.imageshack.us/img18/9521/dsc065346704682pr6.jpg)
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
hocam sema ve kodlarınızı paylasmanız mumkunmudur?
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
ben data kablolarını ters bağlamışım.teşekkürler.negatif karekter basma nasıldı?ccs c kullanıyorum.
glcd_text57(47, 40, warning, 1, OFF);
Buradaki OFF ters renk basar ;)
anlamadım.olmadı ekranda hiç bişey göstermiyor.
Şöyle
yazi[] = "SelamAleykum";
glcd_text57(47, 40, yazi, 1, OFF);
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...
tamam sorunu cözdüm ilk önce bar cizip onun içine yazının negatifini basmak gerekiyor.teşekkürler..
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)
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?
köstebek hocam
rapid iptal olmuş dosyayi bir zahmet picproje.4shared e atabilirmisiniz ?
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.
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.
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.
peki imlec komutuda varmı sağa kaydır sola kaydırda varmı encok gereken komutlardan biri bunlar.
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 ?
frekans ayarlarında sorun var.yoksa çalışması lazım.bir ihtimalde glcd nin çalışma frekansı yetersiz olabilir.
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ü :)
20 MHz kristali takmadan önce programda belirtmeniz lazım. Bunu yapmıyorsanız anormallik olabilir.
Hayır işte config i de tanımlamayı da ona göre değiştiriyorum.
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);
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)
glcd görüntü kaybolmasının nedeni nedir?
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?
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.. :)