KingFrm

KingFrm

Bilgi paylaşım adresi
 
AnasayfaAnasayfa  TakvimTakvim  GaleriGaleri  SSSSSS  AramaArama  Üye ListesiÜye Listesi  Kullanıcı GruplarıKullanıcı Grupları  Kayıt OlKayıt Ol  Giriş yapGiriş yap  

Paylaş | 
 

 LCD Ekranlı Basit Termometre Devresi

Aşağa gitmek 
YazarMesaj
___YöRüKBeYi___
Yönetici
Yönetici
avatar

Mesaj Sayısı : 185
Reputation : 16
Kayıt tarihi : 14/03/11
Yaş : 35
Nerden : ESKİŞEHİR

MesajKonu: LCD Ekranlı Basit Termometre Devresi   Çarş. Mart 16, 2011 6:18 pm

[Linkleri görebilmek için üye olun veya giriş yapın.]



Bu yazıda LCD ekranlı basit bir termometre yapımını anlatmaya
çalışacağım. Devrenin çalışan halini ve çeşitli ortamlardaki testini
yazının devamında bulabileceğiniz videoda görebilirsiniz.
“Nerden çıktı bu termometre?” derseniz de, masamın üstünde duran LCD ve
PIC’e ek olarak önceden alıp bir köşeye attığım sıcaklık sensörünü
bulmam en büyük neden tabi. [Resimleri görebilmek için üye olun veya giriş yapın.]
Ayrıca haberlerde gördüğümüz “Yarın sıcaklık -3 derceye kadar düşecek.”
benzeri söylemlerden dolayı “Dışarısı gerçekten ne kadar soğuk?” diye
düşünmem de bir diğer etken.
Kullanacağımız sensör teorik olarak -55, +125 santigrat derece arası
sıcaklıkları ortalama 0.5 santigrat derece hassiyetler ölçebiliyor. Yine
teorik olarak devreyi 3V DC ve üzeri bir kaynakla çalıştırabilirsiniz.
Devreye geçmeden önce malzemelerimizi sayalım:


  • DS18B20

  • PIC 16F628 veya PIC 16F628A

  • 10K veya yakın değerde POT

  • LED (Herhangi bir renk olabilir.)

  • 470 Ohm Direnç

  • 4.7 KOhm Direnç

  • HD44780 veya benzeri sürücü entegre içeren 16×2 LCD Ekran

Her malzemeden bir adet olması yeterlidir. Devrenin özelliklerine kısaca bakalım.
Sensörden dolayı geniş bir sıcaklık aralığını ölçebiliyoruz. Devrede
okuma yapıldığını belirten bir adet LED bulunuyor. Sensör yaklaşık her
saniyede bir kez okunmakta ve okunan değer ekrana yazdırılmaktadır. Her
okuma işlemi esnasında da LED kısa bir süre yanıp, sönmektedir. Devre
şeması aşağıdaki gibidir:
[Resimleri görebilmek için üye olun veya giriş yapın.] [Linkleri görebilmek için üye olun veya giriş yapın.]

Evet, gördüğünüz gibi devre oldukça basit. Zaten tüm işi sevgili
mikrokontrolcümüz PIC yapıyor. LCD’yi 4 bit olarak sürüyoruz. İşimizi
kolaylaştıran eleman ise sensörümüz: DS18B20. Devreyi 5V civarı voltaj
veren bir DC kaynak ile çalıştırabilirsiniz. Devre, video çekimlerinde
4.5V ile çalışıyordu.
Bu yazının konusu termometre devresi olduğudan, DS18B20, LCD gibi
elemanların kullanımı yüzeysel olarak anlatılmıştır. Yazı konu anlatımı
niteliğinde değildir. Bu elemanların kullanımı ile ilgili detaylı bilgi
arayanların ihtiyacını bu yazı karşılamayabilir. İlerleyen zamanlarda
yayınlanacak başka yazılarda, bahsi geçen elemanların kullanımı detaylı
bir şekilde anlatılabilir.

