Şimdi Ara

pic lcd sorunu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
12
Cevap
0
Favori
1.911
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • projem için lcd ye yazı yazdırmaya çalışıyorum. ancak çalıştırdığımda devre çalışmasına rağmen lcd yazılar gözükmüyor. yazı yerine lcd nin 1.satırında siyah siyah kutucuklar çıkıyor tüm satırın sonuna kadar. lcd ile ilgili kod aşağıda verdiğim gibi. lcd D portuna bağlı. 16f877a nın. lcd bağlantılarım da şu şekilde. sorun nedir acaba?
    1. toprak
    2. 5v
    3. toprak
    4. 20nolu pin
    5. toprak
    6. 19.nolu pin
    789 boş
    10. 22nolu pin
    11. 27nolu
    12. 28nolu
    13. 29nlu
    14. 30 nolu
    15. toprak
    16. 5v


    lcd_init();
    lcd_send_byte(0,0x0d);
    lcd_gotoxy(1,1);
    printf(lcd_putc, "calisma modu");
    delay_ms(5);
    lcd_gotoxy(1,2);
    printf(lcd_putc,"seciniz");
    delay_ms(50);
    lcd_gotoxy(1,1);
    printf(lcd_putc," 1-derece 2-ilerigeri");//1-adım sayısı *30 derece döner 2- ileri geri 30 ar derece anında döner 3-sürekli ileri geri döndürürken hız ayarlar
    delay_ms(10);
    lcd_gotoxy(1,2);
    printf(lcd_putc," 3-hiz ");
    delay_ms(100);



    < Bu mesaj bu kişi tarafından değiştirildi fthkynr -- 16 Mayıs 2013; 15:55:56 >







  • Kontrast ayarını kısın.
  • yazilimin devamini gostersen daha da mantikli olur ancak bu kisminda beklemeler asiri kisa. 1sn olmadan tum goruntuler gosterilmis yerine yenileri gelmis oluyor..
  • 1 gnd
    2 vdd+
    3 trimpotun 1ucu+ trimpotun 2orta ucu displayın 3 numaralı pininetrimpotun 3 ucu gnd şaseye baglanacak sen bu ucu gnd baglamışsın olmaz,
    4 rs
    5 gnd
    6 enable

    7-8-9-10 boş

    11 d7
    12 d8
    13 d9
    14 d10
    15 vdd
    16 gnd

    yanlışın burada lcd in 3 numaralı pinine trimpotun orta ucunu bagla ve kontras ayarını yap ekranda yazıları görünceye kadar trimpotu çevir,

    ege
  • potansiyometre ile kontrastla oynadım ancak kutucuklarla ilgili bir değişiklik yok kutuların kontrası değişiyor.

    kod uzun diye yapıştırmadım hepsini altında butona basılana kadar bekleme komutu var,şöyle vereyim. yine de saniyeleri değiştirip deneyeceğim. Başka bir nedeni olabilir mi? Sağolasınınz bu arada


    lcd_init();
    lcd_send_byte(0,0x0d);
    lcd_gotoxy(1,1);
    printf(lcd_putc, "calisma modu");
    delay_ms(5);
    lcd_gotoxy(1,2);
    printf(lcd_putc,"seciniz");
    delay_ms(50);
    lcd_gotoxy(1,1);
    printf(lcd_putc," 1-derece 2-ilerigeri");//1-adım sayısı *30 derece döner 2- ileri geri 30 ar derece anında döner 3-sürekli ileri geri döndürürken hız ayarlar
    delay_ms(10);
    lcd_gotoxy(1,2);
    printf(lcd_putc," 3-hiz ");
    delay_ms(100);

    a=input(pin_a3);
    b=input(pin_a1);
    c=input(pin_a2);}
    printf(lcd_putc,"\fsecim bekleniyor");
    while(!(a||b||c))




  • quote:

    Orijinalden alıntı: egealtay

    1 gnd
    2 vdd+
    3 trimpotun 1ucu+ trimpotun 2orta ucu displayın 3 numaralı pininetrimpotun 3 ucu gnd şaseye baglanacak sen bu ucu gnd baglamışsın olmaz,
    4 rs
    5 gnd
    6 enable

    7-8-9-10 boş

    11 d7
    12 d8
    13 d9
    14 d10
    15 vdd
    16 gnd

    yanlışın burada lcd in 3 numaralı pinine trimpotun orta ucunu bagla ve kontras ayarını yap ekranda yazıları görünceye kadar trimpotu çevir,

    ege

    trimpotun yerine potansiyometre ile yapsam olmaz mı? komik bir soru gibi geldi ama cidden bilmiyorum :)
  • kart çizimini koy bakalım baglantılarında sorun var sanırım pot ile trimpot aynı şeydir birisi minyatür dür birisi büyüktür yaptığı iş aynıdır trimpotıun orta ucu lcd 3 numaralı ucuna baglayacaksın her iki boşta kalan uclarınıda birini + birini_ baglayıp ayrlayacaksın,

    ege
  • Yapay Zeka’dan İlgili Konular
    TV LED sorunu çözümü
    3 yıl önce açıldı
    Lcd Tv Leke Problemi [Resimli]
    13 yıl önce açıldı
    Daha Fazla Göster
  • tris ayarlarinda problem olabilir. D portunu tamamen cikis yapman gerekli.. Ayrica ekledigin lcd header dosyasi D portuna gore ayarlanmis olmali. ufak picler icin B portuna ayarli header dosyalari da var, karistirmis olabilirsin..



    < Bu mesaj bu kişi tarafından değiştirildi necoinside -- 17 Mayıs 2013; 14:37:44 >
  • Köye geldik internet sıkıntısı var :) dediklerinizi uygulayıp donecegim. Sagolun.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Bir de 10 nolu pin pin22 ye bağlı demişsiniz.Normalde data pinleri ya 8 dir yada 4 dür.Sizdeki bağlantıya göre 5 pin kullanılmış bir yanlışlık olmasın.Ayrıca bende 7 tane lcd var bunların 3 tanesi bozuk ve ekran tam sizin tarif ettiğiniz şekilde gösteriyor.Yani varsa başka lcd deneyin..
  • 10 nolu pini çıkardım. diğer söylediklerinizi de yaptım. (potansiyometre ile kontrast ayarı tamam,pin ayarlamaları tamam)
    Ancak lcd nin çalışmasında değişiklik yok yeni bir lcd ile de denedim olmadı. D portunu kullanıyorum lcd için. kod ve devre şemam şu şekilde(şemada 3nolu pin toprak ancak devremde potansiyometreyi bağladım);
    http://imageshack.us/photo/my-images/407/adszxop.png/



    //Program:step motor uygulaması 

    #include <16f877a.h>
    #fuses XT,NOWDT, NOPROTECT,NOBROWNOUT, NOWRT,NOLVP
    #use delay(clock=4000000)

    #include <lcd.c>
    #define derece_buton PIaN_a3//derece ayar butonu olarak tanımlandı
    #define tur_button PIN_E1//tur sayısını ayarlayacak buton
    #define ileri_geri PIN_E2// ileri geri butonu
    #define button PIN_b6

    int sure;
    int a=(pin_A3),b=(pin_A1), c=(pin_A2);
    int x=0,i=0;



    derece_30()//ileri yönde dönme fonksiyonu
    {
    output_b(0x01);
    delay_ms(10);
    output_b(0x02);
    delay_ms(10);
    output_b(0x04);
    delay_ms(10);
    output_b(0x08);
    delay_ms(10);
    }

    derece_e30()//geri yönde dönme fonksiyonu
    {
    output_b(0x08);
    delay_ms(10);
    output_b(0x04);
    delay_ms(10);
    output_b(0x02);
    delay_ms(10);
    output_b(0x01);
    delay_ms(10);
    }



    void main()

    {
    setup_adc(adc_clock_div_8);
    setup_adc_ports(AN0);
    setup_psp(PSP_DISABLED);
    setup_spi(SPI_SS_DISABLED);
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    enable_interrupts(global);

    set_tris_a(0b11111111);//a portu giriş olarak ayarlandı
    set_tris_b(0b00000000); // b portu çıkış olarak ayarlandı
    output_b(0b00000000);
    set_tris_d(0x00);//d portu çıkış olarak ayarlandı


    lcd_init();//lcd hazırlama komutu
    lcd_send_byte(0,1);//lcd ekran temizleme
    delay_ms(100);
    lcd_send_byte(0,0x0d);//imleç yanıp sönsün
    lcd_gotoxy(1,1);
    printf(lcd_putc, "calisma modu");
    delay_ms(5);
    lcd_gotoxy(1,2);
    printf(lcd_putc,"seciniz");
    delay_ms(50);
    lcd_gotoxy(1,1);
    printf(lcd_putc," 1-derece 2-ilerigeri");//1-adım sayısı *30 derece döner 2- ileri geri 30 ar derece anında döner 3-sürekli ileri geri döndürürken hız ayarlar
    delay_ms(10);
    lcd_gotoxy(1,2);
    printf(lcd_putc," 3-hiz ");
    delay_ms(100);

    a=input(pin_a3);
    b=input(pin_a1);
    c=input(pin_a2);

    output_b(0x01);
    delay_ms(100);
    output_b(0x02);
    delay_ms(100);
    output_b(0x04);
    delay_ms(100);
    output_b(0x08);
    delay_ms(100);
    printf(lcd_putc,"\fsecim bekleniyor");
    while(!(a||b||c))
    {
    a=input(pin_a3);
    b=input(pin_a1);
    c=input(pin_a2);
    }
    lcd_send_byte(0,1);
    if(a==1)
    {
    lcd_gotoxy(1,1);
    printf(lcd_putc," kac derece ?");
    delay_ms(10);
    lcd_gotoxy(1,2);
    printf(lcd_putc," x=%d",x);
    delay_ms(10);
    a=input(pin_a3);
    b=input(pin_a1);
    c=input(pin_a2);
    while(c==0)//c ye basılana kadar bu döngünün içine gir
    {
    c=input(pin_a2);
    x+=input(pin_a3);
    x-=input(pin_a1);
    lcd_gotoxy(1,2);
    printf(lcd_putc," x=%d ",x);
    delay_ms(100);
    lcd_send_byte(0,1);
    }
    lcd_send_byte(0,1);
    if(x>0)
    {
    for(i=0;i<x;i++)
    {
    derece_30();
    lcd_gotoxy(1,1);
    printf(lcd_putc,"Derece:%d",(i+1)*30);
    delay_ms(50);
    }
    for(i=0;i<x*(-1);i++)
    {
    derece_e30();
    lcd_gotoxy(1,1);
    printf(lcd_putc,"eDerece:%d,x:",-1*(i+1)*30);
    delay_ms(50);
    }
    }
    }

    else if (b==1)
    {
    lcd_send_byte(0,1);
    lcd_gotoxy(1,1);
    printf(lcd_putc," ileri geri mod ");
    delay_ms(50);
    while(c==0)
    {
    a=input(pin_a3);
    b=input(pin_a1);
    c=input(pin_a2);
    if (a==1)
    {
    derece_30();
    }
    else if (b==1)
    {
    derece_e30();
    }
    }
    }

    else if (c==1)
    {
    lcd_send_byte(0,1);
    lcd_gotoxy(1,1);
    printf(lcd_putc," hiz ayar mod ");
    delay_ms(50);
    while(c==0)
    a=input(pin_a3);
    b=input(pin_a1);
    c=input(pin_a2);
    set_adc_channel(0);
    delay_ms(10);
    sure=read_adc();
    output_b(0x01);
    delay_ms(sure);
    output_b(0x02);
    delay_ms(sure);
    output_b(0x04);
    delay_ms(sure);
    output_b(0x08);
    delay_ms(sure);
    }


    }





    < Bu mesaj bu kişi tarafından değiştirildi fthkynr -- 20 Mayıs 2013; 15:06:16 >




  • sorun çözüldü. lcd.c dosyamda lcd test komutu varmış. 5.pini +5v a bağlayinca testi geçiyor ve çalışıyor
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.