Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

4x20 LCD İlginç Problem

Başlatan iqsuz, 27 Ağustos 2014, 13:44:34

iqsuz

s.a

elimde bir adet 4x20 karakter lcd var ve stm32f4 discovery kit ile sürmek istiyorum.fakat ilginç bir sorunla karşılaştım 1. ve 3. satırlar komple kare karakter ile dolu 2. ve 4. satırlarda hiç bir şey gözükmüyor.

kod'da hata olacağını zannetmiyorum çünkü mikroelektronicanın kendi örneği yinede kodlar aşağıda

yaptığım bağlandılarıda söyleyeyim akıllarda onla ilgili soru işareti kalmasın.

LCD'nin markası displaytronic acm2004d

1->GND
2->5V
3->Vdd
4->RS
5->GND
6->ENABLE
7->NC
8->NC
9->NC
10->NC
11->LCD_D4
12->LCD_D5
13->LCD_D6
14->LCD_D7
15->5V direnç ile
16->GND

sbit LCD_RS at GPIOD_ODR.B2;
sbit LCD_EN at GPIOD_ODR.B3;
sbit LCD_D4 at GPIOD_ODR.B4;
sbit LCD_D5 at GPIOD_ODR.B5;
sbit LCD_D6 at GPIOD_ODR.B6;
sbit LCD_D7 at GPIOD_ODR.B7;
// End LCD module connections

char txt1[] = "mikroElektronika";   
char txt2[] = "STM32";
char txt3[] = "Lcd4bit";
char txt4[] = "example";

char i;                              // Loop variable

void Move_Delay() {                  // Function used for text moving
  Delay_ms(750);                     // You can change the moving speed here
}

void main(){
  Lcd_Init();                        // Initialize LCD

  Lcd_Cmd(_LCD_CLEAR);               // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
  Lcd_Out(1,6,txt3);                 // Write text in first row

  Lcd_Out(2,6,txt4);                 // Write text in second row
  Delay_ms(2000);
  Lcd_Cmd(_LCD_CLEAR);               // Clear display

  Lcd_Out(1,1,txt1);                 // Write text in first row
  Lcd_Out(2,4,txt2);                 // Write text in second row

  Delay_ms(2000);

  // Moving text
  for(i=0; i<4; i++) {               // Move text to the right 4 times
    Lcd_Cmd(_LCD_SHIFT_RIGHT);
    Move_Delay();
  }

  while(1) {                         // Endless loop
    for(i=0; i<7; i++) {             // Move text to the left 7 times
      Lcd_Cmd(_LCD_SHIFT_LEFT);
      Move_Delay();
    }

    for(i=0; i<7; i++) {             // Move text to the right 7 times
      Lcd_Cmd(_LCD_SHIFT_RIGHT);
      Move_Delay();
    }
  }
}

Kabil ATICI

LCD'in sürülmemiş. Ya kodda ya bağlantıda sorun var.
ambar7

Tagli

Lcd_Init(); görevini yapmamış. Kütüphanede hata olmadığını varsayarsak, ya bağlantılarında hata var, ya PIC'in hız ayarlarında hata var, ya da PIC hiç çalışmıyor. Programın başında bir LED'i 1 saniye yak söndür yap ki PIC'in çalıştığından (ve de doğru hızda çalıştığından) emin ol.
Gökçe Tağlıoğlu

iqsuz

@Tagli hocam pic kullanmıyorum stm32f4 vdiscovery kit var

sorunu verdiğin fikirle çözdüm osilatör ayarlamalarımda sıkıntı varmış teşekkürler.

Erhan YILMAZ


Bayramsumbul

Ben de benzer bir problem ile karşılaşmıştım sorun lcd daha kendini toplamadan lcd üzerinde işlem yapmaktı. Çözümü mcu'nun başlama rutinlerinden sonra lcd init ederek çözmüştüm ve hatta delay bile eklemiştim. Neyse sorun çözüldü galiba. Herkeze iyi forumlar ve çalışmalar...
Bir Elektronik Meraklısının Serüveni...

RaMu

Lcd datasheet inde lcd ye güç verildikten sonra
herhangibir işlem yapılmadan önce bir müddet beklenmesi gerektiği yazar,
örneğin;
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Tagli

Aslında o beklemeyi zaten Lcd_Init() içine koymuş olmaları gerekir. Ben kendi kütüphanemi yazarken bu şekilde yapmıştım.
Gökçe Tağlıoğlu

iqsuz

problemi çözdüm.

aynı problem ile karşılaşacak olanlar illaki olcaktır.zaten diğer user'lar gerekli bilgileri vermiş fakat ben genel olarak toparlıyım.

1-program koşturulmaya başlandığında lcdnin hazırlanması için yeterli süre lcd'ye tanınmalı-(bazı Lcd_Init() fonksiyonu içinde zaten bekleme yapılıyormuş.)
2-programda tanımladığınız pin out'lar ile donanımdaki bin outlarınızın eşleştiğinden emin olun.
3-tabiki bütün çıkışları doğru yerlere takınız.
4-programsal hatalarınız olabilir bunları kontrol ediniz.örneğin lcd_init() fonksiyonunu lcd'ye komut göndermeden sonra tanımlamış falan olabilirsiniz.
5-ösilatör hızınınız lcd'ye uygun olup olmadığını denetleyiniz.

bunlarda sıkıntı yoksa büyük ihtimal bir problem çıkmayacaktır.

baran123

bendede öy bir problem çıktı hala anlamadım ds1307 ve 2x16 kullanıyorum ds1307 nin pull up larını takınca enrak sonuk ve parazıt varmıs gıbı taramalı sekılde yanıyor dırenclerı cıkarınca saat duruyor ama ekran goruntusu duzelıyor bunun sebebi ne olabilir ?

mesaj birleştirme:: 30 Ağustos 2014, 00:48:28

ekleme : başka yazı vs yazdırıyorum sıkıntı yok ama 1307 y ile kullanınca böyle garip bir şey oluyor

Tagli

Pull-up direnci değerleri nedir?
Gökçe Tağlıoğlu

Mucit23

LCD Beslemesine Dikkat Et, 3.3V ile Besliyorsan bu tür sorunlar yaşayabilirsin. Normaldir. LCD Beslemesi 5V olduktan sonra Data sinyalleri için 3.3V kullanabilirsin. Ben birkaç model LCD yi bu şekilde çalıştırdım.

İlk önce STM32 deki Data seviyelerini ölç. Lojik1 3v civarında olabilir.

baran123

Pull up değerleri 10 K  lcd yi 5V ile besliyorum 7805 üzerinden 18f2550 kullanırken bu sorun oluyor du suan 877A var cok fazla bır oynama yok ama gene goze carpan bır tarama var ekranda

Kabil ATICI

Sanırım ekrana çok fazla yaz boz yaptırıyorsun. Saniyede 1 kez ekranı güncelleyecek şekilde programını düzenle. O zaman o sorun ortadan kalkar.
Bunu da en kolay saniyeyi okuduğun zaman önceki değer ile aynı ise ekrana yazdırma yapma. Farklı ise ekrana yazdır. Sanırım bunun programını yapabilirsin.
ambar7

baran123

@ambar7 hocam evet oyle yapayım ozaman ıf else le yapılır hemen :)