DS18B20, Dallas firması tarafından üretilen bir sıcaklık sensörü.
Türkiye’de 2-3 Tl civarında bulabilmeniz mümkün. DS18B20 dijital bir
sensör ve sıcaklık değerini iletişim kurarak okuyoruz. Sensör tek hat
üzerinden (“one-wire”) iletişim kuruyor. Sensörü veri hattı ve nötr ile
besleyebilmeniz (“parasite power”) mümkün. Bu devrede bu özelliği
kullanmıyoruz.
Aslında DS18B20′nin alarm özelliği gibi kullanmadığımız başka
özellikleri de mevcut. Merak edenler, internetten sensörün kullanım
kılavuzuna (“datasheet”) erişerek detaylı bilgiye ulaşabilir. Tek hat
üzerinden iletişim kurarken kullanılan protokolün en önemli
avantajlarından biri ise tek bir hat üzerinde birden fazla sensörün
bağlanabiliyor olması. Mikrokontrolcünüzün tek bir pinini feda ederek
birden fazla sensörü ayrı ayrı okuyabilirsiniz. Bu devrede sadece tek
bir sensör okuyoruz. Belki başka bir yazıda sensörün diğer
özelliklerinin kullanımına ve tek hat üzerinden birden fazla sensörün
okunmasına değinilebilir.
Kullanacağınız ekranının HD44780 veya benzeri başka bir sürücü içermesi
gerekiyor. Çoğu satıcı sattığı ürünü bilmese de piyasada bulacağınız
LCDlerin çoğu bu şekildedir. Alırken dikkat etmeniz gereken nokta
satıcıların bir kısmı ücreti daha yüksek olduğu için grafik LCD satmaya
çalışmaktadır. Aldığınız LCD ekranın 16×2 Dot-Matrix LCD olduğundan emin
olunuz.

