LM35 Sıcaklık

Başlatan yiitsyl81, 17 Nisan 2015, 18:01:22

yiitsyl81

Merhabalar dersten geçebilmem için LM35 in sıcaklığını ölçüp LCD ekranda gösteren bir devre yapmıştım.Ama hocam benden sıcaklığı ölçüp her 2 °C de bir LCD de ">" işareti ekle ve 0-15 °C arasında ledler saat yönünün tersi 15-25 °C arasında ledler hangi konumda kaldıysa o şekilde kalmaya devam etsin eğer 25 °C den yüksek sıcaklık varsa saat yönünde dönsün diye bir ödev verdi.Ete hocam sağolsun LCD de ">" işareti göstermemi sağladı ama sıcaklık azalırken ">" işaretlerininde silinmesi gerekiyormuş ve ben bir türlü yapamıyorum.Proton a hocanın o programı bilmesi yüzünden başladım daha programda yeniyim.Bana yardım edebilirseniz çok ama çok memnun olurum şimdiden sağolun.


Program Bu:


'LM35'in sıcaklığını ölçen LCD de °C ve çizgi şeklinde gösteren ve sıcaklığa göre led yakan uygylama

Device 16F877A
Xtal 4

'Giriş-Çıkış Ayarları
TRISD=%00000000
TRISA.0=1
PORTD=%11111111

'ADC Ayarı(analog ve dijital bacakların ayarlanması)
ADCON1=%10000010

Adin_Res 10
Adin_Tad FRC
Adin_Stime 50

'LCD Bacak Tanımlaması
Declare LCD_DTPin PORTD.4
Declare LCD_ENPin PORTE.1
Declare LCD_RSPin PORTE.0
Declare LCD_RWPin PORTB.2
Declare LCD_Interface 4
Declare LCD_Lines 2

'Program

Dim Sicaklik As Word
Dim hesap1 As Float 
Dim hesap2 As Float

Print At 1,1,"     LM35   "
DelayMS 500
Cls


basla:

Sicaklik=ADIn 0
DelayUS 50
hesap1=(0.0048828125*Sicaklik)*1000  °C
hesap2=(hesap1/10)
Print At 1,1, "SICAKLIK:"     
Print At 1,10,Dec1 hesap2," C "
DelayMS 50

Print At 2,1, Rep ">"\(hesap2/2) 'Ete hocamın gösterdiği kod.

GoTo basla


ete

#1
Sıcaklığa bağlı olarak ekrana karekter basmak ve sıcaklık azaldığı zaman bunları geri silmek yine akıllıca bir formül ile tek satırda halledilebilir.
Birinci parametremiz bir satırdaki karekter sayısıdır. Kullandığımız LCD de bu 16 karekterdir.
İkinci parametremiz sıcaklık değerimizdir. her 2 derecede bir ">" işareti olacağına göre 16 işaret için maksimum 32 derecelik sıcaklık gerekirki ekranımız bundan fazlasını gösteremez demektir. O halde bunun kısıtlamasınıda dikkate almak gerekir.
Şimdi sıcaklık değerimizi 2 ye bölünce bana yazılacak ">" karekter sayısını veriyorsa bunun 16 dan çıkartılmış halide silinecek karekter sayısını vermezmi? Hemen örnek hesap yapalım. Sıcaklık 20 derece o halde 20/2=10 adet ">" karekteri ekrana yazacağım 16-10=6 karekterde boş yazacağımki  önceden sıcaklık yüksek ise ve ekranın 10 karekterden sonrasında karekterler var ise onları silsin.
Ohalde programdaki komut satırını alırsak;
Print At 2,1, Rep ">"\(hesap2/2),rep 32\(16-hesap2/2)  'burada 32 boşluk karekterinin karşılığıdır
şeklinde bir komut ile sildirmeyide halletmiş olurum.

Ledlerin döndürülme işini anladım ise şöyle bir şey isteniyor.
Sıcaklık 0-15 arasında ise ledler saat tersi yönünde dönsün.
Sıcaklık 15-25 arasında ise dönmeden yansın
sıcaklık 25 den büyük ise ledler saat yönünde dönsün.
Bu dönme terimi neye karşılık geliyor acaba? Ledlerin sıra ile yanması mı kast ediliyor? başkada bir şey olamaz herhalde.
O halde bir kaç if satırı ve ledleri döndürecek komut ile bu işde halledilir.
Öncelikle  DIM  LED  AS BYTE şeklinde led isminde bir Byte değişkeni tanımlanır. BASLA satırından evvel LED=1 verilerek ilk değer verilir. Sonra program içinde Print AT 2,1... satırından sonra;

IF Hesap2<16 then
  led=led<<1
  if led>8 then led=1
endIF
komut satırları ile sıcaklık 16 dan küçük ise ledleri sola kaydırma yaptırmak ve led değeri 8 den büyük ise değerini tekrar 1 e eşitlemek gerekir.

IF HESAP2>15 AND HESAP2<26 THEN LED=15  komut satırı ile sıcaklık 15-25 derece aralığında ise 4 adet ledi de yaktırabilmek için led=15 değeri alınır.

IF HESAP2>25 THEN
   LED=LED>>1
   IF LED=0 THEN LED=8
ENDIF
komut satırları ile de sıcaklık 25 dereceden büyük ise ledleri saat yönünde kaydırmak için led değeri bir bit sağa kaydırılır.
Çok kaydırırsan led=0 olacağı için sıfırı bulduğunda tekrar başa döndürmek için led=8 değerini vermiş olduk.
Sonunda da led değerini PORTD ye vererek ledleri yaktırmaya sıra gelir. Bunuda,
PORTD=PORTD & %11110000+LED   komut satırı yapar. Hemde PORTD nin diğer bitlerini bozmadan bu işi yapar.
Sonra ledleri görebilmek için 150 ms lik bir gecikme veririz ve programı başa yönlendiririz.
PAUSE 150     
GoTo basla

Hepsi bu kadar. Umarım anlaşılmıştır.

Ete

yiitsyl81

#2
Ete Hocam sana ne kadar teşekkür etsem azdır beni çok büyük bir dertten kurtardın çok ama çok teşekkür ederim. Komutlar çalışıyor ve nasıl çalıştıklarınıda o kadar iyi anlatmışsın ki anlamamak imkansiz tekrar teşekkür ederim.Vakit ayırdığın için sağol.

Powered by EzPortal