IAR ile STM8S – TIMER

  • 5 sene önce, Baran EKREM yazdı.
  • 0 Yorum
  • 2.854 Kişi Okudu

Bu yazıda Timer’lara giriş yaparak artık zamanlama sorunlarının üstesinden rahatça gelebileceğiz. Daha önce STM32F0 Derslerinde sayaçları incelemiştik. Kısaca özetleyecek olursak. Belirlenen değere kadar saydıkların da bize bir kesme üretirler böylece ana programdan bağımsız olarak periyodik bir kesme sinyalimiz olur. Bu MCU’lar da  zaman yönetimi konusunu çözerek bize bir hayli fayda sağlar. Bunun dışında PWM çıkışları, Capture girişleri, Encoder girişleri gibi bir takım ekstra özellikleri de vardır. Bunlar daha sonraki yazılarda değineceğiz. Şimdi STM8S’in içindeki sayaç bloğunu inceleyerek işe başlayalım.

Öncelikle MCU’ların içinde birden fazla sayıcı olabileceğini ve her sayacın kendine özgü özellikleri olduğunu unutmayalım. STM8S003F3P6 adlı MCU’da TIM1, TIM2, TIM4 olmak üzere 3 adet sayaç bulunmaktadır. Bunu kontrolcü’nün veri kağıdından bulabilirsiniz.


Resimde görüldüğü üzere her sayaç farklı özelliklere sahiptir. Biz genelde PWM çıkışı kullanmadığımız taktirde 8 bit olan daha basit sayaçları zamanlama işlemi için seçeriz. Bu bize sonraki uygulamalarda PWM için seçenek bırakır. Yayınlanan “Reference Manuel” den detayları bilgilere ulaşarak TIM4’ün yapısını inceleyebiliriz.


Görüldüğü gibi tek yapmamız gereken ön bölücü “PRESCALER” ve periyot “PERIOD” değerlerini yüklememiz. Bu işlemi yaptıktan sonra sayacın taşma kesmesini aktif etmemiz yeterli olacaktır.

TIM4 sayacı için tanımlanan 8 farklı ön bölücü değeri şu şekildedir;

Ben kesmeyi 1 mili saniye civarı ayarlamak istiyorum. Öncelikle dahili osilatör (HSI) kullanacağım için 16 MHz / 128 işlemini yaptıktan sonra t yerine 0.001 değerini koyarak periyot değerini elde edebiliriz. Bu frekans sayacın frekansı oluyor.


Buradan Period değerini 124 olarak hesaplanır.

Genel kesmeleri de aktif ederek sayacı çalışır hale getirdik. Bundan sonra yapmamız gereken kesme fonksiyonunu hazırlamak. Burada ST bize hazır bir kesme dosyası vererek kolaylık sağlamış. Bu dosyayı kütüphaneye eklemek yeterli.  STM8S_StdPeriph_Lib içinde bulunan stm8s_it.c adlı dosyayı projeye eklemek yeterli. Bu dosya içinde TIM4_UPD_OVF_IRQHandler kesmesini kullanacağız. Unutmadan burada bir önemli nokta kesme bayrağını temizlemek. Eğer bunu yapmazsak ikinci kez kesme alamayız.

Kullanmış olduğumuz if yapısı sadece sayacın taşma kesmesi olup olmadığını anlamak için. Bunun sebebi bir sayacın birden fazla kesmesi olmasıdır. TIM4 ile ilgili tüm kesmeler bu fonksiyona gireceği için taşma kesmesini bu şekilde ayırt edebiliriz.  Sonuç olarak elimizde 1 mili saniye aralıklar ile terslenen bir çıkış var. Son olarak Logic Analyzer ile bunu doğrulayarak işlemiş tamamlayalım.


Harika! Her şey yolunda gözüküyor. Bu görüntü bize bir şeyi hatırlatıyor ? Bu bir sonraki yazının konusu olsun.

Kodlarımızın son hali şu şekilde.

Toparlayacak olursak…

STM8S kullanarak sayaçları kullanmak bir hayli kolay. Uygun fiyatı, rahat geliştirme ortamı ve kolay geliştirilebilirliği açısından 8 bit tarafından büyük ilgi görmekte olan bu denetleyiciler bir çok projemizde yer almaya devam edecek…

 

Bir Yorum Yazın