Elektrotekno.com Ana Sayfa || Programlanabilir Cihaz ve Elemanlar || Microchip Pic Serisi
shift register ile LCD sürülmesi - fikirleriniz
Açıklama:
Elektrik, Elektronik, Haberleşme ve Otomasyon konularının ağırlıklı olarak konuşulduğu, tartışıldığı ve bilgi paylaşımı yapıldığı forumumuza hoşgeldiniz.
Şu an Kod Paylaşım ve Soru Cevap Alanı kategorisi içerisindeki Microchip Pic Serisi forumunda bulunuyorsunuz.
Bu sayfada üyelerimizin "shift register ile LCD sürülmesi - fikirleriniz" konusundaki problem, görüş ve önerileri okuyabilir ayrıca konu hakkındaki doküman, resim, proje, devre ve programlara ücretsiz olarak ulaşabilirsiniz. Üye olduktan sonra sizler de konu hakkında sorular sorabilir ya da yorum ve paylaşım yaparak birikimlerinizi aktarabilirsiniz.
Forumdan tam olarak yararlanabilmek için üye olmayı unutmayınız!
Elektrik, Elektronik, Haberleşme ve Otomasyon konularının ağırlıklı olarak konuşulduğu, tartışıldığı ve bilgi paylaşımı yapıldığı forumumuza hoşgeldiniz.
Şu an Kod Paylaşım ve Soru Cevap Alanı kategorisi içerisindeki Microchip Pic Serisi forumunda bulunuyorsunuz.
Bu sayfada üyelerimizin "shift register ile LCD sürülmesi - fikirleriniz" konusundaki problem, görüş ve önerileri okuyabilir ayrıca konu hakkındaki doküman, resim, proje, devre ve programlara ücretsiz olarak ulaşabilirsiniz. Üye olduktan sonra sizler de konu hakkında sorular sorabilir ya da yorum ve paylaşım yaparak birikimlerinizi aktarabilirsiniz.
Forumdan tam olarak yararlanabilmek için üye olmayı unutmayınız!
selsen yazmış
Busy olayını kullanmasa da olur bence. LCD'nin verileri işleme süreleri bellidir sadece o kadar bekleme yapar. Hem RW pinini de kullanmaya gerek kalmaz.
selam selsen,
düşük hızlar için haklısın ama 20mhz de sorun yaşayabilir.kullandığı kütüphanenin içerisinde bekleme süreleri nop yada delay_cycles() fonksiyonu ile yapıldıysa kesinlikle problem yaşayabilir..özellikle ekran silme fonksiyonu lcdlerde uzun sürrüyor.ekranı silerek beklemeden göndereceği datalar havada kalabilir..
kolay gelsin..
Re: yüksek hızda problem yaşayabilir
esb72 yazmış
selsen yazmışBusy olayını kullanmasa da olur bence. LCD'nin verileri işleme süreleri bellidir sadece o kadar bekleme yapar. Hem RW pinini de kullanmaya gerek kalmaz.
selam selsen,
düşük hızlar için haklısın ama 20mhz de sorun yaşayabilir.kullandığı kütüphanenin içerisinde bekleme süreleri nop yada delay_cycles() fonksiyonu ile yapıldıysa kesinlikle problem yaşayabilir..özellikle ekran silme fonksiyonu lcdlerde uzun sürrüyor.ekranı silerek beklemeden göndereceği datalar havada kalabilir..
kolay gelsin..
Selam arkadaşlar,
projelerimde RW ucunu besleme ground'una bağlayıp zaman gecikme ile işi hallediyorum ve böylelikle okuma işinden kutulmuş ve işlemci üzerinde bir pin'im boşa çıkmış oluyor. Bugüne kadar da sorun yaşamadım. fakat kullanılan LCD nin meşgul zamanın belirlenip ona göre zaman gecikmesi konması yeterli.
Saygılarımla..
Başa dön
shift register
Arkadaşlar merhabalar,
Önceki günlerde açmış olduğum bu konu için tekrardan sizin bilgilerinizi istiyeceğim. Normalde kullanacağım yazılımın bu pin dağılımına göre kütüphaneye sahip olmaması benim biraz daha programda kasmama neden oldu fakat günlerdir uğraşmama rağmen ekrana hala bir harf bile yazamadım. D7' nin busy flag check yapacağı düşünülürse, lcd' nin başlatılması ile ilgili olarak algoritma tam olarak ne olmalıdır. LCD' nin enable ucununda shift içerisinde olması sanırım programımda karışmaya neden oluyor. Enable high > low, Low> high geçişleri tam olarak beceremedim sanırım . kolay gelsin
Pic çıkışları şu şekildedir:
pin_b0 = seri data
pin_b1 = latch
pin_b2 = clock
pin_b3 = lcd_d7
Başa dön
busy olayı iptal edilmiş bi lcd hadder umarım işine yarar
Kod
/* for 4x20 lcd
* filename : lcd.c
* hardware : controller -> all pic series
*/
/**** lcd pinleri ****/
#define lcd_en pın_d2 //lcdyi yetkilendirmek icin
#define lcd_rs pın_d3 //konut yada kod yapmak icin
#define lcd_d7 pın_d7 //lcd veri yolu pin tasarrufu için 4 bit kullandık
#define lcd_d6 pın_d6
#define lcd_d5 pın_d5
#define lcd_d4 pın_d4
/*********************/
//lcd_rw ucu 0'a bagli
#define lcd_line_bir 0x80 // lcd ram adres 1. satir
#define lcd_line_iki 0xc0 // lcd ram adres 2. satir
#define lcd_line_uc 0x94 // lcd ram adres 3. satir
#define lcd_line_dort 0xd4 // lcd ram adres 4. satir
/***************************************************
* prototype(s) *
***************************************************/
void lcd_yetkilendirme(); // lcd yetkilendirme
void lcd_komut(unsigned char komut); // lcd komut
void lcd_putc(unsigned char ascii); // lcd tek karakter yazma
void lcd_string_yaz(unsigned char *lcd_string); // lcd string yazma
void lcd_init();
void lcd_goto_xy(unsigned char x,unsigned char y);
/***************************************************
* sources *
***************************************************/
//===================================================
void lcd_yetkilendirme()
//===================================================
{
output_bit( lcd_en , 0); /* clear bit en */ //lcd yi bir kere yetki,lendirmek için
delay_ms(2);
output_bit( lcd_en , 1); /* set bit en */
}
//===================================================
void lcd_komut(unsigned char komut) //lcdye komut gönder
//===================================================
{
unsigned char nibble;
output_bit( lcd_rs , 0); /* clear bit rs */
nibble = (komut>>4) & 0x0f; //ilk 4 bitini gönderdik
output_bit(lcd_d4 , (nibble & 0x01) ); //pinlere tek tek gönderdik. buton tek seferde göndermediği için
output_bit(lcd_d5 , (nibble>>1 & 0x01) );
output_bit(lcd_d6 , (nibble>>2 & 0x01) );
output_bit(lcd_d7 , (nibble>>3 & 0x01) );
lcd_yetkilendirme();
nibble = komut & 0x0f;
output_bit(lcd_d4 , (nibble & 0x01) );
output_bit(lcd_d5 , (nibble>>1 & 0x01) );
output_bit(lcd_d6 , (nibble>>2 & 0x01) );
output_bit(lcd_d7 , (nibble>>3 & 0x01) );
lcd_yetkilendirme();
delay_ms(2);
}
//===================================================
void lcd_putc(unsigned char ascii) //karakter gönderir. tek karakter
//===================================================
{
unsigned char nibble;
output_bit( lcd_rs , 1); /* set bit rs *///veri gönderdiğin için 1 oldu.
nibble = (ascii>>4) & 0x0f;//0x0f ile maskeliyor.
output_bit(lcd_d4 , (nibble & 0x01) ); //pinlere tek tek gönderdik. buton tek seferde göndermediği için
output_bit(lcd_d5 , (nibble>>1 & 0x01) );
output_bit(lcd_d6 , (nibble>>2 & 0x01) );
output_bit(lcd_d7 , (nibble>>3 & 0x01) );
lcd_yetkilendirme();
nibble = ascii & 0x0f;
output_bit(lcd_d4 , (nibble & 0x01) );
output_bit(lcd_d5 , (nibble>>1 & 0x01) );
output_bit(lcd_d6 , (nibble>>2 & 0x01) );
output_bit(lcd_d7 , (nibble>>3 & 0x01) );
lcd_yetkilendirme();
delay_ms(2);
}
//===================================================
void lcd_string_yaz(unsigned char *lcd_string)
//===================================================
{
while (*lcd_string)
{
lcd_putc(*lcd_string++);
}
}
void lcd_init()
{
output_bit( lcd_en , 1); /* set bit en */
output_bit( lcd_rs , 0); /* clr bit rs */
lcd_komut(0x33);
lcd_komut(0x32);
lcd_komut(0x28);
lcd_komut(0x0c);
lcd_komut(0x06);
lcd_komut(0x01); /* clear */
delay_ms(100);
}
//===================================================
void lcd_goto_xy(unsigned char x, unsigned char y) //lcdye istediğimiz yere veri yazmamızı sağlar. satir ve sütün olarak
//x ,y=sutun,satir
//===================================================
{
int adres; //ramdeki adresi tutar
switch( y )
{
case 1:
adres = lcd_line_bir;
break;
case 2:
adres = lcd_line_iki;
break;
case 3:
adres = lcd_line_uc;
break;
case 4:
adres = lcd_line_dort;
break;
}
adres += x-1;
lcd_komut(adres); //lcdye veri gönderiyor
}
Başa dön
jal kodu
selam onur,
komanchero nun istediği shift registerle lcd sürmek.senin kodun daha her pini pic'e bağlı olması geriyor.o yazılımı jal ile yapmış c kodunu kullanamaz zaten.
kolay gelsin
Başa dön
ccs güzel
selam onur,
paylaşımın için teşekkürler.CCS ile uğraşman çok güzel.aslında C ile program yazmak çok esnek ve zevkli
tekrar teşekkürler..
kolay gelsin
Başa dön
shift
selam arkadaslar
tüm yorumlar icin tesekkur ediyorum. Fakat soruna soyle bir cozum getirdim . aslında yapmamam bisiyi yapmak zorundayım, devre uzerindeki LCD enable ucunu shift' ten ayırıyorum ve pice vereceğim. İlk basta bunu yapma luksum yok demistim, fakat isin icinden cikamayinca artik picin bir ucu ile kısa devre edicem ve boylelikle LCD enable karisikligindan kurtulmus oluyorum. Bunun icin JAL ile bir program yazıyorum ve JAL ile ugrasan arkadalar icin kaynak olabilir , buradan yayınlarım önümüzdeki günlerde . herkeze kolay gelsin
Başa dön
jal ile 4 bit lcd
Merhaba arkadaşlar
JAL yazılımı ile yapılan shift registerli LCD kontrol kodları aşağıdadır. İlgilenen arkadaşlara yardımcı olur düşüncesindeyim ,. Yazılımı ilgili kütüphaneleri değiştirerek JAL V2' ye uyarlıyabilirsiniz. Kolay gelsin
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
-- 4 bit Data ile LCD kurulum ve yazdırma
-- 4x20 LCD Modül
-- -----------------------------------------------------------------------------
include 16f877_8
include jlib
include cio
-- cio = seri data kütüphanesi
port_a_direction = all_output
port_c_direction = all_output
disable_a_d_functions
-- -----------------------------------------------------------------------------
-- LCD ve Shift Register Latch Alt programı
-- -----------------------------------------------------------------------------
-- pin_c4 = shift register latch
-- pin_a5 = LCD enable
procedure latch is
delay_100us pin_c4 = high pin_c4 = low pin_a5 = high pin_a5 = low delay_100us
end procedure
-- -----------------------------------------------------------------------------
-- 1-)LCD ayarlanmasi alt programı
-- -----------------------------------------------------------------------------
procedure lcd_baslatma is
-- 1.1-) LCD 4 bit ayarlaması
cio_out_byte(0x02)
latch
cio_out_byte(0x02)
latch
cio_out_byte(0x0C)
latch
cio_out_byte(0x02)
latch
cio_out_byte(0x0E)
latch
-- 1.4-) Display on off ayarlaması
cio_out_byte(0x00)
latch
cio_out_byte(0x0C)
latch
-- 1.5-) Entry mode ayarlaması
cio_out_byte(0x00)
latch
cio_out_byte(0x06)
latch
-- 1.6-) Cursor / Display ayarlaması
cio_out_byte(0x01)
latch
cio_out_byte(0x00)
latch
end procedure
-- 2-) LCD baslangic yazdırma alt programı
procedure lcd_baslangic_yazdir is
procedure ilk_satir is
cio_out_byte(0x08) latch cio_out_byte(0x00) latch -- ilk satir adresi
cio_out_byte(0x45) latch cio_out_byte(0x43) latch -- (S)
cio_out_byte(0x44) latch cio_out_byte(0x41) latch -- (A)
cio_out_byte(0x45) latch cio_out_byte(0x44) latch -- (T)
cio_out_byte(0x44) latch cio_out_byte(0x49) latch -- (I)
cio_out_byte(0x45) latch cio_out_byte(0x42) latch -- (R)
cio_out_byte(0x43) latch cio_out_byte(0x41) latch -- (1)
end procedure
procedure ikinci_satir is
cio_out_byte(0x0C) latch cio_out_byte(0x03) latch -- ikinci satir adresi
cio_out_byte(0x45) latch cio_out_byte(0x43) latch -- (S)
cio_out_byte(0x44) latch cio_out_byte(0x41) latch -- (A)
cio_out_byte(0x45) latch cio_out_byte(0x44) latch -- (T)
cio_out_byte(0x44) latch cio_out_byte(0x49) latch -- (I)
cio_out_byte(0x45) latch cio_out_byte(0x42) latch -- (R)
cio_out_byte(0x43) latch cio_out_byte(0x42) latch -- (2)
end procedure
procedure ucuncu_satir is
cio_out_byte(0x09) latch cio_out_byte(0x0A) latch -- ucuncu satir adresi
cio_out_byte(0x45) latch cio_out_byte(0x43) latch -- (S)
cio_out_byte(0x44) latch cio_out_byte(0x41) latch -- (A)
cio_out_byte(0x45) latch cio_out_byte(0x44) latch -- (T)
cio_out_byte(0x44) latch cio_out_byte(0x49) latch -- (I)
cio_out_byte(0x45) latch cio_out_byte(0x42) latch -- (R)
cio_out_byte(0x43) latch cio_out_byte(0x43) latch -- (3)
end procedure
procedure dorduncu_satir is
cio_out_byte(0x0D) latch cio_out_byte(0x0D) latch -- dorduncu satir adresi
cio_out_byte(0x45) latch cio_out_byte(0x43) latch -- (S)
cio_out_byte(0x44) latch cio_out_byte(0x41) latch -- (A)
cio_out_byte(0x45) latch cio_out_byte(0x44) latch -- (T)
cio_out_byte(0x44) latch cio_out_byte(0x49) latch -- (I)
cio_out_byte(0x45) latch cio_out_byte(0x42) latch -- (R)
cio_out_byte(0x43) latch cio_out_byte(0x44) latch -- (4)
end procedure
ilk_satir
ikinci_satir
ucuncu_satir
dorduncu_satir
end procedure
-- -----------------------------------------------------------------------------
-- ANA PROGRAM
-- -----------------------------------------------------------------------------
delay_10ms(4)
lcd_baslatma -- 1-) LCD' nin başlatılması
lcd_baslangic_yazdir -- 2-) LCD başlangıç ekranının yazdırılması
Başa dön
shift register ile LCD sürülmesi - fikirleriniz
Benzer Konular
- kablosuz haberlesmeyi iceren bir proje için fikirleriniz
- çaydanlıkları koruma devresi - fikirleriniz?
- Doğuş Üniversity - Ece102 Deney Raporu - 6 - Registers and Shift Registers
- Fırçasız DC servo motor frenleme - fikirleriniz?
- Asenkron motor faz akımları dengesiz - fikirleriniz
- Açı Ölçme Hakkında Fikirleriniz
- yumuşak yolvericiler - fikirleriniz?
- step motor ve sürülmesi(71 sayfa pdf)
- Senkron Generator ile kompanizasyon - fikirleriniz?- kablosuz haberlesmeyi iceren bir proje için fikirleriniz
- çaydanlıkları koruma devresi - fikirleriniz?
- Doğuş Üniversity - Ece102 Deney Raporu - 6 - Registers and Shift Registers
- Fırçasız DC servo motor frenleme - fikirleriniz?
- Asenkron motor faz akımları dengesiz - fikirleriniz
- Açı Ölçme Hakkında Fikirleriniz
- yumuşak yolvericiler - fikirleriniz?
- yaz stajımı ankara TPAO da yapmayı düşünüyorum, fikirleriniz?
- PIC ve 74LS247 ile 4 DIGIT 7 Segment (Ortak Anot) SürülmesiSitemize üyelik ve içeriğin indirilmesi tamamen ücretsizdir. Sitemizde paylaşılan tüm dokümanlar (Tezler, makaleler, ders notları, sınav soru cevaplar, projeler) paylaşımcıların bireysel çalışmaları olup telif hakları kendilerine aittir ya da açık bir şekilde kamusal alana yerleştirilmiş dokümanların birer kopyalarıdır. Kişilerin bireysel çalışmalarını sitemizde yüklemesinde, sitemizde paylaşıma teşvik eden puanlama sisteminin de etkisi büyüktür. Bunlara rağmen hala size ait olan ve burada bulunmasına izin vermediğiniz dokümanlar varsa iletişim bölümünden yöneticilere bildirmeniz durumunda derhal silineceklerdir.