Programlama dili olarak Pic Basic Pro dilini kullandım. Bu tür basit
projelerde dilin yazım rahatlığı büyük bir zaman kazancı ve kolaylık
sağlıyor. PBP’nin yetersiz olduğu noktalar yok değil. Bu devre için
ihtiyacımızı çok rahat karşıladığından tercih ettim. İsterseniz
programımıza bir göz atalım.
‘* Adı : Termometre
‘* Yazar : [Linkleri görebilmek için üye olun veya giriş yapın.] – Alper Yazar (90alper90)
‘* Yazı Adresi : [Linkleri görebilmek için üye olun veya giriş yapın.]
‘* Notlar : PBP fonksiyonlarının Türkçe açıklamalarına
[Linkleri görebilmek için üye olun veya giriş yapın.]
‘adresinden ulaşabilirsiniz. Sorularınızı iletmek için “Yazı Adresi” ile belirtilen adresteki yazıya yorum yazabilirsiniz.
@ DEVICE pic16f628, WDT_OFF
@ DEVICE pic16f628, PWRT_OFF
@ DEVICE pic16f628, BOD_OFF
@ DEVICE pic16f628, LVP_OFF
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16f628, MCLR_OFF
@ DEVICE pic16f628, INTRC_OSC_NOCLKOUT
Include “modedefs.bas”
DEFINE OSC 4 ‘4 Mhz hızında çalışıyoruz.
SENSOR VAR PORTB.7 ‘Sensör PORTB.7′ye bağlı
LED VAR PORTB.6 ‘LED PORTB.6′ya bağlı
MESGUL VAR BYTE ‘Çeşitli değişken tanımlamaları
BILGI VAR WORD
ISARET VAR BYTE
ONDA1 VAR WORD
ONDA2 VAR WORD
ARA VAR WORD
DEGER VAR BYTE
‘LCD TANIMLAMALARI
DEFINE LCD_DREG PORTB ‘LCD Veri pinleri PORTB’ye bağlı.
DEFINE LCD_DBIT 0 ‘LCD’nin D0 pini PORTB.0′a bağlı
DEFINE LCD_RSREG PORTB ‘RS PİNİ PORTB’ye bağlı
DEFINE LCD_RSBIT 4 ‘RS PİNİ = PORTB.4
DEFINE LCD_EREG PORTB ‘ENABLE PİNİ PORTB’ye bağlı
DEFINE LCD_EBIT 5 ‘ENABLE PİNİ = PORTB.5
DEFINE LCD_RWREG PORTA ‘RW PİNİ KULLANILMIYOR – Kullanılmayan bir pin tanımlandı.
DEFINE LCD_RWBIT 1 ‘RW PİNİ KULLANILMIYOR – Kullanılmayan bir pin tanımlandı.
DEFINE LCD_BITS 4 ‘LCD 4 BİT SÜRÜLÜYOR
DEFINE LCD_LINES 2 ‘LCD 2 SATIRLIK
‘LCD TANIMLAMALARI BİTİŞ
TRISA=%11111111 ‘PORT giriş-çıkış tanımalamları
TRISB=%10111111
PAUSE 500 ‘Ekranın hazır olması için biraz bekliyoruz.
LCDOUT $FE,$40,6,9,9,6,0,0,0,0 ‘Derece gösterimi için özel karakteri LCD’ye yüklüyoruz.
LCDOUT $FE,$48,4,0,14,4,4,4,14,0 ‘İ karakterini LCD’ye yüklüyoruz.
LCDOUT $FE,$50,0,0,4,4,4,4,4,0 ‘ı karakterini LCD’ye yüklüyoruz.
LCDOUT $FE,1,1,”zoelektronik” ‘İlk satıra İzoelektronik yaz.
LCDOUT $FE,$C0,”90alper90 – 2010″ ‘İkinci satıra yaz.
PAUSE 3000 ‘Biraz bekle
LCDOUT $FE,1,”S”,2,”cakl”,2,”k:” ‘Ekranı temizleyip, üst satıra Sıcaklık: yaz.
BASLA: ‘Dongüye gir.
ISARET=”+”
OWOUT SENSOR,1,[$CC,$44] ‘Sensöre sıcaklığı okumasını söyle.
BEKLE: ‘Sensör hazır olana kadar bekle.
OWIN SENSOR,4,[MESGUL]
IF MESGUL=0 THEN
GOTO BEKLE
ENDIF
DEVAM:
OWOUT SENSOR,1,[$CC,$BE] ‘Sensöre okuduğu değeri göndermesini söyle.
OWIN SENSOR,0,[BILGI.LOWBYTE,BILGI.HIGHBYTE] ‘Gelen 16 bitlik bilgiyi al.
‘Programın devamındaki algoritma daha etkili bir şekilde yazılabilir.
Bu uygulamada performans çok da etkili olmadığından aklıma gelen ilk
algoritmayı kullandım.
‘Kodun mantığını anlamanız açısından kod üzerine düşünmeniz daha
faydalı olacaktır. Bu yüzden kodların yanına açıklama yazmıyorum.
‘Fakat anlamadığınız bir nokta olursa lütfen
‘http://www.izoelektronik.com/lcd-ekranli-basit-termometre-devresi.htm
adresindeki yazının altına yorum yazarak sorularınızı iletiniz.
IF BILGI.BIT13=1 THEN ‘Sıcaklık negatif ise
ISARET=”-” ‘İşaret artık + değil -
BILGI=~BILGI ‘Gelen bilgideki bitleri tersle, 1->0, 0->1
BILGI=BILGI+1 ‘Bilgiyi 1 arttır.
ENDIF
ARA=BILGI*625 ‘12 bit hassasiyet kullandığımız için her değer 0.0625 santigrat dereceye denk geliyor.
DEGER=DIV32 10000
ARA=BILGI*625
ONDA1= DIV32 1000
ARA=BILGI*625
ONDA2= DIV32 100
ONDA1=ONDA1-(DEGER*10)
ONDA2=ONDA2-((dEGER*100)+(ONDA1*10))
LCDOUT $FE,$C0,” ” ‘LCD ekranın alt satırını temizle
LCDOUT $FE,$C0,ISARET,#DEGER,”.”,#ONDA1,#ONDA2,” “,0,”C”
HIGH LED ‘LEDi yakıp söndürerek döngünün bittiğini belirt.
PAUSE 200
LOW LED
PAUSE 800
GOTO BASLA ‘BASLA etiketine dön
END
Kodların içinde de belirttiğim gibi çok daha güzel algoritmalar ile bu
iş yapılabilir. Bu devre için performans çok önemli olmadığı için aklıma
gelen ilk algoritmayı kullandım. Öğrenmek isteyenler içinse, kod
üzerinde düşünmenin var olan açıklamayı okumaktan daha yararlı olduğunu
düşündüğümden bazı kısımların açıklamalarını eklemedim. Programın
çalışmasını öğrenmek isteyenler için tavsiyem kodu anlamaya çalışmaları
ve soruları olursa yazının altına yorum yazarak iletmeleri.
Programın sonlarına doğru ikinci satırı temizlemek için ikinci satıra
bir dizi boşluk basıldığını görebilirsiniz. Alt satırı silmezseniz
videoda da görebileceğiniz gibi iki adet C harfi basma problemi
oluşuyor. Temizleme işlemini sadece alt satırı silen bir komut ile
yapmak çok daha güzel olacaktır. Yalnız HD44780 entegresinin kullanım
kılavuzunda böyle bir komut bulamadım. Tüm ekranı temizleyip her
seferinde üst satıra “Sıcaklık” yazdırmak da daha uzun bir yol olarak
gözüktü. Bu yüzden alt satırı temizlemek için ekrana boşluk bastırmayı
tercih ettim. Eğer daha etkili bir yol bulur ya da HD44780′in alt satırı
temizleme gibi bir özelliği varsa bunu iletirseniz sevinirim. [Resimleri görebilmek için üye olun veya giriş yapın.]
Sayfa başına dön Aşağa gitmek
Kullanıcı profilini gör
 
LCD Ekranlı Basit Termometre Devresi
Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
KingFrm :: Elektronik Sistemler-
Buraya geçin: