امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 4
  • 1
  • 2
  • 3
  • 4
  • 5
زمان دقیق با تایمر AVR
نویسنده پیام
moustafa آفلاین
تازه وارد

ارسال‌ها: 21
موضوع‌ها: 3
تاریخ عضویت: شهریور ۱۳۸۹

تشکرها : 23
( 7 تشکر در 5 ارسال )
ارسال: #1
زمان دقیق با تایمر AVR
سلام
اصل مطلب:
من نمیخوام ساعت بسازم.
میخواهیم با BASCOM و MEGA32 یه زمان دقیق بسازیم در حد میلی ثانیه (ترجیحا میکرو ثانیه).
من یه کریستال ساعت (32768 Hz ) به پایه های TOSC1 و TOSC2 بستم و از تایمر 2 در حالت اسنکرون استفاده کردم با Prescale = 128 که دقیقا در هر 1 ثانیه سرریز میشه. مسلما وقتی Prescale رو کمتر کنیم تایمر زودتر سرریز میشه و میتونیم به زمانهای کوچکتر برسیم. مثلا اگه Prescale رو 1 انتخاب کنیم تایمرباید در هر 7.8125 میلی ثانیه سرریز بشه ولی اینطور نمیشه ، چه در Proteus و چه روی برد برد.(من هر دو راه رو هزار دفعه به هزار شکل متفاوت تست کردم جواب نداد)
1- ایا در کریستال اتصالی به پایه های TOSC1 و TOSC2 محدودیت داریم یا نه؟ مثلا میشه یه کریستال 8 یا 12 مگا یا بالاتر بست؟
2- کسی میدونه چجوری میتونیم یه زمان دقیق بسازیم؟ اصلا میشه با AVR این کار رو کرد؟
3- یه راهم اینه که از ای سی 555 استفاده کنیم و کلاک های خروجی اونو توسط کانتر بشماریم . مثلا کلاک 1 مگا تولید کنیم ، که یعنی هر لبه 1 میکرو ثانیه است.( که البته این در صورتیه که نتونیم با خود تایمرهای میکرو این زمان دقیق رو ایجاد کنیم)
جون هر کی دوست دارین سریعتر راهنمایی کنید ، کارم گیره اسیدی.Sad


۱۲-شهریور-۱۳۸۹, ۲۲:۱۳:۲۶
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #2
RE: زمان دقیق با تایمر AVR
مهندس با کریستال ساعت میشه حداقل زمان 1/128 ثانیه رو دقیق داشت !!! ( یعنی 0.0078125 ثانیه )
البته با Prescale یک
و این قضیه تست شده و تو مدار زیر هم من از همین روش واسه کرنومتر استفاده کردم :
http://www.iranled.com/forum/showthread....#pid134110

1-
آره
حتی کریستال 40 کیلو گذاشتم کار نکرد !!

2-
اره میشه !
مثلا تایمر رو ببر مد تایمر با پرسکالر یک ! ( کریستال میکرو رو یه مگ در نظر میگیریم )
اینطوری وقفه اش هر 0.000256 ثانیه رخ می ده ( فرکانس 3906.25 )
حالا کریستال ساعت رو بذار 8 مگ که زود تر رخ بده !!

3-
اونکه اصلا دقیق نیست !
اگه قراره کریستال بذاریم واسه دقت که خوب کریستال خارجی واسه خود میکرو می ذاریم !


میشه تایمر رو برد مد مقایسه ای !!

یا اینکه یه عددی داخل تایمر بریز که کمتر شمارش کنه !
مثلا واسه همون 32768 هر زمان وقفه اش رخ داد تو تایمر عدد 127 رو بریز تا فقط تایمر نصف مقدار عمول بشمره و اینجوریه که زمان هر وقفه نصف میشه !
۱۲-شهریور-۱۳۸۹, ۲۲:۲۲:۲۴
ارسال‌ها
پاسخ
تشکر شده توسط : EBKA, reza555, رسول, moustafa, mahdi20
moustafa آفلاین
تازه وارد

ارسال‌ها: 21
موضوع‌ها: 3
تاریخ عضویت: شهریور ۱۳۸۹

تشکرها : 23
( 7 تشکر در 5 ارسال )
ارسال: #3
RE: زمان دقیق با تایمر AVR
سلام
من از تایمر دو در مد اسنکرون با Prescale = 1 استفاده کردم.کریستال ساعت رو هم بستم.به تایمر مقدار اولیه 223 رو دادم پس طبق فرمول تایمر تقریبا در هر 1 میلی ثانیه سرریز میکنه (32768/33) و به زیر برنامه K میره و به متغیر A 0.001 ثانیه اضافه میشه.
اینجوری ما یه زمان با دقت تقریبی 1 میلی ثانیه ساختیم.اما به درستی کار نمیکنه ، چه در proteuss و چه روی برد برد.خیلی تاخیر داره.
لینکشو میذارم یه نگاهی بهش بندازین ببینین مشکلش چیه.
یه سوال:
اگه یه کریستال خارجی به پایه های XTAL 1و2 ببندیم ، ایا دقت دستوراتی مثل WAIT یا DELAY درست میشه یا میشه برای ساخت این زمان دقیق تایمر ازش استفاده کرد؟مثلا 12 یا 16 مگا؟
با تشکر
در ضمن برنامه ای که گذاشته بودین رو دانلود کردم ولی باز نشد ، Unknown بود.مگه پسوندش چیه؟




فایل‌(های) پیوست شده
.rar   Timer.rar (اندازه: 21.5 KB / تعداد دفعات دریافت: 397)
۱۴-شهریور-۱۳۸۹, ۰۰:۵۲:۰۰
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #4
[split] زمان دقیق با تایمر AVR

مهندس الان دقیقا زمان هر پالس 0.0078125 ثانیه هستش و فقط پالس اول یه میلی ثانیه هستش !!!!
تو برنامه دقت کنی علتشو میفهمی چرا اینجوریه!!!!!!!

برنامه رو دوباره نگاه و تک تک دستورات رو تحلیل و ببین چی اتفاقی می افته !!
احتمالا باید بفهمی ایراد کارت کجاست !!!!

نشد بگو که بگم ایراد برنامه کجاست !!
(آخرین ویرایش در این ارسال: ۱۴-شهریور-۱۳۸۹, ۱۶:۲۷:۳۲، توسط t3r!p3000.)
۱۴-شهریور-۱۳۸۹, ۰۲:۱۲:۴۲
ارسال‌ها
پاسخ
تشکر شده توسط : 3153
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #5
RE: زمان دقیق با تایمر AVR
مهندس moustafa یه تغییراتی دادم و فایل پیوست رو بگیر !!

سرعت نمایش رو lcd خیلی پایینه و نمیشه هر ثانیه هزار بار رو ال سی دی چیزی نوشته !!!!

باید مقدار تایمر هر بار دوباره عوض بشه !

در ضمن متغیر Single دقتی نداره !!

در ضمن هنگ کردن ال سی دی عادیه !
چون در ضمن ارسال دستور به ال سی دی چندین بار وقفه تایمر رخ می ده و خوب زمان بندی ارسال دیتا به ال سی دی رو میریزه بهم !!!

می خوای کرنومتر مگه درست کنی !
خوب سون سگمنت بذار !!!
دقت کنی من واسه همون تو کورنومتری که لینکشو قبلا داده بودم از سون سگمنت استفاده کرده بودم !!!
http://www.iranled.com/forum/showthread....#pid134110

یه اسیلوسکپ هم گذاشتم که ببینی زمان دقیقا یه میلی ثانیه هستش !
( البته زمان یه میلی ثانیه رو بدون کریستال ساعت هم راحت میشد درستش کرد )


فایل‌(های) پیوست شده
.rar   Timer moustafa.rar (اندازه: 16.78 KB / تعداد دفعات دریافت: 285)
۱۴-شهریور-۱۳۸۹, ۰۵:۰۲:۳۱
ارسال‌ها
پاسخ
تشکر شده توسط : رسول, reza555, moustafa, amoli, 3153
moustafa آفلاین
تازه وارد

ارسال‌ها: 21
موضوع‌ها: 3
تاریخ عضویت: شهریور ۱۳۸۹

تشکرها : 23
( 7 تشکر در 5 ارسال )
ارسال: #6
RE: زمان دقیق با تایمر AVR
سلام
متشکرم ، برنامه کار میکنه اما خطا داره.ببیینید چیزیه که میخوام اینه که این زمان کاملا دقیق با یه متغیر اعشاری دیگه مقایسه بشه( به جز Single و Double حق انتخاب دیگه ای نداریم، داریم؟) و به محض اینکه به اون رسید متوقف بشه. مثلا A=4.483 میلی ثانیه است ، خوب حالا تایمر باید شروع به شمارش کنه و وقتی دقیقا به 4 ثانیه و 483 میلی ثانیه رسید وایسه.نمایش پیوسته اون روی LCD مهم نیست ، فقط موقعی که متوقف شد عددی رو که بهش رسیده نمایش بده در حالت STOP تایمر. سون سگمنت به کارم نمی یاد. فقط دقت برای ما مهمه تا 3 رقم اعشار ( هر چی بیشتر بهتر=the more , the merrier ) حالا با کریستال ساعت یا با هر چیز دیگه(منتها توی Mega32) برنامه رو دوباره با تغییرات پیوست میکنم ، بگیریدش منظورمو متوجه میشین.
سوال1:
دستور Return دقیقا به کدوم خط برنامه بر میگرده که دستور Timer2=223 رو فقط یه بار میدید؟ و بعد مجبور شدیم که همین دستور رو در زیربرنامه K دوباره تکرار کنیم؟
سوال2:
اگه یه کریستال خارجی به پایه های XTAL 1و2 ببندیم ، ایا دقت دستوراتی مثل WAIT یا DELAY درست میشه یا میشه برای ساخت این زمان دقیق تایمر ازش استفاده کرد؟ ببینید منظورم اینه که محدود نشیم به 32768 هرتز. اگه فقط از $Crystal=xxxxxxx (کریستال داخلی) استفاده کنیم و تایمرمونو با اون تنظیم کنیم ، میشه به زمان حاصله اعتماد کرد؟(امتحان کردم نشد )Sad
اگه از کریستال خارجی استفاده کنیم (XTAL 1 _ 2 ) چی؟
از دوستان (مخصوصا جناب t3r!p3000) خواهشمندم کمک کنن این قضیه رو یه جوری درستش کنیم بعد یه تاپیک دیگه میخوام بزارم که خیلی از این یکی مشکلتره.




فایل‌(های) پیوست شده
.rar   Timer 3.rar (اندازه: 18.25 KB / تعداد دفعات دریافت: 218)
۱۴-شهریور-۱۳۸۹, ۱۸:۰۶:۲۱
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #7
RE: زمان دقیق با تایمر AVR
انتخاب دیگه ای نداریم !
Double هم یه جوریه !!!

خوب با یه عدد معمولی مثلا 4883 مقایسه بشه و بعد تقسیم بر هزار بشه و اون نمایش داده بشه !!!

ببین میکرو کار خودشه انجا می ده و وقفه اتفاق بیافته کار خودشو ول می کنه و میره سراغ برچسب اون وقفه و اون کارها رو انجام می ده و بعد با دستور Return بر میگرده اونجایی که بود و ادامه کارهاش !!!

تایمر از 223 تا 255 می شمره و بعد دوباره صفر میشه و اونو نوشتم که دوباره عدد تایمر رو 223 بکنه !!!

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

مهندس شما زمان 4.883 ثانیه واست مهمه یا 1 میلی ثانیه !!

من هنوز نفهمیدم قراره چی کار بشه !!
یکم توضیح بدین جریان چیه !!

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

ارسال‌ها: 21
موضوع‌ها: 3
تاریخ عضویت: شهریور ۱۳۸۹

تشکرها : 23
( 7 تشکر در 5 ارسال )
ارسال: #8
RE: زمان دقیق با تایمر AVR
سلام
4.483 یه مثال بود.عددی که تایمر با اون مقایسه میشه ممکنه هر چی باشه ولی همیشه اعشاری در میاد.به عبارت دیگه وقتی زمان محاسبه شده توسط تایمر به اون عدد رسید(نه کمتر ، نه بیشتر)مثلا Portd.7 رو toggle کنه و تایمر متوقف شه و زمان شمرده شده توسط تایمر روی LCD نمایش بدیم. این عددی که گفتم فقط یه عدده (نه زمان)که از حاصل چند تا فرمول به دست میاد. حالا وقتی زمان تایمر دقیقا مساوی با این عدد شد portd.7 رو Toggle کنه.توی برنامه ای که در ارسال قبل گذاشتم این عدد رو دستی وارد میکنیم.شما برنامه رو یه نیگاهی بکن و عدد A>5.219 رو تغییر بده و خطاشو ببین.بعضیها میگن از مد مقایسه ای تایمر استفاده کنیم.
۱۴-شهریور-۱۳۸۹, ۲۲:۰۳:۵۹
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #9
RE: زمان دقیق با تایمر AVR
کلا اعداد اعشاری دنگ و فنگشون بالاست !!

پیشنهاد می کنم یه جوری فرمول رو محاسبه کنید که اعشاری نشه !!
بعد به جای اینکه بعلاوه 0.001 کنی بعلاوه 1 کن !!!!
۱۴-شهریور-۱۳۸۹, ۲۳:۵۳:۱۲
ارسال‌ها
پاسخ
تشکر شده توسط : رسول, moustafa
moustafa آفلاین
تازه وارد

ارسال‌ها: 21
موضوع‌ها: 3
تاریخ عضویت: شهریور ۱۳۸۹

تشکرها : 23
( 7 تشکر در 5 ارسال )
ارسال: #10
RE: زمان دقیق با تایمر AVR
سلام
به خاطر راهنمایی های قبلیتون خیلی ممنونم خیلی موثر بود.
فعلا دور متغیرهای اعشاری رو خط کشیدم و از WORD یا INT استفاده میکنم ، اینجوری بهتر کار میکنه چه در عمل و چه در Proteus.
اما چند تا مسئله هست:
1- در عمل (روی برد برد) خطای تکرار پذیری داریم ، یعنی با هر بار اجرای برنامه عدد حاصله با دفعه قبل فرق میکنه اما در Proteus این خطا را نداریم و هر چند بار که برنامه را اجرا کنیم به یک عدد میرسیم(که خیلی خوبه)، حالا نمیدونم این ذات خود میکرو هست یا میکرو من مشکل داره؟
2- من این ازمایش رو بیشتر از 50 بار در هر دو جا تست کردم و بعد از میانگین گیری به نتیجه زیر رسیدم:
کریستال ساعت در Proteus :****************میانگین خطا : 15 میلی ثانیه
کریستال ساعت در عمل: ********************میانگین خطا : 113 میلی ثانیه (که فکر کنم بیشتره)
کریستال داخلی در Proteus (Async = Off) :*********میانگین خطا : 7 میلی ثانیه
کریستال داخلی در عمل (Async = Off) : ************میانگین خطا : اصلا فکرشم نکنین ، زمانو گذاشتم برای 3 ثانیه ، بیشتر از 20 ثانیه طول میداد ( هر دفعه )
*** با این تفاسیر دوستان ایده ای دارن برای کمتر کردن این خطای 100 میلی ثانیه ای و از اون بدتر خطای تکرار پذیری ؟
بازم از همتون ( مخصوصا جناب t3r!p3000 ) که وقت میذارن و این تاپیک رو میخونن.



(آخرین ویرایش در این ارسال: ۱۶-شهریور-۱۳۸۹, ۰۲:۳۸:۰۳، توسط moustafa.)
۱۶-شهریور-۱۳۸۹, ۰۲:۳۵:۵۶
ارسال‌ها
پاسخ
تشکر شده توسط : رسول, reza555, t3r!p3000
moustafa آفلاین
تازه وارد

ارسال‌ها: 21
موضوع‌ها: 3
تاریخ عضویت: شهریور ۱۳۸۹

تشکرها : 23
( 7 تشکر در 5 ارسال )
ارسال: #11
RE: زمان دقیق با تایمر AVR
سلام
من از کریستال خارجی 4 مگ استفاده کردم ، حالا خیلی بهتر شده در عمل میانگین خطا به 18 میلی ثانیه رسیده و در ضمن تکرار پذیر هم شده.
راهی هست که بشه همین 18 میلی ثانیه رو هم حذف کرد؟
با تشکر

۲۱-شهریور-۱۳۸۹, ۱۵:۱۹:۴۰
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  مشکل برنامه تایمر با بیسکام soy1345 7 2,026 ۲۲-فروردین-۱۳۹۸, ۲۰:۴۸:۰۶
آخرین ارسال: 1نفر
  2 در یک (خازن و سلف سنج) دقیق LC Meter با ATMega8 alimogmov 2 6,813 ۲۰-آبان-۱۳۹۷, ۰۳:۱۶:۵۰
آخرین ارسال: DJ-Sichan
  مشکل در کار با تایمر 1 در بسکام klick 3 4,535 ۳۰-بهمن-۱۳۹۵, ۰۴:۰۴:۴۲
آخرین ارسال: omid_phoenix
  [سوال] تنظیم دقیق فرکانس داخلی میکرو xxabasxx 6 5,823 ۰۴-آذر-۱۳۹۵, ۰۲:۱۲:۱۳
آخرین ارسال: xxabasxx
  ttiny45 ساخت ثانیه دقیق javad_2010 4 3,945 ۱۳-آبان-۱۳۹۵, ۱۱:۱۳:۳۷
آخرین ارسال: javad_2010
  مشکل در ساخت تایمر لطفا کمک کنید omidsafari 8 6,502 ۰۹-مرداد-۱۳۹۵, ۱۷:۲۸:۰۹
آخرین ارسال: omidsafari
  [سوال] پیکربندی تایمر mostafa-m 5 4,271 ۲۹-خرداد-۱۳۹۵, ۲۲:۴۸:۰۷
آخرین ارسال: mostafa-m
Exclamation [فوری] مشکل نوشتن برنامه AVR با تایمر مد مقایسه dr.mohammad 7 4,184 ۲۹-دى-۱۳۹۴, ۱۳:۲۸:۴۹
آخرین ارسال: sharin
  [سوال] راهنمایی برای کار با تایمر 1 hamze_b 12 8,358 ۲۵-خرداد-۱۳۹۴, ۱۶:۲۰:۳۸
آخرین ارسال: student-p
Sad [فوری] تایمر بسکام نواوران طب 9 5,851 ۲۰-خرداد-۱۳۹۴, ۰۹:۳۵:۱۴
آخرین ارسال: student-p

پرش به انجمن:


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

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