بررسی تایمر/کانتر یک (1) در میکروکنترلرهای AVR ؟ [20](نویسنده: احسان نوری)
اینبار با "بررسی تایمر/کانتر یک" در خدمتتون هستم.
پس با ما در ادامه مطلب همراه باشید ...
سلام
چه حال و خبرا ؟؟؟!!!
حواستون به تعطیلات هست ؟ زود میگذره ها ...
کلا هرچی که خوبه زود تموم میشه !
مثلا الان پست بیستم آموزش رو داریم شروع میکنیم ! کی باورش میشد که کار به اینجا بکشه ؟!
به هر حال ...
این دفعه میخوایم تایمر/کانتر یک رو بررسی کنیم.
در پست های قبلی تایمر/کانتر صفر رو بررسی کردیم و در مورد برنامه نویسی هم صحبت کردیم.
در این بخش از آموزش حرف خاصی برای گفتن نداریم و عمده مطالب همون چیزاییه که برای تایمر/کانتر صفر گفتیم !
عاجزانه تقاضامندم پست ها رو به ترتیب شماره بیاین جلو (میونبُر نزنید !)
اول از همه یادآوری میکنم که تایمر/کانتر یک،16 بیتیه !
طرح مسئله :
میخوایم یه فلاشر LED بسازیم که هر 2 ثانیه یه بار چشمک بزنه (بازم فلاشر !!!)
فرکانس کاری میکرو رو 16 مگاهرتز در نظر میگیریم.
حل مسئله :
فرمول بالا که معرف حضورتون هست ؟ (اگه نیست بگید تا کلمو بکوبم تو دیوار! )
با فرکانس 16 مگاهرتز،حداکثر تاخیری که میتونیم بسازیم 4.096 میلی ثانیه است.
با انتخاب ضریب تقسیم 8،فرکانس ما به 2 مگاهرتز کاهش پیدا میکنه و ماکزیمم تاخیری که میشه باهاش ساخت به 32.768 میلی ثانیه افزایش پیدا میکنه!
اما ما نیاز به تاخیر 2 ثانیه ای داریم ! چیکار کنیم ؟!
کاری که برای اولین بار در سلسه مباحث آموزشی وبلاگ پرمحتوای نویز میخوایم انجام بدیم اینه :
2 ثانیه ای که مد نظر ما بود رو به 32.768 میلی ثانیه بدست آمده از ضریب تقسیم 8،تقسیم کردیم که حاصل با تقریب حدودا 61 در اومد !
معنی این عدد 61 چیه ؟
یعنی اگه 61 بار تایمر از صفر بشماره و به ماکزیمم (65535) خودش برسه (سرریز بشه)،مدت زمان 2 ثانیه طی میشه !
بررسی رجیسترها :
بررسی رجیستر TCCR1B :
Timer/Counter1 Control Register B - TCCR1B
بیت های 0 و 1 و 2 ؛ Bit 2:0 – CS12:0: Clock Select :
از این بیت ها برای تعیین فرکانس تایمر/کانتر 1 یا همون انتخاب ضریب تقسیم استفاده میشه.
که در اینجا،چون ضریب تقسیم رو 8 انتخاب کردیم،باید مقدار سطر سوم رو انتخاب کنیم (010).
بررسی رجیستر TCNT1 :
Timer/Counter1-TCNT1H and TCNT1L
این رجیستر حاوی مقدار تایمر/کانتر یک است.
چون تایمر/کانتر یک،16 بیتیه،از دو رجیستر 8 بیتی در کنار هم استفاده شده که با پسوندهای H و L مشخص شده اند.
بررسی رجیستر TIMSK :
Timer/Counter-Interrupt Mask-Register
درباره این رجیستر قبلا صحبت شده !
اما در همین حد بدونید که بیتهایی که رنگ پس زمینه سفید دارند،مربوط به تایمر/کانتر یک هستند.
در اینجا تنها بیت TOIE1 مد نظر ماست که با یک کردنش وقفه سرریز تایمر/کانتر یک رو فعال میکنه !
و ما هم این فلگ رو فعال میکنیم !
بررسی رجیستر TIFR :
Timer/Counter Interrupt Flag Register – TIFR
از این رجیستر هم قبلا یاد کردیم.
در اینجا هم تنها بیت TOV1 مد نظر ماست.
هنگامی که تایمر/کانتر یک سرریز میشه،این بیت 1 میشه و پس از اینکه زیرروال مربوط به وقفه بصورت کامل انجام شد صفر میشه و اگه زیرروالی وجود نداشت،با نوشتن یه یک دیگه روی اون،صفر میشه !!!
خب.
این هم از این قسمت از آموزش !
این جدا کردن کدنویسی از اصل آموزش هم معضلی شده برای خودش !
نمیدونم هم چیکار کنم.
لطفا شما هم نظر بدید در مورد این موارد و مسائل !!!
فعلا حداحافظ ...