امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
سوال در مورد تایمرها در میکرو atmega16 و زبان code vision
نویسنده پیام
karimip آفلاین
تازه وارد

ارسال‌ها: 4
موضوع‌ها: 2
تاریخ عضویت: مهر ۱۳۹۰

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #1
سوال در مورد تایمرها در میکرو atmega16 و زبان code vision
سلام
همگی خسته نباشید
داشتم دنبال اطلاعاتی درباره تایمر میگشتم که با سایت شما آشنا شدم.
چند تا سوال دارم...من میخوام با میکرو ATMEGA16 و با استفاده از زبان Code vision اینکارا رو انجام بدم
یکی اینکه باید با استفاده از تایمر1 برنامه ای بنویسم که یک LED متصل به پایه PC0 هر ثانیه یکبار چشمک بزنه راستش خیلی تایمر بلد نیستم اما تا اونجایی که میدونم تایمر 1 فقط روی پین های D4 و D5 عمل میکنه و این محدودیت پین رو نمیدونم چکار کنم؟ آیا میشه همه کارو روی یه میکرو روی همون پایه D4 یا D5 انجام بدم بعدش این میکرومو با استفاده از ارتباط سریال USART متصل کنم به یه میکرو دیگه و اینو بفرستم روی پایه PC0 اون یکی میکرو؟اصلا چنین کاری درسته؟ یا روی همون یک میکرو روی پایه PC0 میشه این کارو انجام داد؟

یه سوال دیگه هم اینکه میخوام هم زمان یه موج مربعی 1khz روی PA0 و یه موج مربعی 3khz روی PA1 تولید کنم با فرکانس کریستال داخلی 8mhz ؟
راستش اینو تا حدودی فکرکردم و به این نتیجه رسیدم که باید با تایمر 0 و 2 نوشته بشه اما بازم محدودیت پین دارم یعنی روی پین A هیچ تایمری نیست! و یه چیز دیگه که نمیتونم بفهمم اینکه چطور میشه از روی فرکانس مثلا 1khz دوره تناوب را بدست آورد؟
اگرممکنه یکم در مورد مدهای کاری تایمرها بگید من اصلا نمیدونم از کدام مد باید استفاده کنم!
لطفا کمک کنید وقت زیادی هم ندارم
ممنون
۰۴-مهر-۱۳۹۰, ۰۱:۱۱:۲۳
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #2
RE: سوال در مورد تایمرها در میکرو atmega16 و زبان code vision
سلام.

شما بهتره اول يه سري مطالب آموزشي در اين باره بخوني ... ، كتاب يا هر چيزي ...
چون اين مباحث خيلي گسترده هست ... ( اينجا نمي شه كتاب نوشت ... )
بعد روي مفهوم وقفه هم كار كنيد . تايمر هم وقفه داره و براي درست كردن زمان هاي زياد مجبور مي شي ازش استفاده كني ... .
تايمر زمان رو مي سازه و وقتي زمان ساخته شد با دستور هاي شرطي به هر پايه اي مي تونيد دستور بديد .
موج مربعي 1khz و 3khz هم با يك تايمر مي شه ساخت .
لازمه كه برنامه نويسي رو درك كنيد .

مود هاي مختلف تايمر رو فعلا ول كن ( مخصوصا اگر وقت كم داري و كاري باهاشون نداري ... ) ، فقط قسمت خود تايمر رو بخون .

هميشه زود دير مي شه ... ، بهتره همين الان از روي كتابي چيزي ... ، با دقت شروع به خوندن كنيد ( شايد چند بار )
بعد اگر مشكلتون حل نشد ، سوالات جزئي بپرسيد تا اگر بلد بوديم كمك كنيم .

موفق باشي.
يا علي.

۰۴-مهر-۱۳۹۰, ۰۱:۳۹:۴۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : rdscience, رسول
karimip آفلاین
تازه وارد

ارسال‌ها: 4
موضوع‌ها: 2
تاریخ عضویت: مهر ۱۳۹۰

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #3
RE: سوال در مورد تایمرها در میکرو atmega16 و زبان code vision
انقدر جزه خوندم که دیگه قاطی کردم هرکدوم یه جور توضیح دادن!
تنها فرمول درستی که بهش رسیدم این بود
Δt = (65536 – X0 )*( Prescale/Fosc)
خب من اینکارو کردم دلتای زمان رو 1 درنظر گرفتم و پریسکیلمو 1024 و فرکانس اسیلاتورم 8مگاهرتز
حالا این عدد بدست اومده میشه x0 یعنی همون عددی که باید بریزم توی تایمر
حالا چه جوری ؟؟؟؟
منظورم اینه که من باید اینو چه طوری تقسیم کنم که بتونمش بریزمش توی رجیسترهای تایمر1 (یعنی همون OCR1AH , OCR1AL , OCR1BH , OCR1BL .... ؟؟؟ اصلا تایمرم باید توی مد normal کارکنه یا CTC .... ????
۰۴-مهر-۱۳۹۰, ۱۶:۰۹:۱۰
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #4
RE: سوال در مورد تایمرها در میکرو atmega16 و زبان code vision
خوب شما يه جزوه رو درست بخون . مطالبي رو كه مي گم از كتاب مرجع كامل ميكرو هاي AVR هست ( خودم بسكام كار مي كنم )

ctc براي حات مقايسه ايه كه شما كاري با اين نداري و مي خواهيد با تايمر زمان بسازيد ...
مگر از codewizard استفاده نمي كني ؟!
براي ساختن زمان فقط با TCCR و TCNT كار داري كه از اولي براي فعال كردن مود تايمر و ... استفاده مي شه و از دومي براي مقدار اوليه دادن و خوندن ...
اگر از codewizard استفاده كني ، لازم نيست با ريجستر ها در گير بشي ...
از همونجا فعال مي كني ، وقفه مي ذاري و ...

پس مقدار اوليه رو توي TCNT بايد بنويسي ، تو codewizard هم فكر كنم همون val باشه كه تو آخرين خط هست ...

رابطه ي خاصي هم نداره ... ، معمولي حساب كن ...

کد:
مثال : براي تايمر 0 هست كه 8 بيتيه ... (0-255)
فركانس = 1MHz   ،   مقسم فركانس = 32   ،   TCNT0=0AH=00001010B

31.25KHz  1MHz/32 = = فركانس پالس ساعت تايمر
32us = 1/31.25KHz = مدت زمان يك شمارش
تعداد پالس براي سر ريز شدن تايمر : 256 - TCNT0 = 256 - 10 = 246
246 * 32us = 7.872ms = مدت زمان شمارش تايمر

حالا شما براي تايمر 1 بنويس و از codewizard استفاده كن ...
ممكنه نياز بشه از وقفه هم استفاده كني ...

موفق باشي.
يا علي.

يه بار ديگه رابطه ها رو مي ذارم به ترتيب ، بالا قاطي شد !

کد:
1MHz/32= 31.25KHz
32us = 1/31.25KHz
256 - TCNT0 = 256 - 10 = 246
246 * 32us = 7.872ms

(آخرین ویرایش در این ارسال: ۰۴-مهر-۱۳۹۰, ۲۰:۰۹:۰۶، توسط sharin.)
۰۴-مهر-۱۳۹۰, ۲۰:۰۲:۱۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : رسول


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  منو سازی با atmega16 shomakher 10 11,999 ۱۳-مهر-۱۳۹۹, ۱۸:۴۷:۳۳
آخرین ارسال: sarakingly
  [سوال] راه اندازی LCD با ATMEGA16 or 32 parviz2012 11 28,343 ۱۱-مرداد-۱۳۹۷, ۰۵:۵۱:۰۵
آخرین ارسال: ninechip
  درخواست راهنمایی منو سازی برای Atmega32 به زبان بیسیک برویglcd armin111 9 6,171 ۱۶-شهریور-۱۳۹۶, ۱۱:۳۹:۲۵
آخرین ارسال: sky_man847
  سوال در مورد اتصال حافظه eeprom جانبی به میکرو SBRE77 9 10,467 ۰۷-مهر-۱۳۹۵, ۲۳:۳۱:۲۹
آخرین ارسال: omidrn
  کمک در برنامه فرستنده avr به زبان سی sniper-70 3 3,823 ۱۹-شهریور-۱۳۹۵, ۱۲:۳۳:۲۰
آخرین ارسال: aKaReZa75
  تست میکرو saber.k 10 14,048 ۰۹-شهریور-۱۳۹۵, ۰۲:۰۹:۲۷
آخرین ارسال: yadulla fazel
  مشکل در برنامه code vision 3.12 ali74342 10 7,232 ۲۲-مرداد-۱۳۹۵, ۰۰:۱۶:۰۷
آخرین ارسال: shima.rrr
  سوال در مورد ساخت ساعت با ال سي دي navayi 5 4,744 ۱۲-اسفند-۱۳۹۴, ۱۲:۱۷:۱۰
آخرین ارسال: 1نفر
  سوال در مورد دستور timeout$ mohebbat 3 2,932 ۲۹-بهمن-۱۳۹۴, ۱۲:۳۵:۱۹
آخرین ارسال: 1نفر
  کمک....کار با تایمرها mahdieh_sh 10 5,061 ۱۰-آذر-۱۳۹۴, ۲۱:۴۶:۰۰
آخرین ارسال: alimogmov

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS