نویز | آموزش AVR | آموزش میکرو | میکروکنترلر

وبلاگ آموزشی احسان نوری ::: Ehsan Nouri's Weblog

نویز | آموزش AVR | آموزش میکرو | میکروکنترلر

وبلاگ آموزشی احسان نوری ::: Ehsan Nouri's Weblog

" نویز رسانه ای است برای آموزش آسان مفاهیم میکروکنترلر و الکترونیک "

دریافت مستندات
آخرین نظرات
  • ۲۰ خرداد ۰۰، ۲۰:۴۹ - حسام الدین سلطانی
    خعلی عالی
  • ۲ ارديبهشت ۰۰، ۱۸:۱۱ - حسام الدین سلطانی
    خیلی عالی

بررسی تایمر/کانتر یک (1) در میکروکنترلرهای AVR ؟ [20]

دوشنبه, ۴ فروردين ۱۳۹۳، ۰۲:۱۵ ب.ظ

اینبار با "بررسی تایمر/کانتر یک" در خدمتتون هستم.

 

پس با ما در ادامه مطلب همراه باشید ...

 

سلام

سال نوتون مجددا مبارک !

چه حال و خبرا ؟؟؟!!!

حواستون به تعطیلات هست ؟ زود میگذره ها ...

کلا هرچی که خوبه زود تموم میشه !

مثلا الان پست بیستم آموزش رو داریم شروع میکنیم ! کی باورش میشد که کار به اینجا بکشه ؟!

به هر حال ...

 

این دفعه میخوایم تایمر/کانتر یک رو بررسی کنیم.

در پست های قبلی تایمر/کانتر صفر رو بررسی کردیم و در مورد برنامه نویسی هم صحبت کردیم.

در این بخش از آموزش حرف خاصی برای گفتن نداریم و عمده مطالب همون چیزاییه که برای تایمر/کانتر صفر گفتیم !

عاجزانه تقاضامندم پست ها رو به ترتیب شماره بیاین جلو (میونبُر نزنید !)

 

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

 

آشنایی با تایمر/کانتر میکروکنترلر AVR ؟ [13]

بررسی تایمر/کانتر شماره صفر (0) میکروکنترلرهای AVR ؟ #1 [14]

کارگاه عملی - شماره 3 : کار با تایمر/کانتر صفر [19]

 

اول از همه یادآوری میکنم که تایمر/کانتر یک،16 بیتیه !

 

طرح مسئله :

 

میخوایم یه فلاشر LED بسازیم که هر 2 ثانیه یه بار چشمک بزنه (بازم فلاشر !!!)

فرکانس کاری میکرو رو 16 مگاهرتز در نظر میگیریم.

 

حل مسئله :

 

 

فرمول بالا که معرف حضورتون هست ؟ (اگه نیست بگید تا کلمو بکوبم تو دیوار! crying)

 

با فرکانس 16 مگاهرتز،حداکثر تاخیری که میتونیم بسازیم 4.096 میلی ثانیه است.

با انتخاب ضریب تقسیم 8،فرکانس ما به 2 مگاهرتز کاهش پیدا میکنه و ماکزیمم تاخیری که میشه باهاش ساخت به 32.768 میلی ثانیه افزایش پیدا میکنه!

اما ما نیاز به تاخیر 2 ثانیه ای داریم ! چیکار کنیم ؟!

کاری که برای اولین بار در سلسه مباحث آموزشی وبلاگ پرمحتوای نویز cheeky میخوایم انجام بدیم اینه :

 

2s ÷ 32.768 ms = 61.03561

 

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 میشه و پس از اینکه زیرروال مربوط به وقفه بصورت کامل انجام شد صفر میشه و اگه زیرروالی وجود نداشت،با نوشتن یه یک دیگه روی اون،صفر میشه !!!

 

خب.

این هم از این قسمت از آموزش !

این جدا کردن کدنویسی از اصل آموزش هم معضلی شده برای خودش !

 

نمیدونم هم چیکار کنم.

لطفا شما هم نظر بدید در مورد این موارد و مسائل !!!

 

فعلا حداحافظ ...

سلام چاکرم اقا احسان ممنون بابت این پست روونت
اگه امکانش هست  حالا که تعطیلاته و فرصت زیادتر سریعتر پیش برین.
ممنون
پاسخ:
سلام.
انشاالله !
با سلام

