12F675-LM35 Termometre v2

2010 yılında eğitim amaçlı bir termometre devresi yapıp full paylaşmıştım. Açıkçası o kadar basit bir uygulamaydı ki herhangi bir amaçlı ticari beklentim olmadı. Fakat günümüzde bazı arkadaşlar bu termometreyi yapıp yüksek meblağlara sattıklarını gördüm. Eğer imkanınız varsa kendiniz devreyi basıp kullanabilirsiniz. Maliyeti malzemeyi aldığınız yere göre 10-20 TL arasında değişmektedir. Oysa bu basit devre internette 50-80 TL arasında satılmaktadır.
Neyse zamanında yaptığım bu devrenin kendi sitemde de bulunmasını istedim ve sizler için arşivi didikleyip gerekli dokümanlara ulaştım. Hatta devrenin 3. versiyonu hazırladım. Kısa zaman sonra onuda paylaşacağım.
Birazda termometre devremizden söz edelim.
Devre Şeması
Devreyi çalıştırdıktan sonra aşağıdaki gibi bir kıyaslama yapmıştım. Aynı zamanda ufak bir video hazırlamıştım.
Sıcaklık Sensörü
Sensör olarak LM35 kullanmayı tercih etmiştim. Piyasada bulunurluğu ve çıkışının özel bir protokole muhtaç kalmadan ADC ile rahatça okunması tercih sebeplerim arasındadır. Dezavantaj olarak 0-5V arası beslendiğinde 0-100 derece arası çalışması. datasheetinde bulunan bağlantı şekline göre bağlanırsa eksi değerleri de gösterebiliyor. datasheet -55 ile 150 derece arasında çalışabilir. Her 1 derece hassasiyet için çıkışında 10mV değer değişimi yapmaktadır.
Mikrodenetleyici
Basit ve bulunabilirliğini göz önünde bulundurarak PIC 12F675 mikrodenetleyicisini tercih etmiştim. Ufak boyutu ve özellikleri ile basit işlerde sürekli kullanıyorum. Bizim için en önemli özelliği ADC sinin olması. Sensörden gelen veri, PIC12F675 in ADC ünitesi ile okunarak sıcaklık değeri hesaplanmaktadır. Aynı zamanda okunan derece bilgisini kullanıcıya tarama yöntemi ile displaylere aktarmaktadır.
Display Ekranı
Display ekranı olarak 7 Segment tercih etmiştim. Pin yetersizliğinden kaynaklı olarak 74HC164 shift register entegresi kullandım. Bu sayede 1 den fazla 7 segment displayi kontrol edebildim. Fakat bu versiyonda 3 adet display olmasına karşın 2 adet display mikrodenetleyici tarafından kontrol edilmektedir. Displayleri ortak katot kullandım. Açıkçası elimdeki displayler ortak katottu. Baskı devreyi 3 adet 7 segment için yapmak zorunda kaldım. Daha öncede söylediğim gibi son display derece sembolünü göstermektedir. Kullanıp kullanmamak size kalmış. Az malzeme kullanma düşüncesi beni doğal olarak displayin gnd hattına 330 Ohm direnç takmaya itti. normalde displayin her bağlantısına 1 adet olmak üzere toplamda 7 adet direnç kullanılır. Eğer displayleri tarama yöntemi ile sürülürse gnd hattına takılmasında bir sakınca yoktur. Sonuçta çokçokçokk önemli bir devre değil. Hafif ısınmaya göz yumulur.
PIC12F675 ile display sürmek istiyorsak mecburi shift register kullanmak gerekecek. Ben pin sayısını göz önünde bulundurarak 74HC164 kullanmayı seçtim. genelde 74HC595 kullanıyorum ama onun içinde 3 pin gerekiyor. 74HC164 için 2 pin yeterli.
Baskı Devre
Baskı devreyi hazırlarken açıkçası özenerek yapmadım. Proteus ile çizdim. Baskı devre çalışır vaziyette. Basıp devreyi kullanabilirsiniz. Yada kendiniz şemaya göre tasarım yapıp kullanabilirsiniz.
Yazılım
Programı Jalv2 ile yazmıştım. O dönemde aktif kullandığım bir dildi. Her ne kadar tutulmasa da kaynak azlığı bulunsa da Jalv2 ile ufak tefek uygulamalar yazıyorum. V2 nin tüm kodu aşağıdaki gibi. Eğer düzenlemek isterseniz tekrar derlemeniz gerekecek. Gerekli gördüğüm tüm açıklamaları not ettim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
--------------------------------------------------------------- -- Programın : 1' hassasiyetli LM35 Termometre Devresi -- (0..99) arası Ölçüm -- Author : Sercan TEK - Turkey/Tekirdağ -- Web : www.sercanca.com -- Version : 2 -- Date : 19.12.2011 -- chip : 12F675 ve 74hc164 -- compiler : jal jalv24q6 (compiled Oct 25 2016) -- size : 766 Byte --------------------------------------------------------------- -- Yenilikler -- -- Versiyon 2 -- -- -> Transistörler BC547 yerine BC337 olarak değiştirildi. -- -> 330 Ohm dirençler transistörün emiteri yerine kollek- -- törüne seri olarak bağlantı. -- -> Yukarıdaki nedenlerden dolayı baskı devresi yeniden -- düzenlendi. -- -> ilk Çalıştırmada Displaylere animasyon eklendi. -- -> Hazır adc kütüphanesi yerine adc rutine yeniden yazıldı. -- Bu sayede harici kütüphane ihtiyacı, sadece adreslerin -- tanımlı olduğu 12F675.jal oldu. -- -- NOT : Daha önce devreyi yapan arkadaşlar İsteğe Bağlı yeni -- yazılımı yükleyip kullanabilirler. Donanımsal olarakta -- sadece BC547 yerine BC337 takabilirler. Transistör -- Değiştirmedeki amaç ise Olası parlaklık sorununu engel- -- lemektir. Ayrıca BC337'nin yüksek güçlü olmasıdır. -- ---- ------------------------------------------------------------ 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 alias birler is pin_a5 -- birler hanesi pin_a5 alias onlar is pin_a4 -- onlar hanesi pin_a4 ----------------------------- ADC İşlemleri --------------------------- ADCON0_VCFG = false -- Harici Vref yok JANSEL_ANS0 = true -- Sadece AN0 kuıllanılacak pin_A0_direction = input -- AN0 Giriş ayarlandı ADCON0_ADFM = true -- sonuc sag yaslı gelsin ANSEL_ADCS = 0b_001 -- ADC Çevrim Clock Seçeneği = OSC/8 function adc_oku return word is pragma inline ADCON0_ADON = True -- ADC Çevrimi Çalıştırıldı _usec_Delay(3) ADCON0_GO = true -- ADC Çevrimi işlem yapıyor while ADCON0_GO loop end loop -- ADC Çevriminin bitmesini Bekle return ((ADRESH *256) + ADRESL) -- Okunan Degerleri Geri Döndür end function --------------------------------------------------------------------------- -------------------- 74HC164 için pin tanımlamaları ------------------- var volatile bit clock_pin is pin_a1 -- Clock Pini var volatile bit data_pin is pin_a2 -- Data Pini procedure display_yolla(byte in giris_bilgi) is -- veri gönderme var bit veri_biti at giris_bilgi : 0 -- verinin sıfırıncı biti for 8 loop -- 8 kere döngü data_pin = veri_biti -- Verinin Düşük bitini gönder giris_bilgi = giris_bilgi >> 1 -- Veriyi bir sag kaydır clock_pin = high -- Clock ver clock_pin = low end loop end procedure ----------------------------------------------------------------------- procedure animasyon is pragma inline var byte temp for 2 loop -- İki kere bir yöne animasyon temp = 0b_1000_0000 for 6 loop onlar = false birler = false display_yolla(temp) onlar = true birler = true temp = temp >> 1 _usec_delay(80000) end loop end loop for 2 loop -- İki kere diğer yöne animasyon temp = 0b_0000_0100 for 6 loop onlar = false birler = false display_yolla(temp) onlar = true birler = true temp = temp << 1 _usec_delay(80000) end loop end loop end procedure animasyon procedure derece_al(byte out hane_10,byte out hane_1) is -- pragma inline var word temp_deger = 0 var byte basamaklar[] = {252,96,218,242,102,182,190,224,254,246} temp_deger = ((adc_oku) * 100)/204 -- adc'yi dereceye çevir if temp_deger > 99 then -- eğer 99'dan büyük ise hane_10 = 2 -- "-" -- "--" göster hane_1 = 2 -- "-" else hane_10 = basamaklar[(temp_deger / 10)] -- onlar hanesini ayır hane_1 = basamaklar[(temp_deger % 10)] -- birler hanesini ayır end if end procedure var byte onlar_hanesi ,birler_hanesi forever loop derece_al(onlar_hanesi,birler_hanesi) -- dereceyi al for 200 loop onlar = false birler = false -- onlar hanesini gönder display_yolla(onlar_hanesi) onlar = true _usec_delay(2000) onlar = false display_yolla(birler_hanesi) -- Birler hanesini gönder birler = true _usec_delay(2000) end loop onlar = false birler = false _usec_delay(2000) end loop |
12F675-LM35 Termometre v2 Dosyalar
Devrenin yeni versiyonu
Bu Uygulamada Neler Öğrenebiliriz ?
- Jalv2 dilinin temel kullanımı
- Jalv2 dilinde 12F675 kullanımı ve sigorta ayarları
- Jalv2 dilinde LM35 kullanımı ve sıcaklığın hesaplanması
- Jalv2 dilinde 74LS164 shift register kullanımı
- Shift register kullanarak port çoklama
- Shift register kullanarak 7 segment display kullanımı
- Jalv2 dilinde 12F675 için ADC kullanımı
Başka bir yazıda görüşmek üzere,
Sercan TEK
Bizim 12f675 entegrenin içine kod atılırken hex kodu istemektedir bu kodu bana söyleyebilirseniz sevinirim proje ödevidir yardımcı olursanız memnun kalırım
Yazının sonundaki dosyaları indirin. içerisinde .hex uzantılı dosya mevcuttur.
Dosya indirildi ama dosya açılmıyor siz burdan hex kodunu yazsanız
dosyayı indirin rardan çıkartın. içinde klasörde bulacaksınız. o dosyayı programlayıcının yazılımına gösterin. o yazacak.
Bu kadar basit işlemi yapamazsanız bu işe devam etmeyin.
Sadece hex dosyası aşağıdadır.
http://dosya.co/whk3kfoq7l9n/program.hex.html
Hocam selamlar ben bu projeyi yapmak istiyorum ama hiç bir bilgim yok yardım edebilirmisiniz?
Uzaktan yönlendirerek yapılmaz bu devre. Oturup başında çalışmak gerek. Siz başlayın devamı gelir elbet.
hocam iyi günler öncelikle elinize emeğinize sağlık …devreyi kurdum çalışıyor fakat 22 yerne 42 gösteriyor neden olabilir sizce lm35 de ısı ya maruz kalınca değeri yükseltiyor herhangi bir sorun yok animasyonlu programda açılıyor yani programlama da sorun yok sizce nerede yanlış yapmış olabilirim …şimdiden tşkler
Hocam Selamlar,
devreyi ben olmak üzere bir çok arkadaş yapmış ve çalıştırmıştır. hiç dediğiniz sorun ile karşılaşmadım. Bir ihtimal display ayakları yanlış bağlantılı olmuş olabilir. LM35 Hatalı ölçüyor olabilir. 12F675 ile ilgili bir sorun olabilir. Deneme şansınız varsa dediklerimi denemenizi önereceğim.
hocam merhaba hayırlı günler.bu yazılımın mantığını anlatırmısınız. ccs c de yazmaya çalıştım ama olmadı. mail adresinden dönerseniz iletişim kurabiliriz.buradan göremeye bilirim.yardımcı olursanız sevinirim.
Merhaba,
Yazılımın mantığı kodlardaki açıklamaları okuyunca çıkacaktır. Extra neyi yazmam gerekli anlayamadım. açıklamaları baz alırsanız çözeceğinize eminim.
Hocam merhaba
Lise 2. Sınıfta iken yapmistim ama çalistiramamistim. İnternetten satın almıştım. Sanırım biraz fazla ödemişim. Olsun dersten geçmiştim. Benim aldigim devrede ilk acilista animasyon yoktu.
internetten satın aldığınız devre büyük ihtimal v2 değil v1 olandır. PIC12F675 MCU yu programlayıcıya takıp v2 hex kodunu atabilirsiniz.