Timer0 Sayıcı Devresi

sayici_ornek

PIC12F ve 16F serilerinde 8-bit, 18F serisinde 16-bitlik bir sayıcı/timerdır. Clock kaynağı sistem clock’u ise timer, harici kaynaksa sayıcı olarak isimlendirilir. Pek çok alanda uygulama imkanı vardır. Örnek vermek gerekirse bisiklet hız ölçer, rüzgar türibini devir ölçer, kronometre vb.

Özellikleri;

  • 8 bit zamanlayıcı veya sayıcı olarak kullanılabilir.
  • Değeri okunabilir ve değiştirilebilir.
  • 8-bit yazılımsal prescalar değeri (ölçekleme)
  • Dahili veya harici clock seçebilme
  • Harici kaynak clock sinyali kenarı seçebilme (düşen kenar / yükselen kenar)
  • Sayma değeri hex FF’ten 00’a geçişte kesme oluşturur.

 timer0_block_1

Timer0 Nasıl Kurulur?

a) Sayıcı olarak kullanımı:

Sayıcı olarak kurmak için;

  • İlk önce PORTA’nın 4. Pini dijital giriş olarak ayarlanmalıdır. (TRISA.B4=1;)
  • Giriş pull-up veya pull-down dirençleriyle kaynağa veya toprağa bağlanmalı boşta bırakılmamalıdır. Pull-up direnciyle kaynağa (+5V) bağlandığını varsayalım o zaman sayma işlemini “H” dan “L” a düşerken yapmasını istiyoruz. Bunun için T0SE (Timer0 Source Edge-Timer0 sayma kaynağı kenar seçimi) “1” yapılmalıdır. (1 EXOR 0 =1)
  • Timer0’ı sayma için kullanacağımız için T0CS (Timer0 Clock Source- Timer0 kaynak seçimi) “1” yapılmalıdır.
  • Herhangi bir ölçeklendirme istemediğimiz için 1:1 ölçek kullanacağız. Dolayısı ile PSA bitini “1” yapıyoruz. Aslında bu bit ölçeklendirmeyi Timer0 için mi yoksa WDT için mi kullanılacağını seçmek içindir. Ancak  ölçeklendirmede 1:1 olmadığı için bu şekilde bir kullanım yapılmış.
  • TMR0 kaydedicisi sıfırlanmalıdır.

Sayıcı örnek devresi :

Devremiz bir buton ve led’lerden oluşmaktadır. Butonla sayma işlemi gerçekleşecek durum binary olarak PORTB’ye bağlı led’lerde görünecektir.

timer0_sayici_devre


unsigned char TMR0_eski=0;
void kurulum()
{
 CMCON=7; // PORTA dijital
 TRISA=0x10; // RA4 giriş diğerleri çıkış
 TRISB=0; // PORTB çıkış
 PORTA=0; // PORTA'yı sıfırla
 PORTB=0; // PORTB'yi sıfırla
 OPTION_REG.T0SE=1; // Timer0 kaynak kenar seçimi -düşen kenar-
 OPTION_REG.T0CS=1; // harici kaynaktan sayma
 OPTION_REG.PSA=1; // 1:1 ölçek kullan
 TMR0=0; // Timer0 ilk değerini sıfırla
}
void main()
{
  kurulum(); // kurulum fonksiyonunu çalıştır.
  do // sonsuz döngü başlangıcı
  {
    if(TMR0_eski!=TMR0) // eğer TMR0 değeri eski değerinden farklı ise;
    {
      PORTB=TMR0; // PORTB'ye TMR0 içeriğini yükle
      TMR0_eski=TMR0; // TMR0_eski değerini tazele
    }
  }while(1);
}

Proje dosyalarına buradan ulaşabilirsiniz.

Reklamlar

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