اطلاعیه

Collapse
No announcement yet.

راه اندازی واحد PWM در AT91SAM7X256

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #31
    پاسخ : راه اندازی واحد PWM در AT91SAM7X256

    سلام

    دوستان کسی نیست این PWM رو به زبون ساده برای ما بگه ؟؟؟ حق الزحمت رو هم میدم
    2 تا کتاب ARM دیگه هم خریدم و قسمت PWM رو خوندم ولی باز هم چیزی دستگیرم نشد ، یعنی یه چیزهایی فهمیدم ولی نمیدونم چرا جواب نمیگیرم ، خدایا دیگه دارم دیوانه میشم ، به خدا اگر یه نفر یه طوری این PWM رو برای من بگه که یاد بگیرم و بتونم یه LED رو نورش رو کنترل کنم یا سروو موتور رو روشن کنم ، با پیغام خصوصی با هم حساب میکنیم

    الان این برنامه منه ولی هیچی به هیچی :
    کد:
    [left]#include <AT91SAM7X256.h>
    #include <lib_AT91SAM7X256.h>
    #include <delay.h>
     
    #define LCD_PORT_B
    #define LCD_RS 20
    #define LCD_E 21
    #define LCD_DB4 22 
    #define LCD_DB5 23
    #define LCD_DB6 24
    #define LCD_DB7 25
    #include <lcd.h>
    
    int main (void) 
    {
    int A;
    A=0;
    
    AT91C_BASE_PIOA->PIO_PDR=100000;
    AT91C_BASE_PIOA->PIO_ASR=100000;
    AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PWMC);
    AT91C_BASE_PWMC->PWMC_DIS=0xF;
    AT91C_BASE_PWMC->PWMC_MR=0;
    AT91C_BASE_PWMC_CH0->PWMC_CMR=(0x208);
    AT91C_BASE_PWMC_CH0->PWMC_CPRDR=150;
    AT91C_BASE_PWMC_CH0->PWMC_CDTYR=A;
    AT91C_BASE_PWMC->PWMC_ENA=0x1;
    
    lcd_init();
    
    while(1) 
    {
    AT91C_BASE_PWMC_CH0->PWMC_CDTYR=A;
    cursor_off(); 
    lcd_clear();
    lcd_gotoxy(1,1);
    lcd_puts(AT91C_BASE_PWMC_CH0->PWMC_CDTYR);
    A++;
    delay_ms(50);
    }
    }[/left]
    ممنون
    http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

    دیدگاه


      #32
      پاسخ : راه اندازی واحد PWM در AT91SAM7X256

      سلام دوستان اگه میشه این pwm رو یه کم برامون توضیح بدید خیلی عجیب قریبه

      دیدگاه


        #33
        پاسخ : راه اندازی واحد PWM در AT91SAM7X256

        این برنامه رو اگه میشه یه کوچولو توضیح بدید مثلا خط 9 ( 19>>1 ) این یعنی چی؟



        #include <AT91SAM7X256.H>

        //#include "usart.h"

        #include <delay.h>

        int long omid;
        int main (void) {

        // usart0_init(2,9600);

        //printf("WAIT\n"

        // PMC Configuration

        // Enable PIOB And PWMC Clocks

        AT91C_BASE_PMC -> PMC_PCER = (1 << AT91C_ID_PIOA) | (1 << AT91C_ID_PIOB) | (1 << AT91C_ID_PWMC);

        // PIO Configuration

        // Disable PIO On PB.19(PWM0)

        AT91C_BASE_PIOB -> PIO_PDR = (1 << 19);

        // Assign PB.19 To Pheripheral A Function

        AT91C_BASE_PIOB -> PIO_ASR = (1 << 19);

        // Disable PullUp Resisitor

        AT91C_BASE_PIOB -> PIO_PPUDR = (1 << 19);



        // PWMC Configuration

        // PWM0 Clock Source = MCK

        // PWM_ENA : (CHID0 = 1)

        AT91C_BASE_PWMC -> PWMC_ENA = (1 << 0);

        // PWM_CMR0 : (CPOL = 1)

        AT91C_BASE_PWMC_CH0 -> PWMC_CMR = (1 << 9);

        // Put A Initial Value For Period And Duty Cycle Register

        AT91C_BASE_PWMC_CH0 -> PWMC_CDTYR = 0;//0xFFFF;

        AT91C_BASE_PWMC_CH0 -> PWMC_CPRDR = 0xFFFF;

        while(1)

        {
        delay_us(10);
        AT91C_BASE_PWMC_CH0 -> PWMC_CDTYR =omid;
        omid++;

        }



        }

        دیدگاه


          #34
          پاسخ : راه اندازی واحد PWM در AT91SAM7X256

          کسی می دونه از کجا MCK رو می شه فهمید چنده و چجوری می شه تغییرش داد؟


          اینم یه برنامه واسه فرکانس 1hz
          کد:
          int main(){
          	
          	*AT91C_PMC_PCER = 1<<AT91C_ID_PWMC;		 // (PMC) Peripheral Clock Enable Register
          											 // PWM Controller(AT91C_ID_PWMC)
          
          	*AT91C_PIOB_PDR = (1<<19)|(1<<20);		 // (PIOB) PIO Disable Register
          	*AT91C_PIOB_MDER = (1<<19)|(1<<20);		 // (PIOB) Multi-driver Enable Register
          	*AT91C_PIOB_PPUER = (1<<19)|(1<<20);	 // (PIOB) Pull-up Enable Register
          	*AT91C_PIOB_ASR = (1<<19)|(1<<20);		 // (PIOB) Select A Register
          	
          	//configure PWM0&PWM1 whit frequency of 1Hz and 
          	//50% duty cycle for PWM0, 25% duty cycle for PWM1 
          	*AT91C_PWMC_CH0_CMR = 0x20A;			 // (PWMC_CH0) Channel Mode Register  MCK/1024 CPOL=1
          	*AT91C_PWMC_CH1_CMR = 0x20A;			 // (PWMC_CH1) Channel Mode Register  MCK/1024 CPOL=1
          	*AT91C_PWMC_CH0_CPRDR= 0xb6d0;			 // (PWMC_CH0) Channel Period Register
          	*AT91C_PWMC_CH1_CPRDR= 0xb6d0;			 // (PWMC_CH1) Channel Period Register	  46800
          	*AT91C_PWMC_CH0_CDTYR= 0x5b68;			 // (PWMC_CH0) Channel Duty Cycle Register	50%=23400
          	*AT91C_PWMC_CH1_CDTYR= 0x2db4;			 // (PWMC_CH1) Channel Duty Cycle Register	25%=11700
          	*AT91C_PWMC_ENA= 0x3;					 // (PWMC) PWMC Enable Register		  pwm0 & pwm1 enable
          	
          	while(1);	
          	 
          }

          دیدگاه

          لطفا صبر کنید...
          X