با سلام
من به تازگی شروع به کار با ARM کرده ام و با میکرو SAM7X256 و Keil کار میکنم و چند وقتی است که روی راه اندازی PWM وقت گزاشته ام ولی هیچی به هیچی ، چندتا کتاب هم در این رابطه خواندم ولی چیزی نفهمیدم ، تا این که به کتابخانه موجود در لینک زیر برخوردم و برنامه ام رو به صورت زیر نوشتم :
کلیه آموزش ها و نکات مهم برد eke2sam7x v2.0 کویرالکترونیک - ایـــــــــران میـــــــکرو ™
کد:
#include <at91sam7x256.h>
#include <lib_at91sam7x256.h>
#include <delay.h>
#include <PWM.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 i;
i=0;
AT91C_BASE_PMC->PMC_PCER|=1<<AT91C_ID_PWMC;
PWMC_Configure_PIO(AT91C_BASE_PIOB,19);
PWMC_ConfigureClocks(500000,0,48000000);
PWMC_ConfigureChannel(0,AT91C_PWMC_CPRE_MCKA,0,0);
PWMC_SetPeriod(0,0xFFF);
PWMC_SetDutyCycle(0,240);
PWMC_EnableChannel(0);
lcd_init();
while(1)
{
i++;
PWMC_SetPeriod(0,i);
cursor_off();
lcd_clear();
lcd_gotoxy(1,1);
lcd_puts(i);
}
return 0;
}
1 . من برای کنترل نور یک LED و یا کنترل سرعت موتور باید الان چی رو تغییر بدهم ؟
2 . برای ایجاد PWM با مشخصات زیر باید چکار کنم یعنی کمترین مقدار DutyCycle و بیشترین مقدار DutyCycle رو باید چه مقداری قرار بدهم و Period رو چطوری تغییر بدهم ؟
فرکانس 50 هرتز (پریود 20 میلی ثانیه) و DutyCycle بین 5% تا 10% به ازای کمترین و بیشترین سرعت موتور یعنی 1 تا 2 میلی ثانیه است
3 . در رجیستر PWMC_ConfigureChannel برای منبع کلاک باید چه مقداری رو قرار بدهم چون clka و mck رو قبول نمیکند !!! و لطفا یه توضیحی در این مورد بدهید
الان یک LED به پورت B پین 19 متصل کردم ولی با برنامه مذکور هیچ تغییری نمیکند !!! من کدوم مقادیر رو باید تغییر بدهم ؟
خیلی خیلی ممنون می شوم اگر من رو کمک و راهنمایی کنید ، خیلی گیر کرده ام
سپاس بسیار بسیار فراوان