PIC18F4520 Timer Kullanımı

PIC18F4520 Timer Kullanımı PIC18F4520 Timer Kullanımı

Bu yazımızda PIC18F4520 timer kullanımını inceleyeceğiz, daha önceki yazılarımızda bu konuyu Arduino kartlar için incelemiştik. Önce zamanlayıcıların ne olduğunu, onların masıl çalıştığını göreceğiz ve daha sonra PIC18F4520 zamanlayıcılarını sırasıyla 100ms ve 500ms gecikme üretecek şekilde yapılandıracağız. Sonunda ExploreEmdedded Zamanlayıcı kütüphanesini nasıl kullanılacağını göreceğiz.

PIC Zamanlayıcıda Prescaler ve Kesme Gecikmesi Notu

PIC zamanlayıcı uygulamalarında hedef gecikme doğruluğu, prescaler seçimi ve kesme rutin süresine bağlıdır. Teorik hesap doğru olsa bile ISR içinde uzun işlem yapılırsa periyot kayması oluşur. Bu nedenle zaman kritik uygulamalarda kesme içinde yalnızca bayrak yönetimi yapıp ağır işlemleri ana döngüye taşımak daha doğrudur. Ayrıca osilatör toleransı ve clock kaynağı kararlılığı uzun periyotlarda toplam hatayı büyütür. Pratikte ölçüm cihazı ile gerçek periyot doğrulaması yapmak, yazılım hesabını güvenceye alır.

Timer / Zamanlayıcı Hakkında Temel Bilgiler

Adından da anlaşılacağı gibi, bu modüller zamanı ölçmek veya doğru zaman gecikmesini oluşturmak için kullanılır. Ayrıca mikrodenetleyici kendi başına döngüler çalıştırarak gereken zaman gecikmelerini de üretebilir / ölçebilir, ancak zamanlayıcı modülü, mikroişlemciyi bu gereksiz ve tekrarlayan görevden kurtarır ve diğer görevler için maksimum işlem süresi tahsis etmesini sağlar.

PIC18F4520 Timer Kullanımı PIC18F4520 Timer Kullanımı
PicKit programlayıcısına takılmış bir PIC18 mikroişlemcisi.

Zamanlayıcı, saat atımlarını (Dahili / Harici) saymak için yapılandırılabilen basit bir ikili sayaçtan başka bir şey değildir. Maks değerine ulaştığında, bir OverFlow bayrağı ayarlayarak sıfıra geri döner ve etkinleştirilirse kesmeyi/interrupt oluşturur.

PIC18F4520 Timer Kullanımı PIC18F4520 Timer Kullanımı

PIC Timer / Zamanlayıcı Modülü

PIC18F4520, zamanlayıcısı, sayaç veya PWM üretimi için kullanılabilen üç bağımsız zamanlayıcıya sahiptir. Aşağıdaki tabloda üç Zamanlayıcının ayrıntıları verilmiştir.

İsimBoyutKontrol KaydıSayım KaydıMin GecikmeMaks Gecikme
TIMER08 bitOPTION_REGTMR00.2usec13.107ms
TIMER116 bitT1CONTMR1H, TMR1L0.2usec104.857ms
TIMER28 bitT2CONTMR20.2usec819usec

Zamanlayıcı Hesaplaması

PIC Osilatör frekansı 4’e bölünür ve daha sonra kontrolöre beslenir, Şimdi bu frekans, gecikmeler aralığı oluşturmak için presakalar ile daha da bölünebilir. zamanlayıcı sayısını bir arttırmak için zaman (zamanlayıcı tick) aşağıdaki gibi belirlenebilir.

tick = (Prescalar / (Fosc / 4)
tick = (Prescalar / (20Mhz / 4))
tick = (Prescalar * 4) / Fosc

Şimdi gerekli gecikme için zamanlayıcı değeri aşağıdaki gibi hesaplanabilir.
Gecikme = TimerCount * tick
Count = (Gecikme / tick)
RegValue = TimerMax- Count
RegValue = TimerMax- (Gecikme / tick) = TimerMax – (Gecikme / ((Prescalar * 4) /
Fosc )) RegValue = TimerMax - (( Gecikme * Fosc) / (Prescalar * 4))

Aşağıdaki tabloda üç zamanlayıcının tümü için formül bulunmaktadır.

İsimBoyutGecikme hesaplama formülü
TIMER08 bitRegValue = 256 - ((Gecikme * Fosc) / (Prescalar * 4))
TIMER116 bitRegValue = 65536 - ((Gecikme * Fosc) / (Prescalar * 4))
TIMER28 bitRegValue = 256 - ((Gecikme * Fosc) / (Prescalar * 4))

TIMER0 – Zamanlayıcı 0

TMRO modülü, aşağıdaki özelliklere sahip 8 bitlik bir zamanlayıcı / sayaçtır:

  • 8 bit zamanlayıcı / sayıcı
  • Okunabilir ve yazılabilir
  • 8 bit yazılım programlanabilir ön ölçekleyici
  • Dahili veya harici saat seçimi
  • FFh’den 00h’ye taşma kesintisi
  • Harici saat için sınır seçimi

TIMER0 Kayıtları

Aşağıdaki tabloda PIC18F4520 TIMER0 modülü ile ilişkili kayıtlar gösterilmektedir.

KayıtAçıklama
OPTION_REGBu kayıtlar TIMER0 Prescalar, Clock Source vb.
TMR0Bu kayıt, prescalar yapılandırmaya bağlı olarak artırılacak zamanlayıcı sayım değerini tutar
INTCONBu kayıt Timer0 taşma bayrağını (TMR0IF) ve karşılık gelen Inetrrupt Enable bayrağını (TMR0IE) içerir.
OPTION_REG
76543210
RBPUINTEDGT0CST0SEPSAPS2PS1PS0

RBPU: Zamanlayıcılar için NA

INTEDG:  Zamanlayıcılar için NA

T0CS: TMR0 Saat Kaynağı Bit1’i seçin – 

T0CKI pininde geçiş 0-Dahili talimat döngü saati (CLKO)

T0SE:  TMR0 Kaynak Kenarı T0CKI pininde yüksek-düşük geçişte bit 1-Artışı seçin 0- T0CKI pininde düşük-yüksek geçişte artış

PSA: Ön  ölçekleyici Atama biti PS2: PS0: Ölçekleyici Oranı Seçim bitleri

PIC18F4520 Timer Kullanımı PIC18F4520 Timer Kullanımı

Timer0 modülü ile Watchdog Zamanlayıcısı arasında karşılıklı olarak paylaşılan sadece bir ön ölçekleyici mevcuttur. Timer0 modülü için bir ön ölçekleyici ataması, Watchdog Timer için ön ölçekleyici olmadığı anlamına gelir veya bunun tersi de geçerlidir. Bu ön derecelendirici erişilebilir değil ama kullanılarak yapılandırılabilir.

PS2: PS0 bit OPTION_REG .

INTCON
76543210
GIETURTATMR0IEINTERBIETMR0IFINTFRBIF

GIE: Global Interrupt Bit 1’i etkinleştir -Maskelenmemiş tüm kesmeleri etkinleştirir 0-Tüm kesmeleri devre dışı bırakır

PIE: Çevresel Kesinti Bit 1’i etkinleştir -Maskelenmemiş tüm çevresel kesintileri etkinleştirir 0-Tüm çevresel kesintileri devre dışı bırakır

TMR0IE: TMR0 Taşma Kesmesi Etkin bit 1-TMR0 kesmesini etkinleştirir 0-TMR0 kesmesini devre dışı bırakır

INTE: Zamanlayıcılar için NA

RBIE: Zamanlayıcılar için NA

TMR0IF: TMR0 Taşma Kesme Bayrak biti 1-TMR0 kaydı taştı (yazılımda temizlenmelidir) 0-TMR0 kaydı taşmadı

INTF: Zamanlayıcılar için NA

RBIF: Zamanlayıcılar için NA

PIC18F4520 Timer Kullanımı PIC18F4520 Timer Kullanımı

Prescalar ile 1ms, 20Mhz için Gecikme Hesaplamaları: 32: RegValue = 256- (Gecikme * Fosc) / (Prescalar * 4)) = 256 - ((1ms * 20Mhz) / (32 * 4)) = 256-156 = 100

PIC18F4520 Timer Kullanımı Program Kodu

  1. Gereken gecikme için Zamanlayıcı Sayısını hesaplayın.
  2. Prescalar kullanmak için PSA bitini temizleyin.
  3. Presaclar bitlerini gecikme hesaplamalarına göre OPTION_REG olarak ayarlayın .
  4. TOCS bitini kullanarak Dahili / Harici Saat Kaynağını seçin .
  5. Zamanlayıcı değerini TMRO kaydına yükleyin .
  6. TMR0IE bitini ayarlayarak Timer0 Interrupt’ı etkinleştirin
  7. GIE ve PIE bitlerini ayarlayarak Global ve Çevresel kesintileri etkinleştirin

Aşağıda LED’leri 1 ms gecikmeyle yanıp sönecek örnek kod verilmiştir.

PIC18F4520 Timer Kullanımı PIC18F4520 Timer Kullanımı

TIMER1 – Zamanlayıcı 1

Zamanlayıcı TMR1 modülü, aşağıdaki özelliklere sahip 16 bit zamanlayıcı / sayaçtır:

  • İki 8-Bit yazmaçlı 16 bit zamanlayıcı / sayıcı TMR1H / TMR1L
  • Okunabilir ve yazılabilir
  • 1: 8’e kadar programlanabilir ön ölçekleme
  • Dahili veya harici saat seçimi
  • FFFFh’den 00h’ye taşma kesintisi
  • Harici saat için sınır seçimi

TIMER1 Kayıtları

Aşağıdaki tabloda PIC18F4520 Timer1 modülü ile ilişkili kayıtlar gösterilmektedir.

KayıtAçıklama
T1CON:Bu kayıtlar, TIMER1 Prescalar, Saat Kaynağı vb.
TMRIHBu yazmaç, zamanlayıcı değerinin en yüksek 8 bitini tutar. TMR1H ve TMR1L, 0000 – FFFFh değerinden artırmaya eşleştirmek için çift olarak kullanılır
TMRILBu yazmaç, zamanlayıcı değerinin en düşük 8 bitini tutar. TMR1H ve TMR1L, 0000 – FFFFh değerinden artırmaya eşleştirmek için çift olarak kullanılır
PIR1Bu kayıt Timer1 taşma bayrağını (TMR1IF) içerir.
PIE1Bu kayıt Timer1 Interrupt Enable bayrağını (TMR1IE) içerir.
T1CON
76543210
T1CKPS1T1CKPS0T1OSCENT1SYNCTMR1CSTMR1ON

T1CKPS1: T1CKPS0: TIMER1

 Giriş Saati 

Prescale

 Seçim bitleri
11 = 1: 8 ön ölçek değeri
10 = 1: 4 ön ölçek değeri
01 = 1: 2 ön ölçek değeri
00 = 1: 1 ön ölçek değeri

T1OSCEN: TIMER1

 Osilatör Etkin Kontrol biti
1-Osilatör etkin
0-Osilatör kapalı

T1SYNC: TIMER1

 Harici Saat Girişi Senkronizasyon Kontrol biti
1-Harici saat girişini senkronize etme
0-Harici saat girişini senkronize etme

TMR1CS: TIMER1

Saat Kaynağı Bit 1-Harici saati seç RC0 / T1OSO / T1CKI (yükselen kenarda) 0-Dahili saat (FOSC / 4)

TMR1ON:

TIMER1

On bit1- 

Timer1’i etkinleştirir 0-Timer1’i durdurur

PIC18F4520 Timer Kullanımı PIC18F4520 Timer Kullanımı

Prescalar ile 100ms @ 20Mhz için Gecikme Hesaplamaları 8:

RegValue = 65536- (Gecikme * Fosc) / (Prescalar * 4)) = 65536 - ((100ms * 20Mhz) / (8 * 4)) = 3036 = 0xBDC

Program Kodu

TIMER1’i gecikme üretimi için yapılandırma ve kullanma adımları aşağıdadır:

  1. Gereken gecikme için Zamanlayıcı Sayısını hesaplayın.
  2. İçinde Presaclar bitlerini ayarlayın T1CON gecikme hesaplamaları göre.
  3. TMR1CS bitini kullanarak Dahili / Harici Saat Kaynağını seçin .
  4. Zamanlayıcı değerini TMR1H, TMR1L kaydına yükleyin .
  5. TMRIE bitini ayarlayarak Timer1 Interrupt’ı etkinleştirin
  6. GIE ve PIE bitlerini ayarlayarak Global ve Çevresel kesintileri etkinleştirin
  7. Son olarak zamanlayıcıyı TMR1ON biti ayarlayarak başlatın

Aşağıda LED’leri 1 ms gecikmeyle yanıp sönecek örnek kod verilmiştir.

PIC18F4520 Timer Kullanımı PIC18F4520 Timer Kullanımı

TIMER2 – Zamanlayıcı 2

TIMER2 modülü, aşağıdaki özelliklere sahip 8 bitlik bir zamanlayıcı / sayaçtır:

  • 8 bit zamanlayıcı / sayıcı
  • Okunabilir ve yazılabilir
  • Yazılım programlanabilir ön ölçekleyici / 1:16’ya kadar PostScaler
  • FFh’den 00h’ye taşma kesintisi

TIMER2 Kayıtları

Aşağıdaki tabloda PIC16f877A Timer0 modülüyle ilişkili kayıtlar gösterilmektedir.

RegisterAçıklama
T2CONBu kayıtlar TIMER2 Prescalar, Saat Kaynağı vb.
TMR2Bu kayıt, prescalar yapılandırmaya bağlı olarak artırılacak zamanlayıcı sayım değerini tutar
PIR1Bu kayıt Timer2 taşma bayrağını (TMR2IF) içerir.
PIE1Bu kayıt Timer2 Kesme Etkinleştirme işaretini (TMR2IE) içerir.
T2CON
76543210
TOUTPS3TOUTPS2TOUTPS1TOUTPS0TMR2ONT2CKPS1T2CKPS0

TOUTPS3: TOUTPS0:

 Timer2 Çıkışı Son Ölçek Seçme bitleri
0000 = 1: 1 postscale
0001 = 1: 2 postscale
0010 = 1: 3 postscale



1111 = 1:16 postscale

TMR2ON:

 Zamanlayıcı2 Açık bit
1-Zamanlayıcı2 açık
0-Zamanlayıcı2 kapalı

T2CKPS1: T2CKPS0:

 Timer2 Clock Prescale Seçim bitleri
00 = Ön ölçekleyici 1
01 = Ön ölçekleyici 4
1x = Ön ölçekleyici 16

PIC18F4520 Timer Kullanımı
PIC18F4520 Timer Kullanımı

Timer2 kullanarak 1sn gecikme oluşturma: Timer2

8-bit olduğundan ve 1:16 prescalar’ı desteklediğinden, 1sn gecikmeyi doğrudan oluşturmak mümkün değildir. 1:16 ön ölçekleyici ile maksimum gecikme:
Gecikme = 256 * (Ön ölçek * 4) / Fosc = 256 * 16 * 4 / 20Mhz = 819us

Şimdi 500us, 1 saniyelik bir gecikme elde etmek için sayacı 2000 kez artırmak için kullanılacak zamanlayıcılar kullanılarak oluşturulabilir.
Prescalar ile 500usec @ 20Mhz için Gecikme Hesaplamaları 16: RegValue = 256- (Gecikme * Fosc) / (Prescalar * 4)) = 256 - ((500us * 20Mhz) / (16 * 4)) = 256-156 = 100

Program Kodu

Gecikme üretimi için Timer2’yi yapılandırma ve kullanma adımları aşağıdadır:

  1. Gereken gecikme için Zamanlayıcı Sayısını hesaplayın.
  2. Gecikme hesaplamalarına göre T2CON’daki Ön ölçekleyici bitlerini ayarlayın .
  3. Zamanlayıcı değerini TMR2 kaydına yükleyin.
  4. TMR2IE bitini ayarlayarak Timer2 Interrupt’ı etkinleştirin.
  5. GIE ve PIE bitlerini ayarlayarak Global ve Çevresel kesintileri etkinleştirin.
  6. Son olarak TMR2ON bitini ayarlayarak Timer2’yi başlatın.

Aşağıda LED’leri 1 sn gecikmeyle yanıp sönecek örnek kod verilmiştir.

PIC18F4520 Timer Kullanımı PIC18F4520 Timer Kullanımı

PIC18F veri sayfasına buradan ulaşabilirsiniz.

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.