نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
أَللّهُمَّ ارْزُقْنی شَفاعَةَ الْحُسَیْنِ یَومَ الْوُرُودِ
مهدی دمیرچیلو

آموزش آرم میکروکنترلر lpc1768 جلسه 7 timer counter ق1

317

به نام خدا : تو این مطلب ( آموزش آرم میکروکنترلر lpc1768 جلسه 7 timer counter ق1 ) میخوام به فصل 21 دیتاشیت lpc176x/5x یه سر بزنیم و مبحث تایمر/کانتر رو یه بار برا همیشه قضیه رو فیصله بدیم و کامل یادش بگیریم، ته این مطلب، لینک مطلب آموزش پروژه محور آرم رو قرار میدم، چون میدونم با خوندن فقط این مطلب و یادگرفتن کار رجیستر ها، در حالت عادی نمیتونید پروژه ببندید ( مگه این که سابقه ای چیزی داشته باشید یا تقلب کنید ^_^ )، لذا یه 6-7 تایی از هر مبحث تایمر lpc1768 مثال زدم و در عمل تست کردم و فیلمش رو گرفتم ( مخصوص اونایی که میرن مدار میبندن و بعد جواب نمیگیرن و بعد … )
آموزش آرم میکروکنترلر lpc1768 جلسه 7 timer counter ق1

آموزش آرم میکروکنترلر lpc1768 جلسه 7 timer counter ق1

تشکر : در این جا، جا داره تشکر کنم از آقای “محمدرضا سربندی فراهانی” که در تهیه این مطلب، مثل مطلب قبلی، منو کمک و راهنمایی کردن.

سرفصل های این مطلب : 

  1. پیکربندی ابتدایی تایمر
  2. خصوصیات تایمر
  3. توضیح پایه های تایمر
  4. توضیح رجیسترها
  5. عملیات DMA
  6. مثالی از نحوه کار تایمر

 

1) پیکربندی ابتدایی تایمر میکروکنترلر LPC176x/5x

امکانات جانبی میکروکنترلر، تایمر 0و1و2و3 ( به امکانات جانبی میکرو میگن peripheral )، به صورت زیر پیکربندی میشه :
1) Power : در رجیستر PCONP، تنظیم کنید بیت های PCTIM0/1/2/3 رو.
توجه : بعد از Reset شدن میکرو، Timer0/1 فعال میشن (PCTIM0/1 = 1) و Timer2/3 غیر فعال میشن (PCTIM2/3 = 0)؛ یعنی در ابتدا که میکرو روشن میشه به طور پیشفرض برق تایمر 0و1 فعال هستش و 2و3 غیر فعال، با توجه به این نکته دیگه تو پروژه هایی که من میخوام براتون بزاریم، چون پروژه ها بر مبنای تایمر 0 هستش لذا دیگه با رجیستر های power کاری ندارم ( یادتون باشه، بعد تو مطلب پروژه ها نگید چرا power تایمر0 رو فعال نکردید. )
2) Peripheral clock : در رجیستر PCLKSEL0؛ انتخاب کنید PCLK_TIMER0/1 رو؛ و در رجیستر PCLKSEL1، انتخاب کنید PCLK_TIMER2/3 رو. ( برا تنظیم کلاک تایمر، هر چی مقدارش بیشتر باشه، تایمر با سرعت بیشتری شمارش میکنه، لذا دقتش زیاد میشه ولی زمان قابل شمارشش و بلعکس… )
3) Pins : نقش پایه های مد نظر رو، بر روی Timer قرار بدید به کمک رجیسترهای PINSEL؛ تعیین مقاومت داخلی پایه ها با نقش تایمر به کمک رجیسترهای PINMODE
4) Interrupts : رجیستر T0/1/2/3MCR و T0/1/2/3CCR برای وقفه capture و match هستش؛ وقفه ها فعال میشن در NVIC به کمک appropriate Interrupt Set Enable register ( این دو وقفه چی هستن و… رو در ادامه مطلب توضیح میدم )
5) DMA : Up to two match conditions can be used to generate timed DMA requests

