W

16f877a ile 4x20 LCD sürme

Başlatan wishes, 24 Şubat 2012, 17:15:31

wishes

16f877a ile 4x20 mavi lcd bağlantısını CCS C dilinde B portu üzerinden gerçekleştirdim. lakin 1. ve 3. satırlar komple beyaz kare oldu. 2. ve 4. satırlarda ise hiç bir şey görünmedi. sebebi ne olabilir ki. proteus çizimi şöyle:

http://i.imgur.com/ucsId.png

include olarak kütüphaneden lcd420.c dosyasını da ekledim.

pwm.c

yazdığın C dosyasını vermen lazım. birde derleyici versiyonunuda söyle.
eğer senin uygulaman proteus'ta sorunsuz çalışıyorsa ozaman donanımla alakalı sorun var demektir.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

wishes

#2
serdar hocanın örnegini yaptım en basit kodları kullandım. .hex uzantılı dosyayı oluşturdu ve proteusta simüle ettim.

derleyici PCWHD 4.114


/******************************************************
      PIC16F877 ile Paralel LCD Uygulaması
PIC PROG/DEKA     : Port B jumper'ı LCD konumunda olmalı
*******************************************************/

#include <16f877A.h>     // Kullanılacak denetleyicinin baÅŸlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(b) //Port yönlendirme komutları B portu için geçerli

#define use_portb_lcd TRUE   // LCD B portuna baÄŸlı

#include <lcd420.c>   // lcd.c dosyası tanıtılıyor

int x;      // Tamsayı tipinde deÄŸiÅŸken tanımlanıyor
float y;    // Ondalıklı tipte deÄŸiÅŸken tanımlanıyor
char z;     //  Karakter tipinde deÄŸiÅŸken tanımlanıyor

//********** ANA PROGRAM FONKSÄ°YONU*******

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriÅŸ yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı


   set_tris_b(0x00);   // B portu komple çıkış

   lcd_init();   // LCD hazırlanıyor

   x=10;   // x deÄŸiÅŸkenine deÄŸer veriliyor
   y=32.6; // y deÄŸiÅŸkenine deÄŸer veriliyor

   while(1) // Sonsuz döngü
   {
      lcd_send_byte(0,0x0d);   // LCD'ye komut gönderiliyor. Ä°mleç yanıp sönsün komutu.

      printf(lcd_putc,"\f     CCS C"); // LCD'ye veri gönderiliyor.
      delay_ms(1000); // 1 sn gecikme
      printf(lcd_putc,"\n  Derleyicisi");
      delay_ms(1000); // 1 sn gecikme
      lcd_gotoxy(1,2);   // Kursör 1.sütun, 2.satıra konumlandırılıyor.
      printf(lcd_putc,"\fX DEGERI=%d",x); // LCD'de tamsayı olarak x deÄŸiÅŸken deÄŸeri görüntüleniyor.
      delay_ms(1000); // 1 sn gecikme
      printf(lcd_putc,"\f\nY DEGERI=%f",y); // LCD'de ondalıklı olarak y deÄŸiÅŸken deÄŸeri görüntüleniyor.
      delay_ms(1000); // 1 sn gecikme
      printf(lcd_putc,"\fDIRENC"); // LCD siliniyor ve "Direnc" stringi yazdırılıyor.
      delay_ms(1000); // 1 sn gecikme
      z=lcd_getc(3,1);  // LCD'de o an 3.Sütun ve 1.Satırda olan karakter alınıyor. Alınan deÄŸer z deÄŸiÅŸkenine aktarılıyor.
      printf(lcd_putc,"\f%c",z);    // z deÄŸiÅŸkeni LCD'ye aktarılıyor
      delay_ms(2000); // 2 sn gecikme
   }
}

pwm.c

yazılımda sorun yok istersen benim derlediğim hex dosyasını yükle.
senin muhtemelen donanımla alaklı sorunun var. elimde 4x20 lcd olmadığı için deneyemedim ama büyük olasılıkla çalışır.
unutmadan söyleyimde PCWHD 4.114 lcd.c kütüphenelerinde sorun var. imkanın varsa 4.128 kütübhanelerini kullan yada daha değişik kütüphaneler deneyebilirsin.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

wishes

çok teşekkür ediyorum, gün içinde deneyeceğim.

mustafa

Merhaba arkadaşım.Çok büyük ihtimalle bağlantın hatalı o karaler genelde bağlantın hatalı olduğu için çıkarlar.Bağlantılarını tekrar gözden geçir bence.Ve ekran çözünürlüğünü ayarlamak için kesinlikle bir pot kullan.

BAHAR

Kodları değiştirmeden pic'e attıysan çalışmaması normal olabilir. Çünkü büyük ihtimalle elindeki pic'te komparatör mevcut bu yüzden konfig ayarını düzenle tekrar pic'e yükleme gerçekleştir. :)

epsol

Selamlar,

Sorununuz çözüldümü acaba bende pic16f877 kullanıyorum fakat bendede aynı sorun var bunun sebebi ne olabilir?

caylak

Selam,

Pic konfig ayarları?
Osilatör çalışıyormu?
LCD kontrast bağlantısı yapılmışmı?
LCD ayak bağlantıları kontrol?

Genelde bu seçeneklerden sıkıntı oluşuyor..Kontrol etmekte fayda var

epsol

Selam,

Ben contrast pinine direk olarak gnd'yi bağladım yani 10k trimpot kullanmadım. Bu durum1. ve 3. satırlarda kare satırlarının çıkmasına neden olabilir mi? Sorun yazılımdan mı yoksa donanımdanmı kaynaklanıyor tam olarak anlayamıyorum?

ete

