Sercanca Çözümler..

Jalv2 – 12F675-LM35 Termometre v3

Jalv2 – 12F675-LM35 Termometre v3

Kabul ediyorum. İnsanlar uzaya çıkıyorlar ben halen 12F675 kullanıyorum. Eldeki imkanlar çerçevesinde bir şeyler yapmaya çalışsam da uzayda gözüm yok. Şimdilik. (:

Geçmiş bir zamanda örnek teşkil etmesi düşüncesiyle yapıma başladığım termometre devresi karaborsaya düşmüş ve öğrencilere satılmıştır. Neyse ki bu aralar satılık ilanlarını görmüyorum. Öğrenci arkadaşlardan da rica ediyorum böyle basit bir devreyi 3-5 kat pahalıya satın almasınlar.Oturup yapsınlar ve öğrensinler.

Tamam, sosyal mesaj vermeyi bıraktım. Konumuza dönelim !!

Geçen internette gezinirken paylaşımını yaptığım devrenin(12F675-LM35 Termometre v2) yapılıp kullanıldığını görünce neden daha iyisini yapmıyorum düşüncesine dayanarak ufak bir geliştirme yaptım.

Öncelikle; daha iyisi nasıl olur sorusuna cevap arasam da sonradan bir tık üstü olsun dedim ve ortaya bu konudaki devre çıktı.

Eski versiyonda devre 3 display ile çalışıyordu ama pinlerin yetersizliğinden dolayı kontrol edebildiğim 2 tane display vardı. Sonuncusu sadece derece sembolünü gösteriyor olsa da herkes 3 digit olarak benimsedi.

Hedefim 4 digit olmasını sağlamak ve bütün displayleri kontrol edebilmekti. Aslında 2. shift registerı kullansam sorun çözülürdü ama ben minimum eklendi ile yapmak istedim.

74HC164 te 8 çıkışı pini vardı ve ben 7 sini kullanmıştım. Son pini 3. displayi sürmek için kullandım ve programı ona göre güncelledim. Bundan dolayı 3.display biraz gölgeli yanıyordu çünkü datalar sürekli kayarak gidiyordu. Sorun olmayacağını düşündüğüm için kullanma kararı aldım.

4.displayi nasıl aktif ederim derken nette tek pin üzerinden shift register kullanıma rastladım. Bunu uygulayabilirsem 4. display için bir pinim olacaktı !!

Yukarıdaki bağlantı şeklini görünce başlangıçta olur mu olmaz mı derken biraz araştırdım ve mantığını okudum.

Mantık basit aslında ama uzun uzun değinmeyeceğim. Bu konudaki Kaynak  : One Wire Shift Register

Mutlaka konuyu inceleyin. Başlangıçta karışık gelecek ama sistem gayet mantıklı. Hatta bu mantıkla adamlar 16×2 Displayi tek bir pinden sürmek için bir devre yapmışlar. İlerleyen zamanda bende yapacağım. Bunu yapmak tabi ki yetmiyor birde buna uygun olarak programlama diline göre kütüphane yazılması gerekiyor.

Kaynak gösterdiğim sitede değerler R=1k5 , C=2n2 olarak verilmiş ve 74HC595 kullanılmış. Orada konuya birde latch pini ekleniyor ve farklı bir süre daha gerekiyor. Birde 74HC595 kullanıldığında latch yüzünden 0. bit her zaman “low” olacağını belirtiliyor. Ben Latch pini olmayan bir shift register kullandım. Bundan dolayı öyle bir derdimiz yok ama LCD sürmek isterseniz mecburen 74HC595 kullanmanız gerekecektir.

Benim elimde 1k5 direnç ve 2n2 kondansatör olmadığı için 100 ohm direnç ve 100 nf kondansatör kullandım. Doğal olarak süreler değişti. Hesaplama sonucu T=10us çıktı ama uygulamada 20us kullanınca sorunsuz çalıştı. Eğer bu değerleri kullanmak isterseniz 20us ideal bir süredir.

Yazılım tarafında aşağıdaki gibi bir kod yazdım. Parametre olarak verilen değişkeni, 74HC164 ye tek pin üzerinden gönderiyor.

Kodlara açıklamaları yazdım bu sayede farklı bir dile çevirmek kolay olacaktır.

Bu yöntem sayesinde artan pini 3.display için kullanırken 4.display için shift register pinini kullandım. Toplamda 4 adet display kontrol edebildiğim bir yapı oluşturmuş oldum.

Kullandığım shift registerın pin isimleri yukarıdaki gibidir. Farklı bir model alırsanız bağlantı pinlerine dikkat edin.

Hazır 4’lü display kullanmış iken fabrikasyon olarak tek bir ürün haline getirilen model seçtim. Kullandığım displayin pin isimlerini yukarıdaki şemada not ettim. Farklı model alırsanız pinlerine dikkat edin. (Ortak Katot)

Devremizin beyni olarak daha önce seçtiğim MCU yu kullandım. Bu seferde işimizi fazlasıyla gördü diyebilirim. Yalnız devreyi düzenleyince GP3/MCLR pinimizin boşta kaldığını gördüm. Ne amaçla kullanırım derken aklıma  birimi “fahrenheit” cinsine çevirmek geldi.

Yapı olarak pin high konumunda iken “celsius” false konumunda iken “fahrenheit” olacak şekle getirdim.

Formul olarak Celsius tan Fahrenheit dönüşümü için aşağıdaki formülü kullandım.

Sıcaklık sensörümüzü de değiştirmedim. LM35 ile devam ettim. Kolay bulunması ve ADC ile kullanılması cazip geldi.

Sıcaklığı hesaplamak için aşağıdaki formülü kullandım. Ortalama alarak hesaplama yaptım.

ADC kütüphanesi kullanmadığım için onuda kendim yazdım. Bu sayede hafıza kullanımı az oldu.

Buraya kadar gelince bir yerleri eksik yaptığımı anladım. Netten baktığım displayli örneklerde displayler hep kesme ile sürülmüş. Neden olmasın dedim ve yazılımı değiştirdim. Açıkçası ilk defa kesme ile display sürecektim. Ama onuda başardım.

Kesme ayarları ve kesme alt programı aşağıdaki gibidir.

Yaklaşık 4ms ara ile kesme oluşturdum ve “Display yolla” alt programını çalıştırdım.

Her displayde yazması gereken değer öncelikle 4 elemanlı Data dizisine atanır. Yukarıdaki alt program da ilgili diziyi displaylere gönderir. Fark etti iseniz display 3 data içinde olduğu için önce ilgili bit değiştiriliyor ve sonra displaye gönderiliyor. Ama diğerleri öyle değil. Sonuncu displayin sönük yerleri biraz parlak gözüküyor ama önüne kırmızı mika cam koyulursa pek belli olmuyor.

Tüm bunları yapınca daha hafızanın yarısını kullandığımı gördüm ve bundan sonrası için türbinlere oynama kararı aldım. Başlangıçta aşağıdaki kayan yazı yazdırdım.

PIC12F675 LM35 JAL2 SICAKLIK ÖLCER SERCANCA.COM”

Üstüne birde 2 çeşit animasyon ekledim. Hem ilk açıldığında karşılama animasyonu oynattım. Hemde Sensörü her 50 okumada ekrana getirirken, kapanıp açılma animasyonu oynattırdım.

Artık ölçüm aralığımız geniş olduğu için gösterme formatında bir kaç değişiklik yapmam gerekti. Ölçüm Değerine göre ekran formatını aşağıdaki gibi göstermesini sağladım.

Ölçüm <= 0 ise  : “-0*

Ölçüm 1-9 arası ise  : “9*C*”

Ölçüm 10-99 arası ise  : “99*C*”

Ölçüm > 100  ise  : “111*

100’ün üstündeki değerlerde birim gözükmediği için her 20 okumada bir son display, birim sembolünü gösteriyor. Diğerlerinde zaten birim gözüküyor diye sadece 100 derece üstünde bunu yaptırdım.

Kodları yazarken boyutu bayağı bir az tutmak için çok uğraştım. Olabildiğince word, float tipini değişken kullanmadım. Genelde bit ve byte kullandım. Biliyorsunuz 12F675 te çok hafıza yok. Bu projede 12F675 in etinden sütünden tüm imkanlarından faydalanmaya çalıştım.

Uygulamanın devre şeması da aşağıdaki gibidir.

Yalnız isiste denemeyin çünkü benim isis çok başarılı olamadı. Sanırım kullandığım yöntemlerden dolayı. Ben devreyi Breadboard üstüne kurup testlerini yaptım. Gayet Başarılı !!

Yapmak isteyenler için proteusta baskı devresini de hazırladım. Belki birileri kullanmak ister.

Baskı devreyi yaptığınızda girişe 9 veya 12 volt ile besleyin. LM7805 kullandığım için giriş 7 Volttan aşağı inmemesi gerekiyor. Ters voltaj koruması için girişe seri bir tane diyot bağladım. Fahrenheit seçeneği için bir jumper ekledim. İsterseniz anahtar gibi birşey de kullanabilirsiniz.

LM35 in yeri plaketin üstünde eğer uzatmak isterseniz pinlere dikkat ederek bir kablo ile uzatabilirsiniz.

Yazılımı toparlarsak aşağıdaki gibi bir şey ortaya çıkacaktır.

Uygulamanın Videosu

Tüm Dosyalar : 12F675-LM35-4DIGIT-Dosyalar

Pass : sercanca.com

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 tek pin ile 74LS164 shift register kullanımı
  • Shift register kullanarak port çoklama 
  • Shift register kullanarak 4 digit 7 segment display kullanımı
  • Jalv2 dilinde 12F675 için ADC kullanımı
  • Jalv2 dilinde 12F675 pinin giriş olarak kullanımı
  • Jalv2 dilinde TMR0 kesmesinin kullanımı
  • TMR0 kesmesi ile 7 segment sürülmesi
  • 7 segment display yazı yazma ve kaydırma

Başka bir yazıda görüşmek üzere,

Sercan TEK

BİR YORUM YAZIN

This site uses Akismet to reduce spam. Learn how your comment data is processed.

ZİYARETÇİ YORUMLARI - 3 YORUM
  1. Haydar dedi ki:

    Çok havalı olmuş Süpersiniz…

    1. Sercan TEK dedi ki:

      Eyvallah. Yaptık ufaktan birşeyler.

Yayımlanan tüm yazılar Sercan TEK tarafından yazılmaktadır. İzinsiz kullanımı yasaktır.