2) خصوصیات تایمر میکروکنترلر LPC176x/5x

توجه 1 : هر 4 تا Timer/Counter شبیه هم هستن به غیر از peripheral base address
توجه 2 : وجود حداقل 2 ورودی Capture و 2 خروجی Match برای هر 4 تایمر موجود. Timer 2 brings out all four Match outputs.
1)  یه تایمر/کانتر 32 بیتی با قابلیت برنامه ریزی 32 بیت Prescaler ( قابلیت تغییر مدت زمان شمارش هر واحد تایمر(TnTC) – در ادامه مطلب متوجه میشید )
2) عملیات تایمر یا کانتر
3) 2تا کانال 32 بیتی capture در هر تایمر؛ capture میتونه به صورت اختیاری وقفه تولید کنه؛that can take a snapshot of the timer value when an input signal transitions.
4) 4 رجیستر 32بیتی match که این امکانات زیر رو به ما میده :

  • رخ دادن وقفه در match ( دو تا رجیستر هست که اگه برابر بشن با هم، میگن “برابری” رخ داده یا با هم match شدن )
  • متوقف شدن تایمر در match
  • ریست شدن تایمر در match

5) 4 خروجی رجیستر “برابری”، با قابلیت :

  • 0 شدن در هنگام رخ دادن برابری
  • 1 شدن در هنگام رخ دادن برابری
  • Toggle شدن در هنگام رخ دادن برابری
  • پایه “برابری” هیچ تغییری نکنه

خب میدونم تا الان چیزی نفهمیدید ^_^ فدای سرتون ( زیاد هم مهم نبود، چون دیتاشیت گفته بود اینا رو، منم گفتم، ادامه مطلب رو بخونید good

3) توضیح پایه های CAP ( ورودی ) و MAT ( خروجی ) تایمر/کانتر

جدول زیر توضیح کوتاهی میده درباره پایه های تایمر/کانتر؛ همون طور که میبینید، یه سری پایه ورودی داریم و یه سری پایه خروجی، که پایه های ورودی برا بحث کپچر هستش و پایه های خروجی برا بحث برابری؛ در زیر بیشتر توضیح میدم.
Timer/Counter Pin description
ورودی ( CAP ) :
یه سری پایه برا بحث Capture داریم که میتونیم روی لبه های مد نظر قرارشون بدیم و هر زمان که سیگنالی با لبه مد نظر ما، روش اعمال بشه ما متوجه میشیم، که میتونه وقفه هم تولید کنه؛ بلوک Timer/Counter میتونه انتخاب کنه Capture رو به عنوان یه منبع کلاک به جای PCLK ( برای مطالعه بیشتر، به توضیحات رجیستر CTCR مراجعه کنید )
نکته مهم 1 : از اونجایی که دو لبه بالا رونده از کلاک PCLK مورد نیاز هستش تنها برا تشخیص یه لبه انتخاب شده CAPمون مورد نیاز است، لذا، فرکانس CAP ورودی نمیتواند از 1/4 مقدار PCLK بیشتر باشه، یعنی موجی با فرکانس بیش از PCLK/4 نمیتونید به پایه های CAP بدید.
نکته مهم 2 : در نتیجه، زمان Low/High بودن سیگنال های اعمالی به پایه های CAP نباید از PCLK/2 کمتر باشید.
نکته مهم 3 : وقتی بیش از یه پایه به عنوان CAP انتخاب میشه، پایه با شماره کمتر مورد استفاده قرار میگیره. ( این حرف حرف درستی هستش و برای این که بدونید چرا درسته باید این مطلب رو تا آخر بخونید، ولی خب یه سوال، سازنده بیکار بوده که دو تا پایه CAP برا هر تایمر درست کردن وقتی نمیشه از هر دو استفاده کرد ؟؟ )

خروجی ( MAT ) : 
پایه های خروجی Match؛ وقتی MR0:3 با TC برابر میشه، خروجی میتواند “Toggleیا Low یا High یا بدون هیچ تغییری” انتخاب شود؛ رجیستر (External Match Register (EMR، این پایه های خروجی رو کنترل میکنه.

When more than one pin is selected for a MAT output, all such pins are driven identically.

توجه مهم 1 : این پایه ها رو به فرم CAPn.m و MATn.m نشون میدیم، که n شماره تایمر هستش( و میتونه مقدار 0 تا 3 به بدیم، n همون شماره تایمر 0 تا 3 هستش ) و m هم شماره پایه هستش ( مقدار 0 یا 1 میتونیم قرار بدیم، یعنی از این دو پایه CAP و MAT برا هر تایمر دو تا داریم به جز “MAT برا تایمر2” که 4 تا داریم ( [0:3]MAT2 ) و این موضوع در شکل بالا هم بهش اشاره شده )

توجه مهم 2 : این پایه های CAP و MAT در میکروکنترلر lpc176x/5x، در مکان های مشخص شده در شکل های زیر قرار دارد ( ببینید چقدر دوستون دارم، رفتم این پایه ها رو پیدا کردم و مشخص کردم و…. تا قشنگ متوجه بشید. ^_^)؛ همون طور که میبینید پایه های CAP رو به رنگ صورتی و پایه های MAT رو با رنگ آبی مشخص کردم؛ این عکس ها رو با دقت ببینید، ببینید نکته ای مشکلی چیزی نیست ^_^، بعد از این عکسها یه نکته جالب و در واقع یه ویژگی خوب LPC رو میگم براتون.
پایه های CAP و MAT در میکروکنترلر lpc176x/5x

پایه های CAP و MAT در میکروکنترلر lpc176x/5x

پایه های CAP و MAT در میکروکنترلر lpc176x/5x

پایه های CAP و MAT در میکروکنترلر lpc176x/5x

پایه های CAP و MAT در میکروکنترلر lpc176x/5x
خب نکته ای که از عکس های بالا میشه فهمید که احتمال 90% میدم که بهش دقت نکردین، این که از بعضی پایه ها دو تا داریم!، لیست پایه های CAP و MAT رو در زیر نشون میدم و بعد بررسی میکنیم با هم :

CAP3.0 : P0.23
CAP3.1 : P0.24

CAP2.0 : P0.4
CAP2.1 : P0.5

CAP1.0 : P1.18
CAP1.1 : P1.19

CAP0.0 : P1.26
CAP0.1 : P1.27

خب تا اینجا چیزی عجیب نیست، بریم پایه های MAT رو هم بررسی کنیم ببینم خبری هستش یا نه :

MAT3.0 : P0.10
MAT3.1 : P0.11

MAT2.0 : P0.6 - P4.28
MAT2.1 : P0.7 - P4.29
MAT2.2 : P0.8
MAT2.3 : P0.9

MAT1.0 : P1.22
MAT1.1 : P1.25

MAT0.0 : P1.28 - P3.25
MAT0.1 : P1.29 - P3.26

خب نکته جالب داستان MAT2.0 تا MAT2.4 نیست( این نکته رو در بالا گفتم)، نکته جاب اینجاس، به پایه های “MAT0.0 و MAT0.1” و “MAT2.0 و MAT2.1” توجه کنید؛ ای داد بیداد، این 4 تا پایه، هر کدوم رو دو تا از پایه های میکرو سوار هستن، خب این چه فایده ای داره و چرا سازنده این کارو کرده؟ بیکار بوده هاااا^_^ نه بیکار نبوده، در زیر دو دلیل براتون ذکر میکنم ( که یکی از دلایل به ذهنم رسید و یکی دیگه هم به ذهن یکی دیگه رسید و بعد اون یکی دیگه چیزی که به ذهنش رسیده بود رو به ذهن من رسوند o_O >>> ^_^ ) :

  1. در بحث طراحی PCB آزادی عمل بیشتری به ما میده.
  2. اگه از پایه اول در نقش دیگه ای استفاده داشتیم میکردیم، میتونیم از اون یکی پایه استفاده کنیم ( اگه مطالب جلسات قبل رو خونده باشید میدونید که هر پایه حداکثر 4تا نقش میتونه داشته باشه )

خب تا اینجا فهمیدید که یه سری پایه ورودی خروجی مختص تایمر/کانتر وجود داره و یه توضیحی دربارشون دادم، توضیحات بیشتر در ادامه و مطلب پروژه ها قرار میگیره.

3) توضیح رجیسترهای Timer/Counter میکروکنترلر LPC176x/5x

هر Timer/Counter شامل رجیسترهایی هستش که در جدول 426 (شکل زیر) نشان داده شده :
توضیح رجیسترهای Timer/Counter میکروکنترلر LPC176x/5x
IR : رجیستر وقفه؛ IR میتونه نوشته بشه برا پاک کردن پرچم وقفه ها؛ IR میتونه خونده بشه برا شناسایی منابع وقفه معلق.
TCR : رجیستر کنترل Timer؛ TCR مورد استفاده قرار میگیرد برای کنترل تابع Timer/Counter؛ Timer/Counter میتونه غیر فعال و یا Reset بشه به کمک TCR
TC : تایمر/کانتر؛ این رجیستر 32 بیتی افزایش پیدا میکنه هر PR+1 تا کلاک PCLK؛ TC به وسیله TCR کنترل میشه.
PR : رجیستر Prescale؛ وقتی شمارنده Prescale (رجیستر PC) برابر این مقدار میشه(PR)، در کلاک بعدی مقدار TC افزایش پیدا میکنه و PC مقدارش پاک میشه.
PC : شمارنده Prescale؛ این شمارنده مقدارش افزلیش پیدا میکنه، تا به PR برسه، وقتی رسید، مقدار TC یه واحد زیاد میشه و مقدار PC ریست(پاک یا 0) میشه؛ The PC is observable and controllable through the bus interface
نتیجه گیری : خب رجیستر شمارنده تایمر(TC) رو میتونیم زمان هر کلاکش رو(زمان هر 1 شماره اش رو) تعیین کنیم و این خیلی خوبه، چطوری تعیین میکنیم؟ به کمک رجیستر PR، یه ریجستر داریم به نام PC، وقتی مقدارش به PR میرسه، خودشو 0 میکنه و TC رو یه واحد زیاد.
MCR : رجیستر کنترل برابری؛ MCR مورد استفاده قرار میگیره برای کنترل اگه یه وقفه تولید بشه و اگه TC ریست بشه وقتی یک “برابری” رخ بده.
MR0 : رجیستر برابری 0؛ MR0 میتونه فعال بشه از طریق Reset کردن TC به وسیله MCR؛ TC و PC متوقف میشن، و/یا تولید میشه یه وقفه هر زمانی که MR0 با TC برابر بشه.
MR1 : رجیستر برابری 1؛ توضیحات MR0 رو بخونید.
MR2 : رجیستر برابری 2؛ توضیحات MR0 رو بخونید.
MR3 : رجیستر برابری 3؛ توضیحات MR0 رو بخونید.
CCR : رجیستر کنترل Capture؛ این رجیستر نوع edge پایه های ورودی کپچر و رخ دادن یا ندادن وقفه رو تعیین میکنه.
CR0 : رجیستر کپچر 0؛ مقدار TC درون CR0 لود میشه وقتی که لبه انتخاب شده روی پایه انتخاب شده کپچر ( CAP0.0 – CAP1.0 ) رخ بده.
CR1 : رجیستر کپچر 1؛ توضیحات CR0 رو بخونید.
EMR : رجیستر پایه های خروجی مربوط به “برابری”؛ EMR پایه های MATn.m رو کنترل میکنه.(در قسمت مربوطش توضیح میدم)
CTCR : رجیستر کنترل شمارش؛ برا انتخاب مد ( تایمر یا شمارنده/کانتر) به کار میره و اگه مد شمارنده انتخاب شده بود، نوع edge رو تعیین میکنه این رجیستر.

(Interrupt Register (T[0:3]IR

این رجیستر دارای 4 پرچم وقفه match و 2 پرچم وقفه برای capture هستش.
اگه وقفه ای رخ بده، بیت متناظر باهاش در این رجیستر مقدارش 1 میشه؛ در غیر این صورت مقدار بیت 0 میمونه.

clears any corresponding DMA request.

(Interrupt Register (T[0/1/2/3]IR
نحوه مقدار دهی این رجیستر : 
0 : تاثیری ندارید.
1 : پاک کردن پرچم وقفه مربوطه ( این رجیستر هم پرچم هستش و هم پاک کننده پرچم )

بیت 0 (MR0 Interrupt) : پرچم وقفه match channel 0
بیت 1 (MR1 Interrupt) : پرچم وقفه match channel 1
بیت 2 (MR2 Interrupt) : پرچم وقفه match channel 2
بیت 3 (MR3 Interrupt) : پرچم وقفه match channel 3
بیت 4 (CR0 Interrupt) : پرچم وقفه capture channel 0
بیت 5 (CR1 Interrupt) : پرچم وقفه capture channel 1
بیت های 6 تا 31 : رزرو شده اند.

(Timer Control Register (T[0:3]CR

رجیستر TnCR برای کنترل عملیات Timer/Counter مورد استفاده قرار میگیره.
Timer Control Register
بیت 0 ( Counter Enable ) :
1 : فعال کردن شمارنده ( Counter ) های Timer و Prescale
0 : غیر فعال کردن شمارنده ( Counter ) های Timer و Prescale

بیت 1 ( Counter Reset ) :
1 : ریست کردن Timer Counter و Prescale Counter در edge مثبت بعدی PCLK
0 : متوقف کردن ریست Counter
توجه : تا زمانی که این بیت 1 هستش، شمارنده مدام مقدارش ریست میشه، لذا با 0 کردن این بیت میتونسم عملیات ریست رو غیر فعال کنیم.

بیت 2 تا 32 : رزرو شده.

(Timer Counter registers (T[0:3]TC

در دو حالت مقدار این رجیستر تغییر میکند که در زیر میگم :
1) رجیستر 32 بیتی شمارنده Timer مقدارش زیاد میشه وقتی که شمارنده PC به مقدار ذخیره شده در PR میرسه، در این زمان مقدار TC یه واحد زیاد میشه. ( توضیحات بیشتر در قسمت رجیستر های PR و PC )
2) مگر اینکه Reset بشه قبل از این که به بالاترین مقدار محدود شده خودش برسه(به ماکزیمم مقدار خودش برسه) شمارنده Timer میتواند تا مقدار 0xFFFF FFFF بشمارد و بعد سرریز میکنه و مقدارش 0x0000 0000 میشه؛ این مورد، وقفه تولید نمیکنه ولی به کمک (Match Registers (MR0 – MR3 میتونم سرریز رو تشخیص بدیم در صورت نیاز.

تعداد مطالب : 367 تا
جنگ ما فتح قدس را به همراه خواهد داشت. [ امام خمینی (ره) ]
ارسال دیدگاه
6
نظرات این مطلب بسته شده است.
  1. حمید

    مهمان

    حمید

    اقا دمت گرم که نشستی این همه مطلب رو نوشتی ، ولی جان مادرت یه بار خودت از اول بخون ببین فعل و فاعل جملاتت کجا قرار دارن ، انگار جمله انگلیسی دادی گوگل ترجمه کنه smile smile

  2. milad

    مهمان

    milad

    سلام ممکنه در مورد واحد کپچر بیشتر توضیح بدین که اصلا کارش چیه

  3. حسین عهدی

    مهمان

    حسین عهدی

    فقط پایه های خاصی MAT یا CAP هستند؟
    البته سلام خسته نباشی

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام-بله

  4. محمد علی رزاق پور

    مهمان

    محمد علی رزاق پور

    خدا قوت بزرگ مرد
    من تازه با این سایت آشنا شدم
    ایا میتونی توی یه پروژه کنترل سروو موتور با استفاده از آی سی ارم کمکم کنی
    با تشکر
    یا علی مدد

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سرو موتور مربوطه به PWM – من جلسه بعد ADC رو که بگم سعی میکنم PWM رو بگم و به عنوان پروژه راه اندازی سرو موتور رو بگم – ولی قول نمیدم – هر چی خدا خواست
      خوبه؟