Peki kontrast denen şeyin ayarlı olması gerekirken neden direk GND ye bağladınız? Bu konuda bir bildiğinizmi vardı?

Elbette direk GND ye bağlarsanız bütün kareler simsiyah çıkar. Ayarlı olmasının sebebi budur zaten. Ayarlarsın karekterler görünür hale gelir.

Ete

epsol

dostum daha onceki projemde 2x16 lcd kullandığımda contrast bacağını gnd'e verdiğimde çalışıyordu fakat 4x20 lcd de çalışmadı. Peki kontrast problemi ise neden sadece 1. ve 3. satırlarda böyle bir problem var acaba bilginiz var mı?

ete

Normal şartlarda kontrast hatası 4 satırda birden gözükmesi gerekir. İşlemci çalışmıyorsa LCD de bloke olur ve bu durumda yalnızca 1 satırda siyah kareler gözükür. 1 ve 3 satırlarda olması önceden görmediğim bir şekil. Bu durumda LCD bozuk olabilir,
İşlemci çalışırken kilitlenebilir ve yinede bir açık kapı bırakırsak kontrast sorunuda olabilir.

En iyisi dışarıdan bir 10K pot ile kontrast ayarı yapmaya çalış. Yada 3 nolu pini 680 ohm dirençle GND ye bağla. Böylece biraz kontrast vermiş olursun. Yinede çalışmıyorsa artık yazılımdan tut da LCD - İşlemci - PCB - Besleme devresi gibi yerlerde sorunu aramalısın.

Ete

fahrettink

Alıntı yapılan: epsol - 16 Mayıs 2012, 10:13:16
dostum daha onceki projemde 2x16 lcd kullandığımda contrast bacağını gnd'e verdiğimde çalışıyordu fakat 4x20 lcd de çalışmadı. Peki kontrast problemi ise neden sadece 1. ve 3. satırlarda böyle bir problem var acaba bilginiz var mı?

Kendi deneme yanılma ve tecrübelerime göre, mutlaka elinizde yedek malzeme olmalı ve değiştirerek denemeler yapmalısınız.

Basit bir hatadan dolayı saatlerce uğraştığımı ve önümde duran hatayı nasıl göremediğime defalarca şaşırdığımı bilirim.

LCD uygulamalarını çok yapıyorum ve bunun için şöyle bir yöntem geliştirdim.

Pic + lcd ile %100 çalışan bir devreyi kenarda deneme amaçlı tutuyorum. Pic zaten soketli. LCD içinde pin header kullandım yani kolayca sök tak yapabiliyorum. Şüphelendiğim LCD ya da pic i bu çalışan devrenin üzerine takıp parçanın arızalı olup olmadığını hemen anlayabiliyorum. Ayrıca yazılım sorunlarını da bu şekilde anlayabilirsin.Bir nevi basit deneme kartı.

Bu arada lcd devrelerinde kontrast ayarını bir pot veya trimpot ile yapmadan çalıştırabildiğim hiç olmadı. Mutlaka ayar yapmak gerekiyor bana göre.

Sonuç olarak simulasyonda çalışıyor ve yaptığında çalışmıyorsa mutlaka bağlantıları çok dikkatlice kontrol et. Breadboard üzerinde çalışıyorsan ölçü aleti ile yine kontrol etmelisin, çünkü bazen breadboard bile sorunlu olabiliyor.

Elimde 4x20 lcd olsaydı ve c dilinden anlasaydım üşenmeyip denerdim çünkü bende merak ettim.

Bir sonuç alırsan ve hatayı bulursan lütfen tecrübeni paylaş.

"Dahilik %1 ilham, %99 çalışmanın eseridir." Thomas Alva EDISON

epsol

Alıntı yapılan: fahrettink - 16 Mayıs 2012, 14:40:55
Kendi deneme yanılma ve tecrübelerime göre, mutlaka elinizde yedek malzeme olmalı ve değiştirerek denemeler yapmalısınız.

Basit bir hatadan dolayı saatlerce uğraştığımı ve önümde duran hatayı nasıl göremediğime defalarca şaşırdığımı bilirim.

LCD uygulamalarını çok yapıyorum ve bunun için şöyle bir yöntem geliştirdim.

Pic + lcd ile %100 çalışan bir devreyi kenarda deneme amaçlı tutuyorum. Pic zaten soketli. LCD içinde pin header kullandım yani kolayca sök tak yapabiliyorum. Şüphelendiğim LCD ya da pic i bu çalışan devrenin üzerine takıp parçanın arızalı olup olmadığını hemen anlayabiliyorum. Ayrıca yazılım sorunlarını da bu şekilde anlayabilirsin.Bir nevi basit deneme kartı.

Bu arada lcd devrelerinde kontrast ayarını bir pot veya trimpot ile yapmadan çalıştırabildiğim hiç olmadı. Mutlaka ayar yapmak gerekiyor bana göre.

Sonuç olarak simulasyonda çalışıyor ve yaptığında çalışmıyorsa mutlaka bağlantıları çok dikkatlice kontrol et. Breadboard üzerinde çalışıyorsan ölçü aleti ile yine kontrol etmelisin, çünkü bazen breadboard bile sorunlu olabiliyor.

Elimde 4x20 lcd olsaydı ve c dilinden anlasaydım üşenmeyip denerdim çünkü bende merak ettim.

Bir sonuç alırsan ve hatayı bulursan lütfen tecrübeni paylaş.

deneyimleriniz ışığında birşey sormak istiyorum, lcd uygulamalarınızda anot ve katot pinlerine ne bağlıyorsunuz? ben anot uçuna 5 katot ucunada gnd bağlıyorum bununla ilgili bir sıkıntı olabilir mi?

Powered by EzPortal