Nxp-Arm7 PWM

Pwm uygulaması : LPC2148′in 6 tane pwm portu var, hepsi birbirinden bağımsız olarak kullanılabilir. Kullanımıda oldukça basit registerlere sahip. Aşağıya pwm2 portunu %50 duty cycle ile aktif eden bir program ekliyeceğim. Aynı şekilde diğer pwm portlarınıda istediğiniz duty cycle’da çalıştırabilirsiniz. (Pwm2 pini P0.7′dir)
#include
void sistem_setup(void);
void DLY_MS(long ms);
void pwm_init (void);
#define P0_0 0x00000001
int
main(void){
sistem_setup();
// SCS = 0x03; // fast I/O moduna geelim
PINSEL0=P0_0<<15; // PWM portları seçilir
pwm_init();
while(1);
}
void
pwm_init (void){
PWMPR=0; // PWMTC , her Pclk+1'de artar
PWMMCR=0x02; // PWMMR0 seçilir
PWMMR0=3000;
PWMMR2=1500; // PWM2 için duty cycle %50
PWMLER=0x5; // PWMMR0, PWMMR2 değerlerini latch et
PWMPCR=0x400; // PWM2 output enable
PWMTCR=0x09; // timer start ve PWM enable edilir
}
void
sistem_setup(void){
// Processor clock=5*12Mhz=60Hz
PLL0CFG=0x24;
// PLLCON ve PLLCFG registerleri ierigi degistirildiginde , asagidaki
// proses uygulanir, 1) PLL0FEED=0xAA ve 2)PLL0FEED=0x55
PLL0FEED=0xAA; // Feed process
PLL0FEED=0x55;
PLL0CON=0x1; // PLL'i enable et
PLL0FEED=0xAA; // Feed process
PLL0FEED=0x55;
while(!(PLL0STAT & 0x400)) ; // PLL kitleninceye kadar bekle (5*12Mhz=60Mhz'e kitlenir)
PLL0CON=0x3; // PLL'i clock kaynagi gibi bagla
PLL0FEED=0xAA; // Feed process
PLL0FEED=0x55;
MAMCR=0x2; // MAM full Enable
MAMTIM=0x4; // MAM fetch cycles = 4CCLK
VPBDIV=0x02; // PCLK = 30 MHz
}
void
DLY_MS(long ms){
long i;
unsigned int j;
for (i = 0; i < ms; i++ )
for (j = 0; j < 7500; j++ );
}
3 PWM portunu kullanarak kaliteli RGB ledlerle istediğiniz rengi elde edebilirsiniz. Bazı resimler aşağıdadır.







17/10/2009 19:27
Hocam siten gerçekten çok iyi.
Benim gibi yeni başlıyacaklara inanılmaz güç veriyor.
Bir gelişme kartı satın aldıktan sonra projelere başlıycam inş.
Keşke herkes böyle paylaşımcı olsa. Ülkemiz ancak böyle kalkınır.