برای راه اندازی PWM0 در AT91SAM7S64 باید از کدام پایه استفاده کنم و چگونه کد نویسی می شود
اطلاعیه
Collapse
No announcement yet.
pwm
Collapse
X
-
پاسخ : pwm
نوشته اصلی توسط hadiyegبرای راه اندازی PWM0 در AT91SAM7S64 باید از کدام پایه استفاده کنم و چگونه کد نویسی می شود
پایه های PWM0 در 7S
PA0
PA11
PA23
می باشدو از هر کدام که بخواهی می توانی استفاده کنید. در مورد برنامه نویسی آن اول از همه باید فرکانس کاری میکرو و فرکانس PWM خود را مشخص کنید چون یک سری فرمول دارد برای محاسبات و مقدار دهی رجیسترها. در کتاب "مرجع کامل میکروکنترلرهای ARM سری AT91" انتشارات نص به طور کامل توضیح داده و چند تا مثال هم دارد و در قسمت پروژه های آن کنترل دور موتور هم می باشد.
-
پاسخ : pwm
نوشته اصلی توسط hadiyegسلام
ممنون.تا حدودی فهمیدم باید کدوم رجیستر هارو مقدار دهی کنم ولی میشه بگی کجا تعیین میشه که حتما از PA0 ، PWM0 خارج میشه؟
این سه خط تعیین می کند که PWM0 از PA0 خارج شود.
کد:AT91C_BASE_PIOA->PIO_PDR = (1<<0); AT91C_BASE_PIOA->PIO_MDER = (1<<0); AT91C_BASE_PIOA->PIO_ASR = (1<<0);
دیدگاه
-
پاسخ : pwm
سلام
من این کدارو تونستم از DATASHeet در بیارم .میشه بگید درسته یا اشکال داره؟ اگه بخوام فرکانس PWM 500HZ بشه مقدار رجیستر PWM_CPRD0 چند باید بشه؟ کریستال 18.432 گذاشتم.یه چیزایی از PMC خوندم.لازمه اونم راه بیوفته؟
*AT91C_PWM_MR=0x00000A01
*AT91C_PWM_ENA=0x00000001
*AT91C_PWM_DIS=0x00000000
*At91C_PWM_CMR0=0x0000000A
hardware-ui
دیدگاه
-
پاسخ : pwm
نوشته اصلی توسط hadiyegسلام
من این کدارو تونستم از DATASHeet در بیارم .میشه بگید درسته یا اشکال داره؟ اگه بخوام فرکانس PWM 500HZ بشه مقدار رجیستر PWM_CPRD0 چند باید بشه؟ کریستال 18.432 گذاشتم.یه چیزایی از PMC خوندم.لازمه اونم راه بیوفته؟
*AT91C_PWM_MR=0x00000A01
*AT91C_PWM_ENA=0x00000001
*AT91C_PWM_DIS=0x00000000
*At91C_PWM_CMR0=0x0000000A
http://www.eca.ir/forum2/index.php?topic=48607.0
مقدار رجیستر PWM_CPRD به فرکانس میکرو تون ارتباط مستقیم دارد اول باید فرکانس میکروتون مشخص کنید سپس توسط فرمول آن مقدار این رجیستر را تعیین کنید.
در مثال زیر PWM0 بر روی PA0 با فرکانس 48KHZ با D.C 10٪ را راه اندازی می کند. فرکانس میکرو هم 48MHZ می باشد.(تمامی این موارد دورن اون کتاب که گفتم هست)
کد:#include <Atmel/ioat91sam7s64.h> void main () { //--------------------start up-------------------------- AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; // AT91C_WDTC_WDDIS=(1<<15) AT91C_BASE_RSTC->RSTC_RMR=0xA5000001; //--------------------speed up-------------------------- AT91C_BASE_CKGR->CKGR_MOR = 0xF01; AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC; AT91C_BASE_PMC->PMC_MCKR = 0x3; AT91C_BASE_PMC->PMC_SCER = 0x1; //----------------------------------------------------- AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_PWMC); // AT91C_ID_PWMC=10 //----------------------------------------------------- AT91C_BASE_PIOA->PIO_PDR = (1<<0); AT91C_BASE_PIOA->PIO_MDER = (1<<0); AT91C_BASE_PIOA->PIO_ASR = (1<<0); AT91C_BASE_PWMC_CH0->PWMC_CMR = 0x202; AT91C_BASE_PWMC_CH0->PWMC_CPRDR = 250; AT91C_BASE_PWMC_CH0->PWMC_CDTYR = 25; AT91C_BASE_PWMC->PWMC_ENA = 1; while(1); }
دیدگاه
دیدگاه