İPUCU

Donanım Bilgisayar Donanımı İle İlgili Yardımlaşma Bölümümüz ...

Seçenekler

Stellaris LaunchPad Timer-Pwm

'iMuh@fiz - ait Kullanıcı Resmi (Avatar)
Özel Üye
Üyelik tarihi:
08/2012
Nereden:
Bakü
Yaş:
26
Mesajlar:
11.214
Konular:
4118
Teşekkür (Etti):
1199
Teşekkür (Aldı):
1250
Ticaret:
(0) %
26-07-2013 20:37
#1
Stellaris LaunchPad Timer-Pwm
Bu yazıda stellaris launchpad üzerinde bulunan arm cortex-M4 işlemcinin timer birimlerini inceleyip ardından pwm sinyali üreteceğiz.İşlemcinin timer birimleri oldukça geniş bir konuyu kapsadığı için ancak bir kaç yazı ile anşılabilecektir diye düşünüyorum ancak burada ben timer birimlerini genel hatları ile inceleyip timer biriminin kullanımına örnek verdikten sonra kullandığımız timer birimi ile kare dalgası üreteceğiz.İşlemcinin kullanabildiğimiz beş farklı timer birimi bulunmaktadır.Biz burada timer1in kullanımına örnek verdikten sonra yine timer1den elde ettiğimiz sinyal ile kare dalgası üreteceğiz.Bunun için yine her zamanki gibi işlemcinin datasheet ve user manullari en çok başvuracağımız kaynaklar.Öncelikle gpio tanımlamalarını yapmadan önce sinyal kaynağından frekans değerini ayarlayıp timer için gerekli ayarları yapıp elde ettiğimiz sinyali kullanacağımız(interrupt) kesmeler ile istediğimiz gpio larda kullanacağız.

Timer Özellikleri

6 Tane 16/32 Bit Kullanılabilir Timer
6 Tane 32/64 Bit Kullanılabilir Timer
Timer Modları
One-Shot
Periyodik
16 Bit Prescaler ile kullanılabilir count veya compare
12 Tane Kullanılabilir 16/32 Bit capture/compare/Pwm pini
12 Tane Kullanılabilir 32/64 Bit capture/compare/Pwm pini
32/64 Bit RTC
Timer biriminin genel özellikleri bunlar şimdi Timer1i kullanarak üreteceğimiz sinyallari kesmeleri kullanarak belirleyeceğimiz gpiolar ile blink uygulaması yapalım.

Öncelikle işlemcinin kullanacağımız birimlerini inculude etmeliyiz

Kod:
Include.c	***

#include "inc/hw_ints.h" *//NVIC birimi
#include "inc/hw_memmap.h" //Hafıza birimi portF için
#include "inc/hw_types.h" //
#include "driverlib/sysctl.h" //Sistem Clock 
#include "driverlib/interrupt.h" //Kesme birimleri
#include "driverlib/gpio.h" * //Kullanacağımız gpio birimleri
#include "driverlib/timer.h"
[COLOR="rgb(0, 100, 0)"]Daha sonra Timer,kesmeler ve gpio brimlerini ayarlayacağımız main fonksiyonunu oluşturuyoruz
main.c[/COLOR]
***

Kod:
int main(****)
{
unsigned long Period; //Timer için kullancağımız değişken
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);//40 MHZ'lik clock sinyali
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); //PortF Tanımlaması
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3); //PortF^teki gpiolar
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); //Timer1 aktif ediliyor
TimerConfigure(TIMER1_BASE, TIMER_CFG_32_BIT_PER);//32 Bit periyodik timerı kullanıyoruz * 
Period=(SysCtlClockGet() / 10) / 2; // %50 dutycycle ve 10HZ lik bir sinyali Period değişkenine atadık
TimerLoadSet(TIMER1_BASE, TIMER_A, Period -1);//Timer birimine period değişkenini okutuyoruz
IntEnable(INT_TIMER1A);//Kesmeler aktif
TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
IntMasterEnable();//Master olarak kullanacağız
TimerEnable(TIMER1_BASE, TIMER_A);//Timer1 Aktif
*
while(1)
{
}
}
**** Timer1IntHandler(****)//Timer Fonksiyonu
{
TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
if(GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_3))
{
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,0);
*
}
else
{
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 8);
}
}
[COLOR="rgb(0, 100, 0)"]Timer birimini inceledik şimdide Pwm özelliği taşıyan herhangi bir pini kullanarak pwm sinayali üretelim.[/COLOR]
Kod:
Include.c	***

#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"
#include "driverlib/pin_map.h"
[COLOR="rgb(0, 100, 0)"]main.c ***
[/COLOR]

Kod:
int main(****){
unsigned long Period, dutyCycle;
*
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
Period=1000;
dutyCycle=250;
*
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,0);
*
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF|SYSCTL_PERIPH_GPIOB);
*
GPIOPinConfigure(GPIO_PF2_T1CCP0);
GPIOPinConfigure(GPIO_PB4_T1CCP0);
*
GPIOPinTypeTimer(GPIO_PORTF_BASE, GPIO_PIN_2);
GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_4);
*
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);
TimerConfigure(TIMER1_BASE, TIMER_CFG_SPLIT_PAIR|TIMER_CFG_A_PWM);
TimerLoadSet(TIMER1_BASE, TIMER_A, Period -1);
TimerMatchSet(TIMER1_BASE, TIMER_A, dutyCycle);
TimerEnable(TIMER1_BASE, TIMER_A);
*
while(1)
{
TimerMatchSet(TIMER1_BASE, TIMER_A, dutyCycle++);
if(dutyCycle >=period -1)
dutyCycle = 0;
SysCtlDelay(50000);
}
*
}
Timer Pwm - YouTube
--------------------- Kimler geldi kimler gecti don bak arkana elbet ki zaman bizi sizide silip supurecektir peki bizden geriye ne kalicak ? keske hic bir sey kalmasa...

Youtube kanalim ► https://goo.gl/eM6wz2

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı