Professional Documents
Culture Documents
Açıklamalar
Açıklamalar
Açıklamalar
Uygulamaları
Sercan TEK
elektro.seco@gmail.com
1
Devrede ısı sensörü olarak LM35DZ kullanılmıştır. Bu sensör 0o ile 100o arası çıkış
verebilmektedir. Mikrodenetleyici olarak 12F675 seçilmesinin sebebi hem jalv2 dilinde
kullanımını göstermek hemde 12F675 gibi pin sayısı yetersiz olan bir denetleyici ile nasıl
display kullanıldığını göstermektir.
Devre gerçekte yapılacağı zaman, sağ tarafta bulunan kırmızı çerçeve içerisindeki 3
adet direnç, Simülasyonun daha sağlıklı çalışmasını sağlamak için kullanıldığından dolayı
kullanılmayacaktır.
0 ile 99 derece arası ölçüm yapan devremizde display’ler tarama yöntemi ile
kullanılmıştır. 12F675 gibi pin sayısı az olan işlemciler için Display kullanmak imkânsızdır.
Bu nedenle sadece 2 pin kullanarak 74HC164 ile port çoklama işlemi gerçekleştirilmiştir.
74HC164 entegresinin seçimindeki temel nokta işlemcinin 2 pinini kullanmasıdır. Bu sayede
display seçmek için bize 2 adet pin geriye kalmıştır.
Her Display’in çıkışında sadece 1 adet 330 ohm direnç kullanılmıştır. Eğer tarama
yöntemi kullanmıyor olsaydık bu dirençler aşırı akım çekeceğinden dolayı ısınıp yanacaktı.
Tarama yöntemi sayesinde displayler saniyede yaklaşık olarak 230 Hz frekans ile yanıp
sönmektedir. Bu sayede dirençlerde ısınma olmamaktadır.
2
Devrenin Çalışmasını Kısaca Açıklayacak olursak; 12F675 yaklaşık olarak her 1 sn
aralıklarla ADC kanalını okumaktadır. Ve Sonucun daha stabil olması için 10 kez okuyup
daha sonra ortalamasını almaktadır. Bu sayede salımlar minimuma indirilmiştir.
Okunan ADC değerine karşılık gelen dereceyi hesaplamak programda derece_al alt
programı kullanılmıştır.
LM35DZ sensörü maksimum 100 derece ölçmektedir ve 100 derecede çıkışı 1 Volt
olmaktadır. 1 Volt ise Dijital olarak ~204 sayısına denk gelmektedir.(1023/5 = 204,6)
Formülümüz; 100 derecede 204 sayısı okunuyor ise okunan_adc değerinde X derecesi
okunur, orantısından yola çıkarak ;
3
12F675 Konfigürasyon
1 include 12f675
2 pragma target clock 4_000_000
3 pragma target OSC INTOSC_NOCLKOUT
4 pragma target WDT disabled
5 pragma target MCLR INTERNAL
6 enable_digital_io()
7 pin_A0_direction = input
8 pin_A1_direction = output
9 pin_A2_direction = output
10 pin_A3_direction = output
11 pin_A4_direction = output
12 pin_A5_direction = output
Devrenin çalışması için 12F675 işlemcisine ait adreslerin programa dahil edilmesi
gerekmektedir. Bu adresleri tek tek yazılıma dahil etmek zor olacağından kütüphaneleri
kullanarak bu adresleri dahil edebiliriz. Bunun için 1. satırda olduğu gibi include 12f675
komutu kullanılmaktadır.
6.satırda ise tüm pinlerin dijital giriş çıkış olacağı hakkında işlemciye bilgi verilmiştir.
Diğer Satırlarda ise işlemcinin pinlerinin giriş veya çıkış olup olmayacağı ayarlanmıştır.
Programda sonsuz döngü oluşturularak yaklaşık olarak 1 sn’de bir kez derece
hesaplanıp display’lerde saniyede 230 kez gösterilmektedir. Bu sayede gözümüz sürekli
olarak ekranlarda rakamları görmektedir.
Malzeme Listesi:
4
Devrenin Gerçekleştirilmiş Baskı Devresi
5
Jalv2 Kaynak Kodu :
---------------------------------------------------------------
-- Programın Adı : 1' hassasiyetli LM35 Termometre Devresi
-- (0..99) arası Ölçüm
-- Yazan : Sercan TEK - Turkey/Tekirdağ
-- Tarih : 21.12.2011
-- chip : 12F675 ve 74hc164
-- Derleyici : jal 2.4p-alpha
---------------------------------------------------------------
-- ------------------------------------------------------------
include 12f675
pragma target clock 4_000_000 -- kristal 4 Mhz
pragma target OSC INTOSC_NOCLKOUT -- dahili OSC
pragma target WDT disabled -- watchdog Kapalı
pragma target MCLR INTERNAL -- mclr kullanılmıyor
enable_digital_io()
pin_A0_direction = input
pin_A1_direction = output
pin_A2_direction = output
pin_A3_direction = output
pin_A4_direction = output
pin_A5_direction = output
6
var byte onlar_hanesi,birler_hanesi
forever loop
derece_al(onlar_hanesi,birler_hanesi)
for 5 loop
for 50 loop
onlar = false birler = false
display_yolla(onlar_hanesi)
onlar = true
_usec_delay(2000)
onlar = false
display_yolla(birler_hanesi)
birler = true
_usec_delay(2000)
end loop
end loop
end loop