اگر بخواهیم برنامه ای برای تغییر پسورد بنویسیم پسورد جدید باید در حافظه eerom ذخیره شود تا در هنگام reset شدن ic از بین نرود. آیا برای این کار می توانیم از حافظه خود avr استفاده کنیم یا اینکه حتما به یک حافظه external نیاز داریم و اگر می شود با avr  این کار را انجام داد تغییرات برنامه باید به چه صورتی باشد؟ یعنی مثلا برای استفاده از این حافظه ازخود avr آیا دستوری وجود دارد یا خیر؟

لطفا راهنمایی کنید

با نشکر
پاسخ:
سلام
بله باید از حافظه eeprom استفاده کنید.
از حافظه خود AVR میتوانیم استفاده کنیم،منتهی به شرطی که تغذیه میکرو قطع نشه !
چون میکرو ریست میشه و ...
کافیه متغیری از جنس eeprom تعریف کنید و اون رو مقدار دهی کنید.در واقع این متغیر حاوی کلمه عبور است.
که بسته به نوع استفاده ای که میخواین بکنید،میتونه به هر طریقی مقداردهی بشه.

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

در اینجا هم تنها بیت TOV1 مد نظر ماست.

هنگامی که تایمر/کانتر یک سرریز میشه،این بیت 1 میشه و پس از اینکه زیرروال مربوط به وقفه بصورت کامل انجام شد صفر میشه و اگه زیرروالی وجود نداشت،با نوشتن یه یک دیگه روی اون،صفر میشه !!!

قسمت دوم رومتوجه نمی شم.


پاسخ:
برای صفر کردن بصورت دستی،باید روی بیت 1 نوشته بشه !
این یه استثناست.
با سلام
اگه زحمتی نیست یک نمودار درختی در مورده کانتر ها با رجیستراشون تهیه کنید تا از سردرگمی در بیام
پاسخ:
متوجه نمیشم منظورتون چیه !
ضمن اینکه مبحث تایمر/کانترها تقریبا رو به اتمامه و زمان مناسبی برای انجام این کار ها نیست !
سلام
واقعا خسته نباشید ، وبتون خیلی خوبه
فقط اگه لطف کنید ی مقدار در مورد هر مبحثی مثلا تایمر ، وقفه یا ... بیشتر مثال از برنامه نویسیشون
بیارید و کلا مثال و تمرینم خیلی بیشتر بشه ، واقعا عالیه عالی میشه
ممنون از زحماتتون ...
پاسخ:
سلام

چشم

ولی وقت نمیشه ...

با سلام
تو تایمر/کانتر صفر گفتین TOV0 با سرریز یک میشه،وقتی زیر روال در حال انجام است این بیت صفر است،ام تو تایمر/کانتر یک گفتین وقتی زیر روال وقفه یطور کامل انجام شد این بیت صفر میشود؟
پاسخ:
سوال شما از نظر نگارش دچار اشکاله !!!
من هرچی خوندم نفهمیدم !

سلام

ممنون بابت مطالب مفید تون

چطور می تونم توبرنامه یه تاخیر 11000 ثانیه ای داشته باشم

فقط wait 11000  کافیه

پاسخ:
سلام

اگه بخواین زمان دقیق درست کنین،اول با تایمر/کانتر 2 و توسط مد RTC،یک ثانیه دقیق میسازید و بعد داخل زیرروال وقفه تعداد ثانیه ها رو میشمارین تا تعدادشون به 11000 برسه.
اما اگه دقیق بودنش براتون مهم نیست،میتونین با تایمر/کانتر یک و حتی صفر هم این کار رو انجام بدین !

موفق باشید.
عاااااااااااااااااشششششششششششششقتم
مرسی عالی مث همیشه
پاسخ:
مرسی
با فرکانس 16 مگاهرتز،حداکثر زمانی که میتونیم بسازیم 16 میکرو ثانیه است.
با فرکانس 16 مگاهرتز،حداکثر تاخیری که میتونیم بسازیم 4.096 میلی ثانیه است.

