CNY70 ile Led Yakma Uygulaması

Geçen yazımda pic içerisindeki karşılaştırıcı modülünü kullanarak örnek yapacağımı söylemiştim. Karşılaştırma Modülü yazımı incelemek için tıklayınız. Yapacağım örnekte CNY70 sensörünü kullanacağım  bu sensör çizgi izleyen robotlarda da kullanılmaktadır. Uygulamada sensör üzerine beyaz kağıt getirdiğimizde led yanmasını sağlayacağım.  CNY70 sensörü üzerine beyaz kağıt getirdiğinizde ben yaklaşık olarak 2V gibi bir değer gözlemledim diğer durumda ise 5V'a yakın bir değer gözlemledim bu yüzden 2.5V referans değerini tercih ettim bir önceki yazımda da bunun için yapılacak ayarları göstermiştim. Şimdide kodları ve çalışır halini göstereceğim. CNY70 Yukarıda CNY70 ile yapacağımız bağlantıyı görmektesiniz. Aşağıdada devrenin bağlantıları mevcut. CNY70 Devre Devreyi yazdıktan kodlamaya başlayalım. İlk önce kullanacağımız PIC ve Osilatör ayarlarını yapıyoruz.

LIST P=16F628A
 INCLUDE "P16F628A.INC"
 __CONFIG _XT_OSC & _CP_OFF
 ORG 0
 CLRF PORTB

Daha sonra önceki yazımda anlattığım ayarlama ile 2.5 V referans değeri ayarlıyoruz.VRCON biti bank1 de olduğundan ayarlamasını bank1 e geçtikten sonra yapıyoruz.

MOVLW b'00100010' 
 MOVWF CMCON
 BSF STATUS,RP0 
 CLRF TRISB
 MOVLW b'10101100' 
 MOVWF VRCON
 BCF STATUS,RP0

Şimdi Kontrol ediyoruz kağıt beyaz mı ? yani referans gerilimimiz 2.5 v'nin altında mı altındaysa Ledi yak 2.5 Voltun üstündeyse Led OFF'a git ve ledi söndür. Ledin durumuna karar verdikten sonra tekrar kontrola döndürmeyide unutmuyoruz.

          BCF STATUS,RP0
Kontrol   BTFSS CMCON,6
          GOTO LEDOFF
          BSF PORTB,1 
          GOTO Kontrol
LEDOFF    BCF PORTB,1 
          GOTO Kontrol
          END

Uygulamamız burda bitiyor ASM ve Hex Dosyaları için tıklayın.

PIC16F628 Karşılatırıcı (Comparator) Modülü

Bu yazımda PIC16F628 ile karşılaştırıcı modülünün nasıl ayarlandığını yazacam. PIC16F628'in Data Sheet'inden 10. Bölümünde Comparator Module kısmından yararlanacağız. Bu yazıda daha çok 2.5 Volt referans almak için gereken ayarları CMCON ve VRCON register'larının ayarlamalarını gösterecem daha sonraki yazımda CNY70 sensörünü kullanarak bir örnek yapacam.

PIC16F628 karşılaştırıcı modülü 2 adet analog karşılaştırıcı içerir. CMCON Register'ı 8 bitliktir.

CMCON Comparators

 

  • CMCON Register'ının son 3 biti karşılaştırma modunun seçimi için kullanılır bunu seçerken data sheet içinden seçeriz.Aşağıdaki resimde de gördüğünüz gibi 8 farklı seçenek var benim için uygun olan "010" olduğu için onu seçiyorum çünkü dahili olarak bir referans değer kullanacam.Comparator select
  • 3.Biti yani CIS biti ile bağlanacak portların seçimine karar verilir. Ben "0" seçerek RA0 ve RA1 portlarını tercih ediyorum.
  • 4.Bit (C1INV) "1" olarak tercih ettiğimiz durumda giriş değeri alacağımız referans değerinden küçük olduğu durumda "1" değeri verir bize diğer durumda "0" verir.
  • 5.Bit (C2INV) buda 4.Bitteki mantıkla aynı.
  • 6.Bit "0" yapılarak VREF'in sadece dahili olarak kullanılması sağlanır.
  • 7.Bit "1" yapılarak VREF aktif hale getirilir.

Sonuç olarak  kodumuzu yazarken CMCON bitimize "10110010" değerini atamamız gerekecek.

Şimdi VRCON Register ından bahsedeyim. Beslememizin 5V olduğunu düşünerek alacağımız referans değerini nasıl hesaplayacağımızı göstereyeim ilk önce.

VREF=(VR<3:0>/24) x VDD (5V)

Örneğin 2.5 Volt alacak olursak ((5/2)/5)x24 işlemiyle VR<3:0>=12  lojik olarak "1100" karşılık gelir.

Ayarlarken VRCON Registerını da son 4 biti bulduğumuz değeri yazmak üzere diğer bitleri yukarıda verdiğim bilgilere göre yazılır. Sadece 4.bit unimplemented bit, read as 0 olarak geçtiğinden 4.biti 0 yazıyoruz. Sonuç olarak VRCON="10101100"