Not 25: CCP Birimi 3 – Compare (Karşılaştırma)

Yayınlandı: 29 Ocak 2014 / Microchip PIC Programlama...
Etiketler:, , , , , , , , , , ,

shutterstock_18511663-578x385 CCP birimine ait bir diğer mod olan Compare (karşılaştırma) modunda 16 bit değerindeki CCPR1 register çiftinin değeri TMR1 sayıcı register çiftinin içeriği ile  sürekli karşılaştırılır. Karşılaştırma sonucunda bir eşitlik var ise bir kesme oluşur ve RB3/CCP1 pini high seviyeye / low seviyeye çekilir veya durum değiştirmez.  Kesme oluştuğunda yapılacak işleme CCP1CON registerının CCP1M<3:0> bitleri ile karar verilir.  Kesme oluştuğunda CCP1IF bayrağı 1 değerini alır. Eğer RB3 pini çıkış olarak kullanılacaksa “TRISB” registerının 3. biti 0 yapılmalıdır.  Compare kesmesinin olulşabilmesi için Timer1, senkron sayıcı veya  zamanlayıcı modunda çalıştırılmalıdır.  Aşağıdaki blog diyagramda Compare modu anlatılmaktadır.

Adsız3Compare modunun ne şekilde çalışacağını, daha önce belirttiğimiz gibi CCP1CON registerının CCP1M<3:0> bitleri ile kararlaştırırız.

  • Adsız1Eğer bu bitlere 1000 değeri yüklenirse: TMR1 registerı ve CCPR1 eşitliği sağlandığında RB3 pini high seviye olur.
  • Eğer bu bitlere 1001 değeri yüklenirse: TMR1 registerı ve CCPR1 eşitliği sağlandığında RB3 pini low seviye olur.
  • Eğer bu bitlere 1010 değeri yüklenirse: TMR1 registerı ve CCPR1 eşitliği sağlandığında yazılımsal kesme oluşur, RB3 pininde herhangi bir değişiklik olmaz.
  • Eğer bu bitlere 1011 değeri yüklenirse: TMR1 registerı ve CCPR1 eşitliği sağlandığında özel olay tetiklemesi meydana gelir

Özel olay tetiklemesi ADC birimininin çevrime başlamasını sağlar. Tabi bunun için ADC biriminin registerlarında gerekli ayarlamaların yapılması gereklidir.

Bu yazıda Compare kesmesi her oluştuğunda CCP1M0 biti terslenecek ve RB3 pininden karedalga bir sinyal üretilmeye çalışılacaktır. Timer1 her 1 us’de bir artış gösterecek şekilde ayarlanmıştır. Her 20ms’de bir kesme oluşmasını istersek CCPR1’e 0x4E20 değerini  yüklememiz gerekir. Kodlarımız aşağıdadır;


void main() {
T1CON.T1CKPS1=0; // Timer1 prescaler değeri 1:1 olarak ayarlandı.
T1CON.T1CKPS0=0; //
T1CON.T1OSCEN=0; // Timer1 harici osilatör pasif edildi.
T1CON.TMR1CS=0;  // Dahili saat kaynağı seçildi.
CCP1CON.CCP1M3=1; // Capture Her yükselen kenarda kesme oluşturacak.
CCP1CON.CCP1M2=0;
CCP1CON.CCP1M1=0;
CCP1CON.CCP1M0=0;
CCPR1H=0x4e;// CCP1 registerına 20000 değeri yüklendi.
CCPR1L=0x20;// böylece 20 ms'de bir kesme oluşacak.
INTCON.PEIE=1; // Çevresel kesmelere izin verildi.
INTCON.GIE=1; // Bütün kesmelere izin verildi.
TRISB.B3=0; //Compare için RB3 çıkış yapıldı.
TMR1H=0; //16 bitlik Timer1 sayaç registeri temizlendi.
TMR1L=0; //
PIE1.CCP1IE=1; // Compare kesmesine izin verildi.
PIR1.CCP1IF=0; // Kesme bayrağı temizlendi.
T1CON.TMR1ON=1; //timer1 çalışmaya başladı.
while(1)
{

}
}

void interrupt(){ //kesme altprogramı
TMR1H=0;TMR1L=0;// timer1 saya. registerı temizleniyor.
PIR1.CCP1IF=0;   // kesme bayrağı sıfırlanıyor.
CCP1CON.CCP1M0=~CCP1CON.CCP1M0;
}

Devre şeması ve simülasyondan bir görüntü;

Adsız

Daha büyük görebilmek için tıklayın…

Proje ile ilgili dosyalara buradan  erişebilirsiniz.

İyi çalışmalar…

yorum
  1. Onur dedi ki:

    Çok güzel anlatım fakat sadece Timer kesmesi ile de bu işi yapabilirsak neden buna Compare ‘a ihtiyacımız olabilir ? ADC içinmi ? Kullanım amaçlarını anlatabilirmisiniz ?

  2. Onur dedi ki:

    Anladım. Öneri veya dilek kabul ederseniz, bu derslerinizi video şeklinde yapsanız çok fazla izleyeniniz ve öğrenciniz olur. Youtube’da bu tür ders anlatanların hepsi yabancı, bir de Türk olsa harika olur.

  3. Mehmet Topuz dedi ki:

    merhaba hocam benim voltaj ile akım arasındaki faz farkını ölçmem gerekiyor. Bunun için ccp modülünü nasıl kullanabilirim.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s