Elektronik / Mikrodenetleyici Projeleri/

One Wire LCD

Sponsorlu Bağlantılar

Mühendislik, bence, yeni bir şeyler keşfetmek, yaratmak, hiç olmadı eski sistemlerle cinlikler oluşturmak demek. Geçen haftalarda bu sitede gördüğüm tek pin ile LCD uygulaması da bunlardan biri. Ne zamandır LCD’lerle haşır neşir olmuştum, 3 kablo ile 74HC595 kullanarak sürmüştüm fakat tek kablo mu? İşte bunun nasıl olacağını düşünedururken o site gözüme çarptı. Hemde tüm elektronikçilerin bildiği bir sabiti kullanarak yapılmıştı; T=RC. T=RC, sonucu saniye olan, ilk önce fizik II dersinde bizlere gösterilen, daha sonrasında ise devre analizi, mikroelektronik, sinyal gibi bir çok dersin içinde yer almış bir sabit.

Kapasitör förmülünde R direnci üzerinden dolan C büyüklüğünde kapasitörün üzerindeki gerilim şu formülle değişecektir: Vc(T)=V[1-exp(-t/RC)]. Buradan da görüleceği üzere t sonsuza gittiğinde kapasitörün üzerindeki gerilim en sonunda beslemeye eşit olacaktır. Bu doluma ait grafiği ise yukarıda görebilirsiniz.

Öncelikle aşağıdaki devre şemasını bir inceleyelim.

One_Wire_1

Roman Black’in de dediğine göre kullandığı yöntem yeni bir yöntem olmayıp, çok eskiden beri kullanılmaktaymış. Mantığını ise tetiklemenin yükselen kenarda olduğunu düşünerek şöyle açıklayabiliriz:

– Kapasitör değerimiz C ve direnç değerimiz R ise, bu çift ile oluşturulmuş bir devrede dolu kapasitörün boşalması için en az 5T’lik bir zamana ihtiyaç vardır.

– Eğer sinyal çok hızlı sıfıra inip tekrar 5V seviyesine yükselirse, kapasitör boşalmadan karşı tarafa High seviyesinin iletimi sağlanır.

– Yine aynı şekilde hat sıfıra çekilip, 5T kadar süre beklenildiğinde ise kapasitör boşalacak ve yükselen kenarla karşı tarafa Low seviyesi iletimi sağlanacaktır.

– Low seviyesi gönderiminden sonra ise kapasitörün tekrar dolması için 5T kadar beklemek gerekmektedir.

Piyasada bulunabilecek LCD’ler 4 data ve 3 kontrol pini ile kontrol edilebilmektedir. Ayrıca yukarıdaki resimde gösterildiği gibi çalışma, sadece seven segment gibi uygulamalarda işe yaramaktadır. LCD’ler ise komutları aynı anda almak zorundadır. Bunun için önce kaydırma işlemini kendi içinde yapan, daha sonra ise verilen başka bir sinyalle bu kaydırılmış bilgileri aynı anda paralel çıkışa verebilecek bir entegre kullanılmalıdır. Bunun için ben 74HC595’i kullandım.

Shift register olarak 74HC595 kullanıp, kapasitör ve direnç değerlerini de alttaki gibi belirleyince, bilgi göndermek için oluşan zaman diyagramı, devre ile birlikte aşağıdaki gibi olmaktadır.

74HC595_One_Wire_2

Şimdi data hattına Low sinyali göndermek için küçük bir hesaplama yapalım:

R=1k5 ve C=2n2 verilmiş. Buradan T=RC=3.3us~3us yapmaktadır. 5T=15us yapar. Görüldüğü üzere yukarıdaki tüm diyagramlar buna göre oluşturulmuştur. Burada dikkat edilecek en önemli konu ise latch sistemini tetiklemeye yarayan RC değerinin, data göndermek için kullanılan zamandan en az 20 kat daha fazla sürmesi gerekmesidir. Böylelikle olası çakışmalar engellenebilmektedir.

Aşağıda ise örnek olarak 0xD4 sayısının karşıya gönderimi gösterilmiştir.

74HC595_One_Wire_lcd

Yukarıdaki resimden de görüleceği üzere 0. bit kullanım dışında kalmaktadır. Bunu dikkate alarak LCD kütüphanenizi yazmakta fayda vardır. Aşağıdaki kodlarda ise tek hattan veri gönderimi için gerekli kütüphane yer almaktadır. Bunu kullanmak istediğiniz kütüphaneye yerleştirip, dilediğiniz gibi tek hattan LCD veya benzeri araçları kontrol edebilirsiniz.

One Wire Fonksiyonu:

void one_wire_control(unsigned char temp)
{
	char i;
	One_Wire_LCD=1;
	for(i=0;i < 8;i++)
	{
		if((temp<<(i))&0x80)
		{
			One_Wire_LCD=0;
			One_Wire_LCD=1;
		}
		else
		{
			One_Wire_LCD=0;
			__delay_us(15);
			One_Wire_LCD=1;
			__delay_us(30);
		}
	}
	One_Wire_LCD=0;
	__delay_us(210);
	One_Wire_LCD=1;
	__delay_us(300);
}

Buradaki zamanlamaları istediğiniz RC değerine göre tekrar düzenleyebilirsiniz.
Aşağıda, yukarıdaki fonksiyon kullanılarak oluşturulmuş devreyi görebilirsiniz. Maalesef elimde 2.2nF olmadığı için gerçekte deneme şansım olmadı fakat en kısa sürede deneyip sonuçları buradan yine paylaşacağım.

One_Wire_LCD_circuit

Son olarak projeyi yapacaklar için, çok gürültülü ortamlarda devrenin çalışması üzerinde barındırdığı kapasitör yüzünden sorunlar oluşturabilir. Buna dikkat edilerek, uzun süreli çalışma için kutupsuz kapasitörler kullanılması önerimdir.

Proje ile ilgili simülasyon ve .hex dosyası: One Wire LCD

Dosya indirme LINK listesi (TXT formatında) link-21449.zip şifre-pass: 320volt.com

Herkese iyi çalışmalar.

  • H.Tuna

    Fırat Merhaba,

    Siteni Mutlu Hocam aracılığı ile öğrendim. Açıkcası uzun zamandır Ar-Ge temelli işlerle uğraşmaktayım. Son 2 yıldırda profesyonel olarak Ar-Ge proje yöneticisi olarak çalışmaktayım.

    Siten çok hoşuma gitti. Keşke tüm öğrenci arkadaşlarımız senin gibi azimli olsa. Başarılarının devamını dilerim. Bu yenilikçi yolda yardımcı olabileceğimiz bir konu olursa yazarsın.

    Özellikle böyle sıradışı projeler paylaşman çok güzel.

    Hüseyin TUNA/EN-KO

  • FxDev

    Merhabalar Hüseyin Bey,

    Mutlu Hocamızın bizlere satır aralarında öğrettiklerini, birazcık kullanabildiysem ne mutlu bana.
    Araştırma ve geliştirme benim de çalışmayı istediğim bir birim. Sizin gibi deneyimli insanlardan bol bol faydalanırım umarım.

    Haftaya firmanızda staja başlayacağım, umarım sizi orada görme şansı elde ederim.

    Bu tür projeleri ben de çok seviyorum, ileride bir kaç tane buna benzer proje koymayı düşünüyorum.

    Her şey için teşekkürler..

  • Eşref Soylu

    Yazdıgınız kodu biraz açar misiniz? Ben bunu kendi kütüphaneme nasıl adapte edebilirim? CCS C kullanıyorum ama mantığını anlamadım ki kendi dilime uyarlayabileyim.

  • FxDev

    Kodu açmamı gerektirecek bir durum yok. Bu bir C fonksiyonudur ve CCS C ile de gayet uyumlu çalışabilmektedir. Hiç yapamazsan yukarıdaki sinyal şekillerinden uygun kodu yazabilmelisin. Eğer bunu yapamıyorsan biraz C çalışman gerekli demektir.

    Kolay gelsin..