PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : کاربرد ler در pwm ؟



Amirkhan_0o0
05-10-2013, 02:19
سلام دوستان من می دونم که برای این که بتونیم مقدار جدید برای ولتاژ pwm بدیم، تا زمانی که بیت LER مربوط به اون، یک (1) نشه، مقدار جدید اعمال نمی شه!
خب! الان فرض کنید به ازای MR0=1000000 وMR1=500000 سیستم داره کار می کنه و tc الان روی 100 هست. حالا از یه جایی یه وقفه ای اعمال می شه و MR1 رو با مقدار 10000 مقدار دهی می کنه.
حالا اگه LER مربوط به اون رو 1 کنیم، و در حالی که TC هنوز به 500000 نرسیده، 500000 به shadow می ره و یا این که صبر می کنه تا سیکل تموم شه و بعد از اون مقدار 10000 به shadow می ره؟؟
ممنون

mzarkoob
05-10-2013, 16:07
سلام
والا با این نحوه طرح پرسشی که انجام دادید خود من دارم یه ربعه می خونم ببینم سوال چیه متوجه نشدم! حالا نیم ساعت دیگه باید برم رجیسترها نیگاه کنم تا متوجه بشم :mrgreen:
اگه بیشتر سوال را باز کنید و چند تا شکلی .... بهتره اینطوری کسی که این رجبسترها را حضور ذهن نداره سریع یادش میاد و وقتی برای بررسی نمی خواد بذاره جواب میده
:hi:

Amirkhan_0o0
05-10-2013, 18:24
ممنون آقای زرکوب ما اینقدر بین این فروم های خارجی و داخلی جا بجا شدیم که دیگه داره حرف زدن به زبون مادری از یادمون می ره!!
توی PWM رجیستر MR0 کار limit reg رو می کنه. و وظیفه اش اینه که سیکل PWM رو تعیین کنه
بقیه رجیستر ها MR1 تا MR6 کارشون اینه که برای مقدار کانال های 1 تا 6 رو تعیین کنه .
یه رجیستری هست به نام LER که در توضیح نوشته
Load Enable Register. Enables use of new PWM match values.
یه جایی توی توضیحات TCR نوشته:
A program write to a Match register will not have an effect on the Match result until the corresponding bit in PWMLER has been set, followed by the occurrence of a PWM Match 0 event.
1- من نتونستم بفهمم این رجیستر چیکار می کنه یعنی تا LER ست نشه، نمی شه مقدار MRx عوض نمی شه؟؟
2- این تغییر مقدار، در MRx در سیکل PWM فعلی اتفاق میفته یا سیکل بعدی؟

Amirkhan_0o0
18-10-2013, 13:14
یک سوال دیگه دوستان
من می خوام با شبیه سازی خود کیل یه کد مقدماتی pwm رو شبیه سازی کنم.
اما به مشکل بر می خورم.
کدم بسیار ساده است. و از کتاب آقای خوش باطن برداشته ام:


#include "LPC17xx.h"
main (void){
LPC_PINCON->PINSEL3 |= 0x200;//select p1.20 as pwm1.2
LPC_PWM1->PR = 2;//prescalar value
LPC_PWM1->PCR = (1<<10);//PWM single edge output enable
LPC_PWM1->MR0 = 5;
LPC_PWM1->MR1 = 30;
LPC_PWM1->LER = 0x05;
LPC_PWM1->TCR = 2;
LPC_PWM1->TCR = 9;
while (1){
LPC_PWM1->LER = 0x05;
}
}

کد رو ران می کنم ولی در نمایش پین های پورت 1 هیچی تغییر نمی کنه!!
You can see links before reply

و اینجا هم خبری نیست:
You can see links before reply
مشکل از روش من در شبیه سازی هست و یا این که مشکل از کد؟
ممنون می شم پاسخم رو بدین

mzarkoob
18-10-2013, 14:59
سلام
چیزی که در نگاه اول مورد داره اینه که مقدار رجیستر mr0 چرا کمتر از مقدار رجیسترmr1 است!؟
و البته در فیلم اموزشی این مد با راه اندازی هر شش پایه خروجی شرح داده شده است و نتایج در سیمولاتور نمایش داده شده است.

Amirkhan_0o0
18-10-2013, 15:10
سلام
چیزی که در نگاه اول مورد داره اینه که مقدار رجیستر mr0 چرا کمتر از مقدار رجیسترmr1 است!؟
و البته در فیلم اموزشی این مد با راه اندازی هر شش پایه خروجی شرح داده شده است و نتایج در سیمولاتور نمایش داده شده است.
سلام
اینجا اشتباه نوشتم منظورم 3 بود
که با 3 راه نیوفتاد.(چون توی برنامه اصلی 50 و 30 بود که حذف کردم اینجا)
اون code bundle خود کیل که PWMTEST.C داره رو هم اجرا کردم نتیجه نگرفتم!

بله لازم شد اون سی دی ها رو همراه با tiger board بخرم!
چون هنوز دارم با هدر بورد اون یکی سایت! کار می کنم و با بوت لودر می رم جلو!

Amirkhan_0o0
18-10-2013, 15:13
این کد رو از اینترنت گرفتم ولی نمی دونم چرا tc یه جاهایی توی شمارش می پره!!


int period=10;
int width=4;
LPC_SC->PCONP |= (1 << 6); // PWM1 power on
LPC_SC->PCLKSEL0 |= (1 << 12); // Divide CCLK by 1 for PWM1
LPC_PINCON->PINSEL4 |= 1; // DIP26 = pin P2.0, set to PWM1.1
LPC_PINCON->PINMODE4 |= 2; // enable neither pull up nor pull down.
LPC_PWM1->TCR = 0; // reset PWM
LPC_PWM1->MR0 = period; // set pulse period in clock cycles
LPC_PWM1->MCR |= 1 << 1; // Reset timer on Match0
LPC_PWM1->MR1 = width; // set pulse width in clock cycles
LPC_PWM1->LER = 3; // make match register writes effective for MR0+MR1
LPC_PWM1->PCR |= (1 << 9); // enable PWM1 output, single edge mode
LPC_PWM1->TC = 0; // clear timer counter
LPC_PWM1->PC = 0; // clear prescale counter
LPC_PWM1->PR = 1; // clear prescale register
LPC_PWM1->TCR = 8+1; // enable PWM mode and PWM timer counter
while(1){
LPC_PWM1->TCR = 8+1; // enable PWM mode and PWM timer counter

}


فکر کنم به PR ربط داشته باشه!!