سلام و خسته نباشید
میخواستم فرق اون دوتا عبارتو بدونم.
ممنون از سایت خوبتون
پاسخ:
میشه دقیقا بگین کجا گفتم 16 میکروثانیه ؟!
سلام
خسته نباشید.واقعا خیلی خوب توضیح میدین اگه یکی از میکرو متنفرم باشه با این آموزش شما عاشق میکرو میشه.من خودم تو دانشگاه اصلا نفهمیدم موضوع از چه قراره با یه نمره پایین میکرو رو پاس کردم بعد که لیسانسم گرفتم دیدم خیلی جاها استخدام میکرو داره بعد گفتم برم فنی حرفه ای یاد بگیرم اونجام خیلی چیزهای جزئی یاد گرفتم اونم با تلاش خودم الانم که بعد چن هفته امتحان عملی داریم دیدم چیز زیادی از تایمرا حالیم نیست بعد گفتم برم یه توضیح خلاصه وار از اینترنت پیدا کنم. خلاصه خییییییییییییییلی خوب آموزش میدین .
پاسخ:
تشکر !
خیلی خوب بود متشکر
سلام
تشکر بخاطر زحماتتون
آقا من برنامه شما رو کپی پیست کردم برنامه درست جواب نمیده!!!
میتونه مشکل از کجت باشه ؟؟
(فرکانس کار میکرو هم درست هست)
سلام
شما خیلی خلاصه می گید میرید جلو .تقاضای من اینکه یکم با حوصله تر مطالب بیشتر بگید مثلم همین تایمر یک صدتای چیزای دیگه که مهمن و لازمن نمگید مثل capture که من لازممه.البته مطمئنن بخاطر کمبود وقت شماست
ولی در کل شیوه بیلن و درس دادنتون خیلی خوب و گیرا است
ممنون
mersi mofid bod
۰۱ مهر ۹۴ ، ۱۶:۳۱ حامد افتخاری
من چندتا کتاب خریدم
قراره زمستون که از راه رسید به عنوان هیزم ازش استفاده کنم
بسیااااااااااااااار عالی توضیح دادید
۱۲ دی ۹۴ ، ۰۰:۳۵ عاشق وبلاگتم

عالی هستی

خیلی خوبه!
ممنون
amuzesh ha awlie amm a har chi miram jolo tar be in natije miresm mn male electronic nistm:( va in bade chon rahe bagasht nadarm
سلام خسته نباشید میشه بگید که حداکثر تاخیر رو با چه فرمولی بدست میارید
۱۷ آذر ۹۶ ، ۱۵:۴۶ سجاد احمدی قشلاقی (زنوز)
سلام دوست عزیز
اولا ممنون از لطفت بابت مطالبت و ایمکه دیگه جواب کامنتها رو نمیدی.
یه سوال : ایا فک کنم تقسیم فرکانسیو 1024 بگیریم میتونیم زمان دو ثانیه رو بدست بیاریم.
میشه اینکارم کرد یا اشتباهه؟
بی زحمت اگه اشتباه بود اشکال کارمو بگین
۱۷ آذر ۹۶ ، ۲۱:۱۵ سجاد احمدی قشلاقی
با سلام خدمت دوست عزیز اقا حمید.
در مورد سوالت از اونجایی که تایمر کانتر یک 16 بیتی هستش و با توجه جدول انواع داده میبینیم که بیشترین مقداری که میتونه داشته باشه عدد 65535 که همون unsigned int هستش . و یه فرمول هم داریم که تو بالا هم اشاره شده که برابره با
تعداد پالسهایی که باید انجام بشن=((مدت زمانی که ما نیاز داریم)/(مدت زمان طول یک پالس)) -1
که ما تعداد پالسهایی که قراره اعمال بشن مقدار ماکزیمم 16 بیتی که همون65535 هستش قرار میدیم
مدت زمانی که نیاز داریمو برابر مجهول یا "X"
مدت زمان طول یک پالس رو هم از فرمول فرکانس به دوره بدست میاریم که میشه یک تقسیم بر فرکانسمون
منهای یک هم که تو فرموله
جاگذاری کنی مجهول یا "X" که همون ماکزیمم زمانی که هستش بدست میاد.
البته من اینجور میدونم
اگه گفته هام اشتباهه لطفا دوستان بگن تا راهنمایی اشتباه نمنم.

مثل همیشه عالی

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی