Nxp-Arm7 PWM

pwm_kucukpic 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.
abcd0001abcd0003abcd0005abcd0006abcd0007abcd0008800x600

3 Yorum

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir