PDA

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



cmuiran
15-09-2011, 22:20
سلام به دوستان عزیز
من یک پروژه ای داشتم میخواستم ببینم کسی ار دوستان میتونه به من کمک کنه
من نمونه برنامه برای راه اندازی تایمر و کانتر میخواستم
کانتر برای شمارش
و تایمر برای ایجاد زمان خاص
میکروکنترلر مصرفی من
lpc2378

اگه کسی قبلا نوشته بیضحمت قرار بده ما استفاده کنیم
با تشکر

shayanmelody
15-09-2011, 23:17
سلام
من تو قسمت پروژه های برد lpc2378 پروژه راه اندازی تایمر رو گذاشتم.
راه اندازی کانتر هم زیاد فرقی نمیکنه ، اگر مشکلی داشتید مطرح کنید شاید تونستم راهنمایی کنم.
الآن بردم دست دوستم هست ، وگرنه برنامش رو مینوشتم و قرار میدادم.

در ضمن ، من کاربرد رجیستر های بخش تایمر/کانتر رو از رو دیتاشیت ترجمه کردم ، اگر دوست دارید اونهارو قرار بدم.

cmuiran
16-09-2011, 23:12
سلام دوست عزیز
ممنونم که جواب دادین
اگه براتون جای داره قرار بدین ممنون میشم
و اگه مشکل داشتم مزاحمتون میشم
تشکر

cmuiran
16-09-2011, 23:25
اقا پیدا نکردم
بیضحمت لینک قرار بدین
ممنون میشم

shayanmelody
16-09-2011, 23:57
اقا پیدا نکردم
بیضحمت لینک قرار بدین
ممنون میشم

ایـــــــــران میـــــــکرو ™ (You can see links before reply)


نوضیحات رجیستر ها رو هم هرچه سریع تر مینویسم.

shayanmelody
17-09-2011, 02:53
از پست بعد در مورد رجیستر ها توضیح میدم.فقط یک سوال :
شما نحوه اختصاص زیر روال برای یک منبع وقفه رو میدونید ؟ چون این قسمت هم توضیحات مفصل داره.

shayanmelody
17-09-2011, 03:26
تایمر / کانتر ها


پیکره بندی اولیه :

1) تغذیه : برای فعال کرده واحد تایمر کانتر (مانند سایر سخت افزار های جانبی میکرو) ابتدا باید تغذیه آنرا فعال کنید که اینکار هم بوسیله ویزارد فایل استارت آپ و هم بوسیله کدنویسی امکان پذیر است.

تنظیمات در قسمت ویزارد به علت سادگی دارای نکته خاصی نمیباشد.

تنظیمات از طریق کد نویسی : رجیستر pconp برای فعال سازی کلیه امکانات جانبی میکروکنترلر باید مقداردهی شود که برای فعال سازی تایمر ها داریم :

الف)تایمر صفر : بیت یکم این رجیستر باید یک شود. Pconp |=0x2;
ب)تایمر یک : بیت دوم این رجیستر باید یک شود. Pconp |=0x4;
ج)تایمر دو : بیت بیست و دوم این رجیستر باید یک شود. Pconp |=0x400000;
د)تایمر سه :بیت بیست و سوم این رجیستر باید یک شود. Pconp |=0x800000;


2)کلاک واحد تایمر/کانتر : برای تنظیم کلاک این واحد نیز میتوانیم از ویزارد فایل استارت آپ کمک بگیریم که نکته خاصی ندارد و یا از طریق رجیستر ها.

برای تعیین کلاک تایمر صفر و یک از رجیستر pclksel0 و برای تعیین کلاک تایمر دو و سه از رجیستر pclksel1 استفاده میکنیم.هر دو رجیستر فوق 32 بیتی میباشند.

الف)تایمر صفر : بیت های دوم و سوم رجیستر pclksel0 مربوط به تایمر صفر میباشند.
ب)تایمر یک : بیت های چهارم و پنجم رجیستر pclksel0 مربوط به تایمر یک میباشند.
ج)تایمر دو : بیت های دوازدهم و سیزدهم رجیستر pclksel1 مربوط به تایمر دو میباشند.
د)تایمر سه : بیت های چهاردهم و پانزدهم رجیستر pclksel1 مربوط به تایمر سه میباشند.

برای تعیین کلاک ، بیت های فوق باید به صورت زیر مقداردهی شوند :

00 => pclk = cclk/4

01 => pclk = cclk

10 => PCLK = CCLK/2

11 => PCLK = CCLK/8


منظور از cclk کلاک cpu و منظور از pclk کلاک واحد مورد نظر است.


خوب.تا اینجا تنظیمات اولیه تموم شد.از پست بعد (به دلیل شلوغ نشدن مطالب) رجیستر های اصلی رو توضیح میدم.

shayanmelody
17-09-2011, 03:34
قبل از اینکه توضیحات مربوطه رو شروع کنم قبلش باید عرض کنم که مطالبی که قرار میدم ، عینا مطالبی هست که در دیتاشیت خود این میکرو وجود داره .فقط اونجا اینگیلیسی نوشته و من دارم فارسی مینویسم.
از اونجاییکه زبان انگیلیسی من زیاد خوب نیست اگر بعضی از توضیحات یکم گنگ هستند ، میتونید دقیقا به سر فصل مربوطه مراجعه کنید و مطالب قسمت مورد نظرتون رو به زبان اصلی ببینید.

با تشکر.

shayanmelody
17-09-2011, 04:02
1)رجیستر TxTCR : این رجیستر فعالیت تایمر کانتر را کنترل میکند.

بیت صفر COUNTER ENABLE : با دادن مقدار یک به این بیت شمارنده برای شمارش فعال میشود و با دادن مقدار صفر شمارنده غیر فعال میشود.

بیت یک COUNTER RESET : با دادن مقدار یک به این بیت شمارنده ریست شده و تا زمانیکه مقدار این بیت به صفر باز نگردد ، ریست باقی میماند.

بیت های 2 تا 7 رزرو شده هستند.

2)رجیستر TxCTCR : این رجیستر نوع کاربرد تایمر کانتر را تعیین میکند که به شرح زیر است :

بیت صفر و یک TIMER / COUNTER MODE : بیت صفر و یک این رجیستر کنترل کننده تایمر بودن یا کانتر بودن میباشد که حالات زیر ممکن است روی دهد :

00 : تایمر.
01 : کانتر ، شمارنده با هر لبه بالارونده روی پایه کپچر افزایش می یابد.
10 : کانتر ، شمارنده با هر لبه پایین رونده روی پایه کپچر افزایش می یابد.
11 : کانتر ، شمارنده با هر دولبه روی پایه کپچر افزایش میابد.

بیت دو و سه COUNT INPUT SELECT : این دو بیت ورودی پایه کپچر را انتخاب میکنند که با مقدار 00 پایه CAPn.0 برای تایمر n انتخاب میشود و با مقدار 01 پایه CAPn.1 برای تایمر n انتخاب میشود.

بیت های 4 تا 7 رزرو شده هستند.


3) رجیستر TxIR : این رجیستر حاوی پرچم های وقفه تایمر کانتر x میباشد که در زیر ساختار آن آورده شده است :

بیت صفر MR0 INTERRUPT : پرچم وقفه برای وقفه رجیستر مقایسه ای صفر.
بیت یک MR1 INTERRUPT : پرچم وقفه برای وقفه رجیستر مقایسه ای یک.
بیت دو MR2 INTERRUPT : پرچم وقفه برای وقفه رجیستر مقایسه ای دو.
بیت سه MR3 INTERRUPT : پرچم وقفه برای وقفه رجیستر مقایسه ای سه.
بیت چهار CR0 INTERRUPT : پرچم وقفه برای رویداد کپچر ، کانال صفر.
بیت پنج CR0 INTERRUPT : پرچم وقفه برای رویداد کپچر ، کانال یک.

بیت های شش و هفت رزرو شده هستند.


4)رجیستر TxTC : این رجیستر محتوای شمارنده تایمر کانتر را در خود نگه میدارد.

5)رجیستر TxPR : رجیستر 32 بیتی که تقسیم فرکانس را بر عهده دارد.برای مثال اگر مقدار این رجیستر برابر صفر باشد ، شمارنده با هر کلاک افزایش می یابد،اگر برابر 1 باشد ، شمارنده با هر دو کلاک افزایش میابد و ...

6)رجیستر TxMR0 - TxMR3 : این رجیستر ها همان رجیستر های مقایسه کننده میباشند.در صورتیکه مقدار شمارنده برابر با یکی از آنها شود ، با تنظیمات مورد نیاز وقفه ایجاد میشود.


ادامه مطالب در پست بعد

cmuiran
17-09-2011, 11:23
سلام
ممنون از شما که وقت گذاشتین
تشکر

shayanmelody
17-09-2011, 13:56
7)رجیستر TxMCR : این رجیستر وضعیت رجیستر های مقایسه ای در هنگام رویداد تطابق مشخص میکند که شامل 16 بیت میباشد:

1) سه بیت اول مختص MR0
2) سه بیت دوم مختص MR1
3)سه بیت سوم مختص MR2
4)سه بیت چهارم مختص MR3

بیت های 12 تا 15 رزرو شده هستند.

برای هر گروه از سه بیت فوق شرایط زیر وجود دارد :

بیت 3n ام ، MRnI : وقتی یک باشد ، زمانیکه MRn مساوی شمارنده شود ، وقفه روی میدهد.وقتی صفر باشد این وقفه غیر فعال است.

بیت 3n+1 ام ، MRnR : وقتی یک باشد ، زمانیکه MRn مساوی شمارنده شود ، شمارنده ریست میشود.وقتی صفر باشد ، این ویژگی غیر فعال است.

بیت 3n+2 ام ، MRnS : وقتی این بیت یک باشد ، زمانیکه MRn مساوی شمارنده شود ، شمارنده متوقف شده و بیت صفرم TxTCR صفر میشود که برای راه اندازی دوباره باید آنرا یک کرد.

8) رجیستر TxCR0 - TxCR1 : این رجیستر مقدار شمارنده را در هنگام رویداد حالات مورد نظر در خود ذخیره میکند (این حالات توسط رجیستر بعدی مشخص میشوند)

9) رجیستر TxCCR : این رجیستر کنترل کننده کپچر میباشد و عملکرد آن تقریبا شبیه به TxMCR میباشد.

1)سه بیت اول مختص CAP0
2)سه بیت دوم مختص CAP1

بیت های 6 تا 15 رزرو شده هستند.

برای هر گروه از سه بیت فوق شرایط زیر بر قرار است :

بیت 3n ام ، CAPnRE : وقتی یک شود ، حساسیت ورودی به لبه بالارونده خواهد بود.با مقدار صفر این ویژگی غیر فعال میشود.

بیت 3n+1 ام ، CAPnFE : وقتی یک شود ، حساسیت ورودی به لبه پایین رونده خواهد بود.با مقدار صفر این ویژگی غیر فعال است.

بیت 3n+2 ام ، CAPnI : وقتی یک باشد ، اینتراپت مورد نظر فعال میشود . با مقدار صفر این ویژگی غیر فعال است.


ادامه در پست بعد.

shayanmelody
17-09-2011, 14:32
10)رجیستر TxEMR : این سری از میکروکنترلر ها توانایی این را دارند که با ایجاد حالت مورد نظر در مد تایمر کانتر سیگنالی را روی پایه های خروجی ایجاد کنند.پایه های خروجی این سیگنال با نام MATx.0 ~ MATx.3 هستند که البته ممکن است این تعداد پایه در همه میکرو ها وجود نداشته باشد .برای مثال LPC2378 دو پایه MATx.2 و MATx.3 را ندارد.

ساختار کلی این رجیستر به شرح زیر است :

الف) بیت صفر ، EM0 : این بیت در هنگام استفاده از رجیستر مقایسه ای صفر باید تنظیم شود.وضعیت پایه مورد نظر (پایه خروجی تایمر) توسط بیت های 4 و 5 (EMC0) کنترل میشود.

ب) بیت یک ، EM1 : این بیت در هنگام استفاده از رجیستر مقایسه ای یک باید تنظیم شود.وضعیت پایه مورد نظر توسط توسط بیت های 6 و 7 (EMC1) مشخص میشود.

ج) بیت دو ، EM2 : این بیت در هنگام استفاده از رجیستر مقایسه ای دو باید تنظیم شود.وضعیت پایه مورد نظر توسط بیت های 8 و 9 (EMC2) مشخص میشود.

د) بیت سه ، EM3 : این بیت در هنگام استفاده از رجیستر مقایسه ای سه باید تنظیم شود.وضعیت پایه خروجی توسط بیت های 10 و 11 (EMC3) تعیین میشود.

برای هر کدام از دو بیت EMCx حالات زیر ممکن است روی دهد :


00 => هیچ عملی صورت نگیرد (DO NOTHING)

01 => پایه صفر شود (CLEAR OUTPUT)

10 => پایه یک شود (SET OUTPUT)

11 => وضعیت پایه معکوس شود (TOGGLE OUTPUT)


خوب دوستان.
تقریبا قسمت تایمر تموم شد.فقط یک قسمت مونده و اونهم اختصاص یک زیر برنامه در هنگام رویداد تطابق است (در صورت فعال بودن).
این قسمت دقیقا شبیه اختصاص زیر روال برای قسمت های دیگه است.اگر مایلید بگید اون رو هم توضیح بدم.

اگر سوالی داشتید هم بپرسید.

cmuiran
17-09-2011, 23:09
سلام اقا شایان نیکزاد نمیدونم چطور تشکر کنم
ممنون و تشکر
سوال داشتم حتما میپرسم

shayanmelody
17-09-2011, 23:23
سلام اقا شایان نیکزاد نمیدونم چطور تشکر کنم
ممنون و تشکر
سوال داشتم حتما میپرسم


خواهش میکنم ، وظیفه بود .
راستیتش تصمیم داشتم زودتر از اینها این مطالب رو قرار بدم ، اما یه جور حس تنبلی نذاشت ! شما که سوال پرسیدی مصمم شدم که قرار بدم.

در ضمن ، فردا بردم میرسه دستم ، در اولین فرصت برنامه برای قسمت کانتر هم مینویسم و میزارم.

cmuiran
17-09-2011, 23:32
خواهش میکنم ، وظیفه بود .
راستیتش تصمیم داشتم زودتر از اینها این مطالب رو قرار بدم ، اما یه جور حس تنبلی نذاشت ! شما که سوال پرسیدی مصمم شدم که قرار بدم.
در ضمن ، فردا بردم میرسه دستم ، در اولین فرصت برنامه برای قسمت کانتر هم مینویسم و میزارم.
اقا شایان خجالت میدی
تشکر

mzarkoob
09-11-2011, 12:44
با سلام
من یه سوال داشتم.
در این مد تایمر می توان با برنامه ای نوشت که موج مربعی بهمون بده مثل چیزی که آقا شایان اینجا (You can see links before reply) گذاشتند . ولی با توجه به فرکانس 72 مگی که هسته داره انگار حداکثر فرکانسی که ازش میشه در یک پایه تولید کرد بیشتر از 60 کیلو هرتز نمیشه! اگه درسته راه حلی داره؟

alimicro
09-11-2011, 13:07
آقای نیکزادیکی ازجوانان فوق العاده عزیزومهربان است وهچنین خیلی استادودارای پشت کاروباحوصله من خودم خیلی به ایشان مدیون هستم انشاالله خداحفظش کندودست حق نگهدارش باشدامیدوارم بابزرگواری خودش ماراببخشد کارهایش واقعاستودنیست

shayanmelody
11-11-2011, 12:53
از همه دوستانی که لطف دارن به من تشکر میکنم.

shayanmelody
11-11-2011, 12:57
با سلام
من یه سوال داشتم.
در این مد تایمر می توان با برنامه ای نوشت که موج مربعی بهمون بده مثل چیزی که آقا شایان اینجا (You can see links before reply) گذاشتند . ولی با توجه به فرکانس 72 مگی که هسته داره انگار حداکثر فرکانسی که ازش میشه در یک پایه تولید کرد بیشتر از 60 کیلو هرتز نمیشه! اگه درسته راه حلی داره؟


سلام.
اینچیزی که شما میخواهید نیاز به نوشتن برنامه خاصی نداره ، فقط شما کاربرد رجیستر آخر رو متوجه بشید با مقداردهی مناسب میتونید به صورت سخت افزاری اینکار رو انجام بدید.
اما اگر به اون دوپایه دسترسی ندارید میتونید به صورت نرم افزاری تو زیر روال وقفه برنامش رو بنویسید.
در مورد فرکانس چجوری به 60 کیلو رسیدید ؟!

mzarkoob
12-11-2011, 00:06
در مورد فرکانس چجوری به 60 کیلو رسیدید ؟!
اگه T0MR0=10 در این صورت تا برنامه رفته داخل زیر روال وقفه و داره جهت پایه را عوض میکنه هنوز بیرون اومده یا نیامده! یه وقفه دیگه میاد چون دوباره تایمر به مقدار T0MR0 رسیده است . در این حالت من در خود debug کیل که اندازه گرفتم حدود 60 کیلو بود. البته Pclk=Cclc/4 .
حالا چجور میشه نرم افزاری کاری کرد که به راحتی این افزایش پیدا کنه؟

mzarkoob
13-11-2011, 12:18
شما کاربرد رجیستر آخر رو متوجه بشید با مقداردهی مناسب میتونید به صورت سخت افزاری اینکار رو انجام بدید.

من روی رجیستر T0EMR هم کار کردم تا از قابلیت های اون هم استفاده کنم. با توجه به مطالب گفته شده خروجی آن برای تایمر صفر[MAT0[0 و [MAT0[1 است، ;که بشه پایه P1.28 و P1.29 یا P3.25 و P3.26 . رجیسترش هم فعال کردم : T0EMR=0x30 ولی خروجی نداریم ! نمی دونم مشکل کار کجاست؟

shayanmelody
13-11-2011, 12:22
من روی رجیستر t0emr هم کار کردم تا از قابلیت های اون هم استفاده کنم. با توجه به مطالب گفته شده خروجی آن برای تایمر صفر[mat0[0 و [mat0[1 است، ;که بشه پایه p1.28 و p1.29 یا p3.25 و p3.26 . رجیسترش هم فعال کردم : T0emr=0x30 ولی خروجی نداریم ! نمی دونم مشکل کار کجاست؟


شما رجیستر pinsel رو هم مقداردهی کردی ؟!

mzarkoob
13-11-2011, 20:35
شما رجیستر pinsel رو هم مقداردهی کردی ؟!

نه ii998)ii998)ii998)!!!
PINSELL3 را تنظیم کردم درست شد:018:

shayanmelody
13-11-2011, 22:20
بسیار عالی !
شیرینی ما فراموش نشه ...

m410
27-11-2011, 14:31
سلام ...اقا یه دنیا ممنون که وقت گذاشتینو توضیح دادین.....

اما من کلا در مورده کارکرد تایمرا مشکل دارم .... اگه میشه یه توضیح بدین که به طور کلی چه طری کار میکنند و پیکر بندیه کلشون چه طوریه ....مثلا همون مثالی که برا تایمر 0 زده بودید اصلا وقفه انجا چیکارست irq چیه دیگه ؟ و نهایتا این که میکرو چه طوری هم حلقه ی وایلو میره هم تایمرو...؟

یه دنیا تشکر....

mzarkoob
27-11-2011, 15:57
سلام ...اقا یه دنیا ممنون که وقت گذاشتینو توضیح دادین.....

اما من کلا در مورده کارکرد تایمرا مشکل دارم .... اگه میشه یه توضیح بدین که به طور کلی چه طوری کار میکنند و پیکر بندیه کلشون چه طوریه ....مثلا همون مثالی که برای تایمر 0 زده بودید اصلا وقفه انجا چیکارست irq چیه دیگه ؟ و نهایتا این که میکرو چه طوری هم حلقه ی while میره هم تایمرو...؟
یه دنیا تشکر....
سلام. ببینید تایمر به صورت ساده به این صورت است که شما با یه سری رجیستر تنظیمات اولیه رو انجام میدید. به این صورت که در برنامه اصلی شمارنده تایمر را ریست می کنید و مشخص می کنید تا کجا(رجیستر مقایسه) باید شمارنده تایمرتان بشمارد. بلافاصله بعد از اینکه شمارنده را فعال کردید شروع می کند به شمارش تا برسد به این رجیستر مقایسه. تا رسید مقدار تایمر ، ریست شده و یک وقفه به وجود می آید(با تنظیمات این کار را انجام داده ایم). وقتی وقفه می آید برنامه تشریف میبره در زیر روال وقفه(void timer0_isr(void) __irq)، که البته این یک توفیق اجباریه! حالا که این همه راه برنامه اومده در این زیر روال برای اینکه ضایع نشه میتونیم یک کاری هم بدیم دستش که انجام بده و دست خالی نره!! و در ضمن باید در همین جا پرچم وقفه را هم غیر فعال کنه. بعد میره در ادامه برنامه اصلی.
این نکته را بگم تا شمارنده فعال شد به ازای هر 4( یا 1 یا 2 یا 8 ...) کلاکی که می آید شمارش انجام میشه. برای همینه که در برنامه اصلی باید یک حلقه while باشه تا مرتب این کلاک بیاد. و گر نه برنامه تموم میشه و ... . یعنی تا زمانی که برناممون کار میکنه تایمر اگه فعال باشه کار میکنه.
بعد از اینکه وقفه اومد و تایمر هم ریست شد چون تایمر فعال است دست از شمردن برنمی داره و در همون حینی که در زیرروال وقفه است هم به کارش ادامه میده تا دوباره برسه به مقدار رجیستر مقایسه(در این حین صد البته می تونه زیر روال بیرون اومده باشه و در برنامه اصلی در حلقه while در حال انجام سایر کارها و البته انتظار برای سر رسیدن وقفه باشه
برای وقفه ها هم برید توضیحات آقای تروشه را بخوانید.
سوالی بود در خدمتیم.

m410
27-11-2011, 17:23
ممنون لطف کردین .... توضیحات ایشون رو پیدا نکردم ...باید کجا دنبالش بگردم؟

حالا یه مساله ی دیگه زمانو باید چطوری حساب کنم ؟

mzarkoob
27-11-2011, 20:04
ممنون لطف کردین .... توضیحات ایشون رو پیدا نکردم ...باید کجا دنبالش بگردم؟

حالا یه مساله ی دیگه زمانو باید چطوری حساب کنم ؟
با یه کم سرچ ...:0013:
برای وقفه اینجا (You can see links before reply) هست.
برای زمان اینجا (You can see links before reply) گفته. البته برای pwm هست ولی فکر کنم مثل هم باشه. در مد شبیه سازی در خود کیل زمان را بهتون نشون میده.

mzarkoob
27-11-2011, 23:42
با سلام
این یه مثال ساده هست که با نگه داشتن کلید sw1 روی برد توسط تایمر led1روی برد چشمک میزنه. برای شبیه سازی در کیل باید تیک ورودی p2.11 را مطابق عکس داخل فایل برداریم تا کار کند. برنامه را که استپ کنیم میشه فرکانس را محاسبه کرد. حالا می تونیم یک برنامه دیگه هم داخل برنامه اصلی بنویسیم که در کنار اینکه اون داره انجام میشه led1 هم چشمک میزنه...

mzarkoob
09-12-2011, 00:18
در این مد تایمر می توان با برنامه ای نوشت که موج مربعی بهمون بده مثل چیزی که آقا شایان اینجا (You can see links before reply) گذاشتند . ولی با توجه به فرکانس 72 مگی که هسته داره انگار حداکثر فرکانسی که ازش میشه در یک پایه تولید کرد بیشتر از 60 کیلو هرتز نمیشه! اگه درسته راه حلی داره؟

خیلی برام سواله که حداکثر فرکانسی که میشه از میکرو با استفاده از یک تایمر بگیریم چنده؟ من تنظیمات startup را تغییر دادم به طوری که حداکثر فرکانس تولید بشه.در این حالت CCLK شد 264مگا هرتز . ولی عجیبه تا شروع به دیباگ می کنم یعنی تا run را می زنم میپره رو 24 مگ ! در اینحالت فرکانس پایه خروجی میکرو شد حدود 2 مگ.

البته با تنظیمات defult این مقدارCCLK،برابر 48 مگ هست که تا استارت کار را میزنم میشه 8 مگ. این چه دلیلی داره؟

armstk
09-12-2011, 03:30
خیلی برام سواله که حداکثر فرکانسی که میشه از میکرو با استفاده از یک تایمر بگیریم چنده؟ من تنظیمات startup را تغییر دادم به طوری که حداکثر فرکانس تولید بشه.در این حالت CCLK شد 264مگا هرتز . ولی عجیبه تا شروع به دیباگ می کنم یعنی تا run را می زنم میپره رو 24 مگ ! در اینحالت فرکانس پایه خروجی میکرو شد حدود 2 مگ.
البته با تنظیمات defult این مقدارCCLK،برابر 48 مگ هست که تا استارت کار را میزنم میشه 8 مگ. این چه دلیلی داره؟
از چه میکرویی استفاده میکنین؟
حداکثر فرکانس قابل تامین از یک پین io بستگی به فرکانس همون پین داره , مثلا در sam64 حداکثر فرکانس قابل تولید 18 مگا هرتز هستش , البته باید کلاک سیستم رو جوری تنظیم کنیم که بعد از pll , کلاکی که به io میرسه هم 18 مگ باشه

mzarkoob
09-12-2011, 14:12
از چه میکرویی استفاده میکنین؟
حداکثر فرکانس قابل تامین از یک پین io بستگی به فرکانس همون پین داره , مثلا در sam64 حداکثر فرکانس قابل تولید 18 مگا هرتز هستش , البته باید کلاک سیستم رو جوری تنظیم کنیم که بعد از pll , کلاکی که به io میرسه هم 18 مگ باشه
با سلام
از برد کویر lpc2378 استفاده می کنم.
یعنی با همین مد تایمر که تایمر بشماره و وقفه بده و بره در زیر روال، سریعا در مد EMR فقط جهت پایه را خودش عوض کنه میشه 18 مگ !! مطمئنید؟ شما در عمل تست گرفتید؟ من بیشتر از 4 مگ نتونستم خروجی بگیرمii998)(البته در سیمولیک)
رابطه اش فکر کنم این باشه دیگه :
CCLK=PLL_CLK/CCLKSEL
CCLKSEL حداقل 2 میتونه باشه. PLL_CLK می تونه 528 مگ باشه(HCLK) .پس CCLK=264 MHz . این فرکانس اعمالی به هسته هست.

mzarkoob
10-12-2011, 11:44
با سلام
نمی دونم کسی تا حالا در عمل فرکانس هسته lpc2378 را بالا برده یا نه. ولی برای یه برنامه تایمر ساده که قبلا توصیف شد به ازای این تنظیمات در عمل فرکانس خروجی بیشتر از 700 کیلو نمی شه!! :

You can see links before reply

و اگه MSEL را از 16 بیشتر بذاریم یا CCLKSEL را از 3 کمتر بذاریم و برنامه را بریزیم در برد کویر، دیگه نمی تونیم سیگنالی در اسیلوسکپ ببینیم! :unh:(اسیلوسکپ تا 7 مگ هم می دونم که نشون میده)حالا اگه مثلا CCLKSEL را 2 بذاریم و پروگرام کنیم و چون دیدیم چیزی نداریم دوباره CCLKSEL را برش گردونیم به 3 و بخواهیم پروگرام کنیم با جیلینگ بهمون پیغام میده که فکر کردی خیال کردی!!!:


You can see links before reply

نمی دونم این بردها بیش از این جواب نمی ده یا ایراد جای دیگه هست. ولی در سیمولینک فکر کنم تا 4 مگ بره. حالا نمی دونم چطوری آقای armstk تا 18 مگ رفتند؟
اساتید نظری ندارند؟؟؟؟؟؟؟؟؟؟؟

mzarkoob
10-12-2011, 23:22
یه جای کار لنگ میزنه!

در راهنمای برد LPC2378 کویر نوشته:

ویژگی ها:

استفاده از ARM7TDMI به عنوان پردازنده اصلی با فرکانس کاری بالای 72 مگاهرتز (صفحه 4)

از طرفی در نرم افزار کوچکی (You can see links before reply)که آقای تروشه گذاشتند هر وقت فرکانس هسته CCLK از 72 بیشتر بشه خطا میده. یعنی تنظیمات را هر چی بخواهیم بذاریم، نبایدفکانس هسته از 72 مگاهرتز بیشتر بشه و گر نه...


You can see links before reply


حالا اینا یه طرف، من گذاشتم :

MSEL=16, NSEL=1, cclksel= 3 --> CCLK = 128 MHz;
که ریختم در میکرو 700 کیلو هرتز هم پالس داد !!!ii998) حالا ما باید کدوم یک از اینها را باور کنیم؟

armstk
11-12-2011, 10:01
با سلام
از برد کویر lpc2378 استفاده می کنم.
یعنی با همین مد تایمر که تایمر بشماره و وقفه بده و بره در زیر روال، سریعا در مد EMR فقط جهت پایه را خودش عوض کنه میشه 18 مگ !! مطمئنید؟ شما در عمل تست گرفتید؟ من بیشتر از 4 مگ نتونستم خروجی بگیرم(البته در سیمولیک)
رابطه اش فکر کنم این باشه دیگه :
CCLK=PLL_CLK/CCLKSEL

CCLKSEL حداقل 2 میتونه باشه. PLL_CLK می تونه 528 مگ باشه(HCLK) .پس CCLK=264 MHz . این فرکانس اعمالی به هسته هست.
سلام
در سیمولیک بعد میدونم بشه فرکانس بالایی از خروجی گرفت , البته من دقیقا نفهمیدم که منظورتون از سیمولیک دیباگ میکنین؟ یا این که از سیمولاتور کیل استفاده میکنین؟

با سلام
نمی دونم کسی تا حالا در عمل فرکانس هسته lpc2378 را بالا برده یا نه. ولی برای یه برنامه تایمر ساده که قبلا توصیف شد به ازای این تنظیمات در عمل فرکانس خروجی بیشتر از 700 کیلو نمی شه!! :
من قبلا جاهیی خونده بودم که حداقل تا 20 درصد فرکانس اصلی کلاک سیستم میشه cpu رو اور کلاک کرد , ولی در عمل تست نکردم , حقیقتش رو هم بگم من هیچ کدوم از این چیز هایی که میگم رو تست نکردم متاسفانه
من الان فقط به sam64 و sam256 دسترسی دارم ! اگر میخاین با اون تست کنم؟


و اگه MSEL را از 16 بیشتر بذاریم یا CCLKSEL را از 3 کمتر بذاریم و برنامه را بریزیم در برد کویر، دیگه نمی تونیم سیگنالی در اسیلوسکپ ببینیم! (اسیلوسکپ تا 7 مگ هم می دونم که نشون میده)حالا اگه مثلا CCLKSEL را 2 بذاریم و پروگرام کنیم و چون دیدیم چیزی نداریم دوباره CCLKSEL را برش گردونیم به 3 و بخواهیم پروگرام کنیم با جیلینگ بهمون پیغام میده که فکر کردی خیال کردی!!!:
این ارور رو منم زمانی وقتی که جانپر jtagsel رو میزاشتم (صفرش میکردم)همین ارور رو میداد !
ولی هر چی که هست این اروروی که میده مربوط به این هست که نمیتونه هسته رو نشاسایی کنه

mzarkoob
11-12-2011, 15:23
خیلی ممنون که پیگیری می کنید. داشتم دیگه ناامید می شدم.

یا این که از سیمولاتور کیل استفاده میکنین؟
بله از سیمولاتور کیل برای دیدن فرکانس استفاده کردم.


حقیقتش رو هم بگم من هیچ کدوم از این چیز هایی که میگم رو تست نکردم متاسفانه
من الان فقط به sam64 و sam256 دسترسی دارم ! اگر میخاین با اون تست کنم؟

خیای ممنون میشم یه تستی بکنید. می خواهیم با یک تایمر ساده(یا هر روش دیگه) بیشترین فرکانس را تولید کنیم.



این ارور رو منم زمانی وقتی که جانپر jtagsel رو میزاشتم (صفرش میکردم)همین ارور رو میداد !
ولی هر چی که هست این اروروی که میده مربوط به این هست که نمیتونه هسته رو نشاسایی کنه
در این حالت که قاط میزنه، فقط با خود نرم افزار جیلینگ (seger) مجددا میشه برنامه ای بریزم در میکرو

چیزی که باعث تعجبم شده اینه که در کاتالوگ میکرو نوشته حداکثر فرکانس اعمالی به هسته 72 مگ. همان طور که گفته شد من با تنظیماتی که کردم فرکانس هسته شد :CCLK = 128 MHz
و روی برد هم کار میکرد!! یا کمپانی اشتباه در کاتالوگش نوشته یا من یه جایی اشتباه کردم یا میکرو من یه چیز استثناست ii998)
در هر صورت :cry: شاید هم :brk:

pooriya
11-12-2011, 19:06
چیزی که باعث تعجبم شده اینه که در کاتالوگ میکرو نوشته حداکثر فرکانس اعمالی به هسته 72 مگ. همان طور که گفته شد من با تنظیماتی که کردم فرکانس هسته شد :CCLK = 128 MHz
و روی برد هم کار میکرد!! یا کمپانی اشتباه در کاتالوگش نوشته یا من یه جایی اشتباه کردم یا میکرو من یه چیز استثناست ii998)
در هر صورت :cry: شاید هم :brk:


سلام

ببینین حداکثر فرکانس این نیست که دیگه بیشتر از اون عدد اعلام شده نتونین بدین به هسته،بلکه منظور اینه که اگه بیشتر از کلاک اعلام شده توسط تولید کننده به میکرو بدین عملکرد میکرو تو اون فرکانس کاری تضمین نمیشه.یعنی ممکنه واحدی مثل timer همون اول کار یا وسطا قاط بزنه.

بنده هم xmega رو تا 128mhz و هم lpc1768 رو اورکلاک کردم ولی واحدی مثل پورتها درست عمل کرده ولی قسمت timer کلا هنگ کرده و یا adc کلا قاط زده بود.

mzarkoob
11-12-2011, 20:09
بنده هم xmega رو تا 128mhz و هم lpc1768 رو اورکلاک کردم ولی واحدی مثل پورتها درست عمل کرده ولی قسمت timer کلا هنگ کرده و یا adc کلا قاط زده بود.
خوب اگه این جور باشه قابل توجیه ولی جالب اینه که من الان برای ایجاد پالس فقط از مد تایمر استفاده کردم و تا این حد فرکانس(128) هم قاط نزد!
من دیگه سر اینکه چرا از این فرکانس بیشتر بدیم دعوایی ندارم! چیزی که مهمه اینه که چجوری بتونم از این فرکانس هسته استفاده کنم و در پایه خروجی تا 5 مگ فرکانس داشته باشیم. با تایمر که من نتونستم. میشه این فرکانس هسته را مستقیما به یکی از پایه های میکرو متصل کرد؟! در مجله 9(صفحه )35 این طور اومده:
You can see links before reply
حالا ما فرکانس 36 مگ را نخواستیم .به همون 5 مگ هم قانعیم. ولی چطوری یه پالس با این فرکانس می تونیم داشته باشیم؟ نرم افزاری که انگار نمی شه. باید راه سخت افزاری داشته باشه
این تایپیک انگار حسابی از موضوع اصلیش منحرف شد!!

shayanmelody
11-12-2011, 22:52
این تایپیک انگار حسابی از موضوع اصلیش منحرف شد!!
:wink:

pooriya
12-12-2011, 14:17
سلام

دقیق اطلاع ندارم پایه ای برای این کار تو lpc2378 باشه یا نه.باید دقیق datashet رو مطالعه کرد.(تو xmega که هست :mrgreen:)

ولی با روش های زیر این کارو میشه کرد:

1-تنظیم واحد pwm تو فرکانس مورد نظر و ایجاد موج pwm روی پایه خروجی با پریود مورد انتظار.

2-تنظیم یکی از تایمر ها تو فرکانس مورد نظر و toggle کردن یکی از پایه ها دلخواه داخل روتین وقفه در زمان سر ریز تنظیم شده.

NXP (founded by Philips) LPC2378 Clock Source & Dividers Simulation Details (You can see links before reply)

mzarkoob
12-12-2011, 21:25
2-تنظیم یکی از تایمر ها تو فرکانس مورد نظر و toggle کردن یکی از پایه ها دلخواه داخل روتین وقفه در زمان سر ریز تنظیم شده.
NXP (founded by Philips) LPC2378 Clock Source & Dividers Simulation (You can see links before reply)

با سلام

همان طور که در پست های بالا اشاره کردم بنده از تایمر استفاده کرده ام .اشکال همین جا است. رجیستر مقایسه تایمر را حداقل مقدار یعنی "1" گذاشتم و فرکانس هسته را که 72 مگ تنظیم کردم را مستقیم به کلاک تایمر دادم. با آمدن 1 کلاک شمارنده به رجیستر مقایسه می رسد و p1.28 را toggle می کند. در این حالت بیشتر از 2.5 مگ عایدمان نشد! من به زحمت یه چرتکه از یه جایی پیدا کردم حساب کردم با فرکانس هسته 72 مگ باید راحت 5 مگ را به ما بده. نمی دونم چرا نمیشه:sa:. شاید هم این بنده خدا، تایمر را میگم، بیشتر از این وسعش نمی کشه! برای همین میگم آیا راه حل دیگه ای هست؟
شاید هم این همه میگند آرم فرکانسش بالاست و قدرت پردازشش زیاده بولوف باشه!!(خدا نکنه، وگر نه باید برم یکی دیگه بخرم!:mrgreen:) اگه بیشتر این نشه بهمون پالس بده فایده نداره که! یه تعداد از این کلاک های هسته این وسط مفقودالاثر هستند. نمی شه که 72 مگ به تایمر کلاک بدی، اون وقت 2.5 مگ خروجی بیشتر نداشته باشی8O. میشه؟؟؟؟؟؟؟ اساتیدی که این همه تایپیک میزنند که آرم فلان است و فلان .... نظری ندارن؟


NXP (founded by Philips) LPC2378 Clock Source & Dividers Simulation (You can see links before reply)
خوب شد این لینک را دادید یادم افتاد این ایراد را هم موقع دیباگ مطرح کنم. تصایر را در pdf ضمیمه کردم. دلیل مواردی که با نوشته قرمز مشخص کردم را در موقع دیباگ نمی دونم.

Aghaeifar
12-12-2011, 21:36
حداکثر توان CPU هست که اعلام شده 72 مگ هست در برگه اطلاعاتی چیزی از ماکس فرکانس تایمر و ... نیست. کلا این peripheral های جانبی نمی تونن در فرکانس بالا کار کنند برای همین این همه پل و مقسم و... گذاشتن.
شما بیا فقط دستی پایه های پشت سر هم 1 و 0 کن. من کردم در بهترین حالت 5.5 مگ گرفتم فقط.

یه کار کن. شما که داری میگی 2.5 مگ خروجی میگیری بیا طوری تایمر رو تنظیم کن که 2.5 مگ تولید کنه در خروجی. نتیجه خروجی رو اینجا بذار یه مقایسه کنیم.

mzarkoob
12-12-2011, 22:29
شما بیا فقط دستی پایه های پشت سر هم 1 و 0 کن. من کردم در بهترین حالت 5.5 مگ گرفتم

بله امروز که من داشتم با اسکوپ نتایج را عملی میدیدم این کار را هم کردم. فایل ضمیمه را ببینید. خروجی 4 مگ میشه.


یه کار کن. شما که داری میگی 2.5 مگ خروجی میگیری بیا طوری تایمر رو تنظیم کن که 2.5 مگ تولید کنه در خروجی. نتیجه خروجی رو اینجا بذار یه مقایسه کنیم.
خروجی تایمرم در بهترین حالت در پایه p1.28 که toggle میشه 2.5 مگ است. تازه وقفه راه هم غیر فعال کردم که دیگه نره در زیر روال وقفه. تا سر ریز میشه خودش toggle میکنه. قفه مال وقتی است که بخواهیم وقتی سرریز شد به صورت نرم افزاری کاری انجام بدیم.

Aghaeifar
13-12-2011, 01:02
خروجی تایمرتون که در بهترین حالت ذکر کردید قبلا، عرض شد شما فرض کنید ازتون خواستم موج 2.5 مگ تولید کنید. تایمرتون رو طوری پیکربندی کنید که 2.5 مگ تولید کنه (با تنظیم رجیستر تطبیق و پیش تقسیم کننده ها). حالا در اسکوپ یا هر چیز دیگه ببینید مقدار تولید شده 2.5 مگ هست یا برای چنین حالتی هم متفاوت هست؟

farzadsw
13-12-2011, 14:18
سرعت پردازنده یه موضوع هست و سرعت PIO یه موضوع دیگه ! سرعت PIO به باس واسط بین پردازنده و همچنین تکنولوژی ساخت خود PIO بستگی داره .
میکروهای lpc دونوع رجیستر برای pio دارند . رجیستر های قدیمی مثل IOSET / IOCLR ، و یک سری هم رجیستر جدید مثل : FIOxDIR و FIOxSET وFIOxCLR .
رجیستر های قدیمی سرعتشون کم تره و نهایتا با فرکانس حدود 3.5 مگ میتونن تغییر پیدا کنن. رجیستر های جدید (که باس اتصال به پردازنده اونا با قدیمیه فرق داره) سرعتشون بیشتره و تا حدود 15 مگ می تونن پایه های میکرو رو تغییر بدن .
درضمن برای استفاده از رجیستر های سریع (FIO ) باید تو رجیستر SCS مشخص کنید که واحد GPIO از حالت سریع استفاده کنه (مقدار بیتش 1 تنظیم بشه)

mzarkoob
13-12-2011, 14:31
تایمرتون رو طوری پیکربندی کنید که 2.5 مگ تولید کنه (با تنظیم رجیستر تطبیق و پیش تقسیم کننده ها). حالا در اسکوپ یا هر چیز دیگه ببینید مقدار تولید شده 2.5 مگ هست یا برای چنین حالتی هم متفاوت هست؟
بله . الان متوجه شدم منظورتان را. در حالت حداکثری چون مستقیما فرکانس هسته را به تایمر0 اعمال می کردیم قبل از استارت دیباگ با خود کیل در قسمت Peripheral Clock Selection ،فرکانس تایمر را 72 مگ نوشته. حالا طبق گفته شما باید اینجا بشه 2.5 مگ :


MSEL=12; NSEL=1 ---> PLL_CLK=288 MHz;

CCLKSEL=27; ---> CCLK=PLL_CLK/CCLKSEL=10.66 MHz

Pclk = Cclk/4= 2.66 MHz
با این تنظیمات حداکثر فرکانس toggle شده میشه 119 کیلو. اگه اشتباهه بگید. حالا چه نتیجه ای میشه گرفت؟

mzarkoob
13-12-2011, 16:30
درضمن برای استفاده از رجیستر های سریع (FIO ) باید تو رجیستر SCS مشخص کنید که واحد GPIO از حالت سریع استفاده کنه (مقدار بیتش 1 تنظیم بشه)
در برنامه تایمر که به ساده ترین صورت نوشته شده این تنظیم SCS=1 را انجام داده ام. بذارید این برنامه ساده را بذارم:

int main(){
SCS=1;

//timer0 setting

T0CTCR=0; // set T/C for Timer
T0PR=0; // no prescale
T0MR0=1;
T0MCR=2; //when T0MR0 is match with T0TC,reset counter(T0TC)
T0EMR=0x30; //when T0MR0 is match with T0TC,toggle MAT0.0

//LEDs setting
PINSEL3=0x3000000; //P1.28

//main loop
while(1){
T0TCR=2;
T0TCR=1; // reset counter , disable counter
while(1){

}
}
}
تنظیمات pllحداکثری هم تا حالا n بار گفتم. خوب همان طور که ملاحظه می کنید ما از همان ابتدا خروجی را در حالت سریع می گذاشتیم. با این اوصاف بیشتر از 2.5 مگ بهمون نمیده. حتی با این دستور هم بیشتر از 4 مگ بهمون نمی ده:



while(1){
set_led1;
set_led2;
clr_led1;
}


set_led2 برای اینه که یه زمانی کوتاه بگذره بعدled1 ریست بشه. البته ما می خواهیم از مد سخت افزاری استفاده کنیم.

حالا با این مطالب گفته شده برای استفاده از حالت سریع که عنوان کردید، تنظیم دیگری هست که از قلم افتاده؟
با تشکر

Aghaeifar
13-12-2011, 18:05
رجیستر های قدیمی سرعتشون کم تره و نهایتا با فرکانس حدود 3.5 مگ میتونن تغییر پیدا کنن. رجیستر های جدید (که باس اتصال به پردازنده اونا با قدیمیه فرق داره) سرعتشون بیشتره و تا حدود 15 مگ می تونن پایه های میکرو رو تغییر بدن .
این چیزی هست که در دیتاشیت نوشته. من با نوع Fast و در حالتی که مقسم PCLK برابر یک بود و PLL روشن بود. یعنی حالتیکه کلاک ورودی به واحد PIO برابر 60 مگ بود ماکس کلاکی که گرفتم 5.5 مگ بود انتظارم 15 مگ بود! ولی نشد.



با این تنظیمات حداکثر فرکانس toggle شده میشه 119 کیلو. اگه اشتباهه بگید. حالا چه نتیجه ای میشه گرفت؟
گفته ی من این بود که طوری PCLK و رجیستر تطابق رو تنظیم کن که در خروجی تایمر که داره تاگل میشه فرکانس 2.5 مگ بدست بیاد. بعد ببین واقعا 2.5 مگ شده؟ نه اینکه خود PCLK رو 2.5 مگ کنی.

mzarkoob
13-12-2011, 19:11
گفته ی من این بود که طوری pclk و رجیستر تطابق رو تنظیم کن که در خروجی تایمر که داره تاگل میشه فرکانس 2.5 مگ بدست بیاد. بعد ببین واقعا 2.5 مگ شده؟
آره دیگه. 2.5 مگ میشه واقعا . این چیزایی که گفتم تا حالا چند مگ شده و .. را همه از روی اسیلوسکوپ دیدم. وگر نه که از روی سیمولینک کیل خیلی چیزها را میشه دید!! مثلا با ست و ریستی که در پست قبل گذاشتم در کیل 4.7 مگ نشون میداد در حالی که در عمل 4 مگ بیشتر نبود.:sa:

mzarkoob
14-12-2011, 22:17
رجیستر های قدیمی سرعتشون کم تره و نهایتا با فرکانس حدود 3.5 مگ میتونن تغییر پیدا کنن. رجیستر های جدید (که باس اتصال به پردازنده اونا با قدیمیه فرق داره) سرعتشون بیشتره و تا حدود 15 مگ می تونن پایه های میکرو رو تغییر بدن .

با توجه به اینکه بیان می شود در مد سریع آرم باید این سرعت را داشته باشد و ما هم تنظیماتی که عقلمون میرسیده برای این مد انجام دادیم و بیشتر از 4-5 مگ بهمون فرکانس خروجی نمی ده می توان نتیجه گرفت که این میکروlpc2378 اصلا Fast Speed نداره!! :xو جزء همون نسلهای قدیمی تره که از باس کم سرعت APB استفاده می کند. اگه اشتباه می کنم تو رو خدا تعارف نکنید. بگینا!!!

mihman
14-12-2011, 22:30
سلام.شرمنده لختکی(!!!!!) میپرم وسط بحث.یعنی با این lpc2378 بیش از 72 مگاهرتز نمیشه کار کرد؟؟؟

mzarkoob
15-12-2011, 10:44
یعنی با این lpc2378 بیش از 72 مگاهرتز نمیشه کار کرد؟؟؟
نخیر! منظور اینه که فرکانس هسته 72 مگ هست و در مد سریع ما توقع فرکانس 15 مگ از خروجی پایه ها داریم ولی بیستر از 4-5 مگ نمیشه!! با تایمر بیشتر از 2.5 مگ نمیشه.:baad: در پست های قبلی این موضوع گویاست دیگه!!

mihman
15-12-2011, 12:35
نخیر! منظور اینه که فرکانس هسته 72 مگ هست و در مد سریع ما توقع فرکانس 15 مگ از خروجی پایه ها داریم ولی بیستر از 4-5 مگ نمیشه!! با تایمر بیشتر از 2.5 مگ نمیشه.:baad: در پست های قبلی این موضوع گویاست دیگه!!
یعنی اگه حتی تنظیمات pll (اعداد داخل فایل startup) را طوری قرار بدیم که فرکانس هسته 288 مگاهرتز بشه،باز هم فرکانس هسته بیش از 72 مگا هرتز نمیشه؟؟؟؟(حالا فعلا کاری به مد سریع و ... نداریم)

mzarkoob
27-12-2011, 14:27
خوب انگار باید موضوع بالا را بیخیال بشیم بریم سر یه سوال مرتبط با تایپیک تایمر و کانتر!
در مورد تایمر از همون اول یه چیزی ذهنم را مشغول کرده بود که الان محسوس باهاش مواجه شدم.و اون هم حداقل مقداریه که میشه برای MR0 قرار داد. البته اگه بخواهیم از وقفه تایمر استفاده کنیم و این زیرروالش هم یه کاری انجام بدیم. مثلا تعداد دفعاتی که toggle میشه را بشماره. خوب اگه در برنامه اصلی شرط کنیم که تعداد مشخصی تاگل انجام بشه، اگه MR0 از یک مقداری کمتر بشه میبینیم که برنامه میره در زیر روال و دیگه در بیا هم نیست. چون تا بخواد بیاد بیرون وقفه بعدی اومده و این شرط که اگه این تعداد پالس اومد تایمر را متوقف کن در برنامه اصلی هیچ گاه دیگه اجرا نمیشه. خوب حالا فکر می کنید چاره چیه؟ آیا تایمر مدی داره که تا این تعداد پالس پایه تاگلمون داد، تایمر را متوقف کنه؟ من که هر چی بررسی کردم ندیدم چیزی!

mzarkoob
02-01-2012, 16:30
آیا تایمر مدی داره که تا این تعداد پالس پایه تاگلمون داد، تایمر را متوقف کنه؟ من که هر چی بررسی کردم ندیدم چیزی!

در پست قبلی مطرح کردم که چگونه می شود موقعی که از تایمر داریم استفاده می کنیم ، هر بار که خروجی mat0.0 تاگل شد، یک شمارنده سخت افزاری داشته باشیم که یکی بشمارد و تا وقتی به حدی رسید مطلع شویم. خوب ظاهرا این امکان در تایمر کانتر فراهم نشده! به ذهنم رسید تایمر0 را فعال و تایمر 2 را به مد کانتر تغییر دهیم و خروجی mat0.0 را به ورودی cap2.0 وصل کنم. این به نظر شما عملیه؟ انگار یه جایی خوندم که اگه دو پایه از میکرو به هم وصل باشه میسوزه!!

mzarkoob
24-01-2012, 22:38
سلام
نمی دونم از دوستان تا حالا گذرشون به کار کردن با کانتر شماره 2 و 3 افتاده؟
من تایمرکانتر 1 را در مد کانتر راه اندازی کردم . مشکلی نداره. ولی نمی دونم چرا کانتر 2 و 3 کار نمی کنه!!! از همه عجیب تر اینکه وقتی دیباگ میکنی با جیلینک، موقعی که رجیستر های کانتر 2و3 را ست می کنی چیزی تغییر نمی کنه!! :xو این در حالی است که کانتر 1 در موقع ست کردن رجیستر هایش در دیباگ درست انجام می شود.
اینم برای تنظیم pinsel :
برای کانتر 2 پایه p0.4 را به عنوان ورودی کپچر CAP2.0 است که PINSEL0 = 0x50
برای کانتر 3 پایه p0.23 را به عنوان ورودی کپچر CAP3.0 است که PINSEL1 = 0xC000

mzarkoob
25-01-2012, 00:23
ای بابا عجب داستانیه!! تایمر 2 هم نمی دونم چرا کار نمی کنه. دیگه دلم می خواد :brk:
برای تایمر 2 داریم:

//----------------------- timer2 setting -----------------------------
T2CTCR = 0; // set T/C for Timer
T2PR = 0; // no prescale
T2MCR = 3; //when T2MR0 is match with T0TC , this register generate interrupt and reset counter(T0TC)
T2TCR = 2; // reset counter , disable counter
T2EMR = 0x30; //when T2MR0 is match with T0TC,toggle MAT0.0
//interrupt setting
VICIntSelect = 0; // set timer0 interrupt on IRQ mood
VICIntEnable = 1 <<26; // enable interrupt for timer2
VICVectAddr26 = (unsigned long) timer2_isr; //set label for jump when T0MR0 is match with T0TC
بعد از T2TCR=1; //enable timer 2 باید در دیباگ خط به خط که میره جلو شمارندش بشماره. ولی عین خیالش نیست!!

sadmonew
25-01-2012, 00:48
نمی دونم از دوستان تا حالا گذرشون به کار کردن با کانتر شماره 2 و 3 افتاده؟
سلا مهندس، شبتون بخير
فكر ميكنم انگار فقط خودتون گذرش به اين كانتر افتاده؟!؟!:mrgreen::mrgreen:
البته يكي از دوستان يه مطلبي گفت (فكر كنم آقا مهدي عبدالهي بود) گفت كه اين LPC2378(البته بعضياشون) كه تو ايرانه انگاري استوكه و مشكل سخت افزاري داره..
مثل اينكه يه قسمتاي ديگش هم مشكل فني داره.
البته ميتونيد با خودشون بيشتر صحبت كنيد.

mzarkoob
25-01-2012, 06:10
فكر ميكنم انگار فقط خودتون گذرش به اين كانتر افتاده؟!؟!:mrgreen::mrgreen:

واقعا؟؟!ii998)ii998)


البته يكي از دوستان يه مطلبي گفت (فكر كنم آقا مهدي عبدالهي بود) گفت كه اين LPC2378(البته بعضياشون) كه تو ايرانه انگاري استوكه و مشكل سخت افزاري داره..
مثل اينكه يه قسمتاي ديگش هم مشكل فني داره.

ای بابا به اینم میگند شانس! حالا چیکار باید کرد؟
یکی از دوستان گفت در RTX میشه تایمر مجازی درست کرد. این داستانش چطوریه؟ گذر کسی به اینجا نیوفتاده؟

sadmonew
25-01-2012, 13:34
یکی از دوستان گفت در RTX میشه تایمر مجازی درست کرد. این داستانش چطوریه؟ گذر کسی به اینجا نیوفتاده؟
سلام مهندس.:hi:
این قضیه تایمر مجاری رو میتونید بیشتر توضیح بدید. من چیزی در این مورد نمیدونم.
البته اگه وقتشو دارید میتونید راه اندازیش کنید؟ من یه مقدار کنکجاو شدم . باید چیز جالبی باشه.
البته میتونید رو منم حساب کنید. البته خودم هم روش کار میکنم.

mzarkoob
25-01-2012, 14:30
این قضیه تایمر مجاری رو میتونید بیشتر توضیح بدید. من چیزی در این مورد نمیدونم.

من خودم از آقای مزارعی شنیدم. حالا اینکه چه شکلیه و آیا اون چیزی که من مد نظرم هست یا نه را نمی دونم. امروز داشتم فایلش را مطالعه می کردم چیز خاصی دستگیرم نشد. عنوانی که میتونست داشته باشه Virtual Timer . که صفحه 27 فایل rl-arm_gs.pdf می باشد.
چیزی که من مد نظرم هست اینه که اگر در کاری خیلی بیشتر از 4 تا تایمر لازم باشه تکلیف چیه؟

mzarkoob
25-01-2012, 16:54
ما اومدیم یه کلکی بزنیم نشد!!
وقتی تایمر 0 تاگل میشد و میفرستادیمش! در روتین وقفه این کار را کردیم که یکی به T1TC که شمارنده کانتر1 هست اضافه می کنه. توقع بود تا کانتر1 که به این صورت زیادش کردیم تا به رجیستر مقایسه اشT1MR0 رسید وقفه بده. ولی اصلا به روی خودش هم نیاورد و هیچ اتفاقی نمی افته!! این در حالی است که وقتی MAT0.0 را به CAP1.0 متصل کرده بودم قشنگ کار می کرد. مثلا گفتیم این سیم اتصال را برداریم:sa:

mzarkoob
26-01-2012, 06:53
سلام
من تایمرکانتر 1 را در مد کانتر راه اندازی کردم . مشکلی نداره. ولی نمی دونم چرا کانتر 2 و 3 کار نمی کنه!!! از همه عجیب تر اینکه وقتی دیباگ میکنی با جیلینک، موقعی که رجیستر های کانتر 2و3 را ست می کنی چیزی تغییر نمی کنه!! :xو این در حالی است که کانتر 1 در موقع ست کردن رجیستر هایش در دیباگ درست انجام می شود.

فکر می کنید ایراد از کجا باشه؟ خودتون نگاه کنید:

You can see links before reply

امان از این تیک ها!! گذاشته ملتو سر کارii998)

M.ABDOLLAHI
26-01-2012, 08:21
سلام علیکم جمیعا دوستان گرام آقا من برای چندمین مرتبه انگار باید این کتابخانه ها را که درست کردم بگذارم
فقط بنده یک توضیح اجمالی مربوط به توابع GPIO بدم که دوستان سردرگم نشند

تابع TRIG_PORT برای تغییر وضعیت خروجی یکبیت خاص از یک پورت

تابع OUTPUT_PORT برای ورودی خروجی کردن یک بیت خاص از یک پورت

تابع PULL_PORT برای پول آپ یا پول دان یا NONE یک بیت خاص از یک پورت

تابع READ_PORT برای خواندن یک بیت خاص از یک پورت

و توابع دیگر که مربوط به امکانات دیگر سخت افزاری میشه از جمله UARTو SPI و SSP وSLEEPو ADC
این هم لینک دانلود:
You can see links before reply

این هم شکل تابعها:

void TRIG_PORT(unsigned char PORT,unsigned char NUM_BIT,unsigned char state);
void OUTPUT_PORT(unsigned char PORT,unsigned char NUM_BIT,unsigned char state);
void PULL_PORT(unsigned char PORT,unsigned char NUM_BIT,unsigned char state);
unsigned char READ_PORT(unsigned char PORT,unsigned char NUM_BIT);
//UART0
void CONFIG_UART0 (unsigned long bps, unsigned long VPBclk, unsigned char len, unsigned char stop, unsigned char parity, unsigned char parity_sel, unsigned char PORTNUM);
void sendline0 (unsigned char *BufferPtr, unsigned long length);
void getline0 (unsigned char *BufferPtr, unsigned long length, unsigned char sens_word);
unsigned char getchar0 (void);
void putchar0 (unsigned char cin);
unsigned char UART0_PutChar (unsigned char ch);
void UART0_PutString (unsigned char *str);
void UART0_Printf (const unsigned char *format, ...);
//UART1
void CONFIG_UART1 (unsigned long bps, unsigned long VPBclk, unsigned char len, unsigned char stop, unsigned char parity, unsigned char parity_sel, unsigned char PORTNUM);
void sendline1 (unsigned char *BufferPtr, unsigned long length);
void getline1 (unsigned char *BufferPtr, unsigned long length, unsigned char sens_word);
unsigned char getchar1 (void);
void putchar1 (unsigned char cin);
unsigned char UART1_PutChar (unsigned char ch);
void UART1_PutString (unsigned char *str);
void UART1_Printf (const unsigned char *format, ...);
//UART2
void CONFIG_UART2 (unsigned long bps, unsigned long VPBclk, unsigned char len, unsigned char stop, unsigned char parity, unsigned char parity_sel, unsigned char PORTNUM);
void sendline2 (unsigned char *BufferPtr, unsigned long length);
void getline2 (unsigned char *BufferPtr, unsigned long length, unsigned char sens_word);
unsigned char getchar2 (void);
void putchar2 (unsigned char cin);
unsigned char UART2_PutChar (unsigned char ch);
void UART2_PutString (unsigned char *str);
void UART2_Printf (const unsigned char *format, ...);
//UART3
void CONFIG_UART3 (unsigned long bps, unsigned long VPBclk, unsigned char len, unsigned char stop, unsigned char parity, unsigned char parity_sel, unsigned char PORTNUM);
void sendline3 (unsigned char *BufferPtr, unsigned long length);
void getline3 (unsigned char *BufferPtr, unsigned long length, unsigned char sens_word);
unsigned char getchar3 (void);
void putchar3 (unsigned char cin);
unsigned char UART3_PutChar (unsigned char ch);
void UART3_PutString (unsigned char *str);
void UART3_Printf (const unsigned char *format, ...);
//SSP0
void CONFIG_SSP0 (unsigned char BITS_DATA/*BITS_DATA*/,unsigned char MODE,unsigned char CPOL/*CPOL*/,unsigned char CPHA/*CPHA*/,unsigned char MS/*MASTER*/,unsigned char LBM/*LBM*/,unsigned int bps/*bps*/, unsigned int VPBclk/*VPBclk*/, unsigned char PORTNUM,unsigned char SS_ENABLE/*SS ENABLE*/);
unsigned int SSP0(unsigned int val);
//SSP1
void CONFIG_SSP1 (unsigned char BITS_DATA/*BITS_DATA*/,unsigned char MODE,unsigned char CPOL/*CPOL*/,unsigned char CPHA/*CPHA*/,unsigned char MS/*MASTER*/,unsigned char LBM/*LBM*/,unsigned int bps/*bps*/, unsigned int VPBclk/*VPBclk*/, unsigned char PORTNUM,unsigned char SS_ENABLE/*SS ENABLE*/);
unsigned int SSP1(unsigned int val);
//SPI
void CONFIG_SPI0 (unsigned char BITS_DATA/*BITS_DATA 8 to 16*/,unsigned char CPOL/*CPOL*/,unsigned char CPHA/*CPHA*/,unsigned char MS/*MASTER*/,unsigned char LSB_FIRST/*LSB_FIRST*/,unsigned int bps/*bps*/, unsigned int VPBclk/*VPBclk*/,unsigned char SS_ENABLE/*SS ENABLE*/);
unsigned int SPI0(unsigned int val);
//ADC
void CONFIG_ADC(unsigned char BITS_DATA/*BITS_DATA 3 to 10*/,unsigned int ADC_Clk/*ADC CLOCK*/,unsigned int VPBclk/*CPOL*/,unsigned char MODE);
unsigned int read_adc(unsigned char channel/*channel 0 to 7*/);
//SLEEP
void CONFIG_SLEEP(unsigned char MODE);

M.ABDOLLAHI
26-01-2012, 08:38
این یکی هم برای مرتبه دوم
سلام دوستان این هم دوتا برنامه یکی مربوط به برنامه SOUND که از تایمر 2حالتMATCH استفاده شده و دومین برنامه طریقه کار با وقفه تایمر 2 است که هر ثانیه یک LED که به P3.2 اتصال دارد TOGGLE میشود...
ه این فرمان SOUND از دو تا آرگومان داره یکی فرکانس تولیدی و یکی مدت زمانی که این فرکانس در خروجی تولید میشود بر حسب میلی ثانیه
T2MCR=0x10; با این خط از برنامه بارسیدن مقدار تایمر به مقدار رجیستر T2MR1 تایمر مقدارش صفر یا به عبارتی RESET میشود و از دوباره مقدارش زیاد میشود
T2EMR=0x000000C2; با این فرمان هم خروجی P4.29 که در اینجا میشود خروجی MATCH تایمر 2 در هنگام RESET شدن مقدار تایمر 2 بالعکس یا به عبارتی TOGGLE میشود
T2MR1=(18000000 / freq)/2; در این خط از برنامه هم 18000000 همان مقدار فرکانس تایمر 2 است که با این فرمول خاص میتوان فرکانسی را که در متغیر freq داریم را روی خروجی به نمایش در آورد با این روش شما میتوانید هر فرکانسی را که لازم دارید در خروجی قرار دهید در avr این کار توسط mode ctc تایمر ایجاد میگردد و خروجی مثلا OC1A و سخت افزار لازم برای خروجی هم که چیز خاصی نیست یک ترانزیستور منفی مثل 2N3904 که به صورت امیتر مشترک با یک مقاومت 2.2 کیلو به پایه P4.29 اتصال پیدا کرده و امیتر به زمین و کلکتور به منفی یک بیزر بدون اسیلاتور و مثبت بیزر به +5 ولت البته 3.3 ولت هم زیاد مشکلی نداره... در هر صورت موفق باشید....
You can see links before reply

sadmonew
26-01-2012, 13:37
سلام مهندس:hi:
آقا مهدی گل دستت درد نکنه.

mzarkoob
26-01-2012, 14:12
آقا مهدی گل دستت درد نکنه.
کدوم آقا مهدی؟ منو میگی:018: !!!
آقای عبدالهی این پست 62 (You can see links before reply) را هم تا حالا شده تست کرده باشید؟

M.ABDOLLAHI
26-01-2012, 14:23
کدوم آقا مهدی؟ منو میگی:018: !!!
آقای عبدالهی این پست 62 (You can see links before reply) را هم تا حالا شده تست کرده باشید؟

فکر کن جفتمون رو میگه چه فرقی میکنه:0013:
معلومه نمیشه چون در اثر اینکار وقفه تو وقفه رخ میده و برنامه درست کار نمیکنه...

mzarkoob
26-01-2012, 14:42
معلومه نمیشه چون در اثر اینکار وقفه تو وقفه رخ میده و برنامه درست کار نمیکنه...
بله. زمانی که برنامه در وقفه تایمر 0 است وقفه کانتر 1 میاد. ولی بازم بعد خروج از این زیر روال قاعدتا باید بره در اون زیر روال! حالا راه حلی نیست؟ این جوری که نمیشه:sa:

M.ABDOLLAHI
26-01-2012, 15:17
مگر اینکه یک متغیر علامت در وقفه بگذاری بعد در روال حلقه برنامه اون متغیر را چک کنی ....

sadmonew
26-01-2012, 15:25
سلام به مهندسین عزیز:hi:


ارسالی توسط mzarkoob You can see links before reply (You can see links before reply)
کدوم آقا مهدی؟ منو میگی:018: !!!

ارسالی توسط M.ABDOLLAHI You can see links before reply (You can see links before reply)
فکر کن جفتمون رو میگه چه فرقی میکنه:0013:

ما مخلص هر دوی شما هستیم.:0013:

ali-ma
30-03-2012, 17:58
سلام بچه ها.
من تمام این پست رو خوندم.یه نکاتی رو دیدم که بهش توجه نشده بود.
مثلا تو یکی از کد ها SCS=1 رو دیدم که اشتباهه.چون تنظیمات قسمت ویزارد به هم میریزه و ...
و یه سری از تنظیمات ویزارد زو هم دقت نکرده بودید.البته چیزایی بود که به عقل ناقص من رسید...:0013:
واس همین یه برنامه واس lpc2368 نوشتم،اما چون فعلا دسترسی به اسکوپ ندارم،نمیتونم تستش کنم.:sa:
اگه کسی علاقه داره،بگید که فایلاشو اپ کنم و خودتون تست کنید.
امیدوارم به دردتون بخوره.:mrgreen:

sadmonew
31-03-2012, 13:40
سلام بچه ها.
من تمام این پست رو خوندم.یه نکاتی رو دیدم که بهش توجه نشده بود.
مثلا تو یکی از کد ها SCS=1 رو دیدم که اشتباهه.چون تنظیمات قسمت ویزارد به هم میریزه و ...
و یه سری از تنظیمات ویزارد زو هم دقت نکرده بودید.البته چیزایی بود که به عقل ناقص من رسید...:0013:
واس همین یه برنامه واس lpc2368 نوشتم،اما چون فعلا دسترسی به اسکوپ ندارم،نمیتونم تستش کنم.:sa:
اگه کسی علاقه داره،بگید که فایلاشو اپ کنم و خودتون تست کنید.
امیدوارم به دردتون بخوره.:mrgreen:
سلام مهندس:hi:
نيكيو پرسش؟

لطف ميكنيد.
موفق باشيد

ali-ma
02-04-2012, 12:46
سلام.ببخشید که دیر شد.
فقط،چون بعضی تنظیمات در قسمت ویزارد انجام شده،پس ترجیحا همین فایلا رو بدون تغییر دادن پروگرام کنید.ولی اگه مجبور شدید،دقت کنید.
با حسابی که من کردم،الان باید با فرکانس 6 مگ نوسان کنه.البته روی p3.25

mzarkoob
02-04-2012, 20:50
با حسابی که من کردم،الان باید با فرکانس 6 مگ نوسان کنه.البته روی p3.25
سلام
شما با اسکوپ تست کردید ببینید 6 مگ جواب میده یا با سیمولینک میگید؟

ali-ma
03-04-2012, 10:35
سلام
شما با اسکوپ تست کردید ببینید 6 مگ جواب میده یا با سیمولینک میگید؟


اره.دیروز که با اسکوپ تست کردم تقریبا 6 میداد.با یه کمی تغییرات تو قسمت ویزارد(منظور pclksel0) فرکانس های 12 و 18 مگ رو هم ازش گرفتم.
البته فرکانس سی پی یو 72 مگ تنظیم کردم.

این فایلی که الان ضمیمه کردم،فرکانس 12 مگ رو میده.
موفق باشید:wink:

mzarkoob
04-04-2012, 18:51
فرکانس های 12 و 18 مگ رو هم ازش گرفتم.

18 مگ !!ii998) واجب شد یه تست بکنم.

ali-ma
05-04-2012, 11:18
18 مگ !!ii998) واجب شد یه تست بکنم.

این فایل که گذاشتم/ 12 مگ میده.باید یه کم تغییرش بدید که 18 مگ بشه.
حالا این 12 رو تست کنید،اگه مشکلی بود بگید:alc:

asd.fgh
22-10-2013, 17:48
با سلام به همه عزیزان
آیا کسی تونسته از یک ورودی تعداد پالسی رو بخونه بعد با تنظیم کانتر مثلا روی عدد 5 یکی از خروجی ها یک بشه تنظیمات کانتر برای txmcr مبهمه. باتشکر

mzarkoob
22-10-2013, 20:05
با سلام به همه عزیزان
آیا کسی تونسته از یک ورودی تعداد پالسی رو بخونه بعد با تنظیم کانتر مثلا روی عدد 5 یکی از خروجی ها یک بشه تنظیمات کانتر برای txmcr مبهمه. باتشکر
سلام
خیلی تبریک میگم بابت اولین ارسالتان بعد از شهریور 89 :mrgreen:
مگه کار نشدنیه که نشه!؟
شما تنظیم می کنی تایمر را روی مد کانتر و رجیستر مقایسه را 5 میذاری و اینتراپت کانتر را هم با همون رجیستر mcr فعال می کنید که تا 5 تا شمرد یه وقفه بده و در زیر روال وقفه هم اوامری که می خواهید را بهش میدید. همین !:0013:

hajar1272
17-04-2014, 18:44
سلام من خیلی خیلی از مطالب مفیدی که گذاشتین متشکرم . یه خواهش دارم کسی شبیه سازی lpc2378 رو تو پروتئوس نداره من اسکوپ ندارم و به همین خاطر برای دیدن پایه های تایمر و pwm دچار مشکل شدم