-
نکته دیگه، استفاده از کریستال دقیقه.
ببینید، تو میکروکنترلر، تایمر، لزوما با فرکانس کاری خود cpu (یعنی همون 16 مگاهرتز) کار نمیکنه
میتونه همین باشه، میتونه کمتر باشه. مثلا تقسیم بر یه عدد از 2 تا 1024 بشه.
هرچی این عدد بزرگتر باشه، فرکانس کاری تایمر کمتر میشه ، یعنی بازه های زمان سنجی ما بزرگتر میشه.
وقتی میگیم فرکانس 16 مگاهرتزه، یعنی در هر ثانیه، 16 میلیون پالس داریم.
ما میتونیم تایمرمون رو کمتر از این مقدار کنیم. تقسیمش میکنیم بر 1024 (این کار با مقدار دادن رجیسترهای میکروکنترلر انجام میشه) . یعنی میشه 16 میلیون تقسیم بر یک هزار، میشه 16 هزار.
تا الان تونستیم کاری کنیم که تایمرمون، در هر ثانیه بجای 16 میلیون شمارش، 16 هزار تا انجام بده !
برای زمان سنجی و وقفه، یه رجیستر 8 یا 16 بیتی استفاده میشه (اینجا باید دیگه میکروکنترلر رو کامل بلد باشید !)
ولی همینقدر بدونید که اتمگا 328 ، دو تا تایمر 8 بیتی داره و یه تایمر 16 بیتی
اگه از تایمر 8 بیتی استفاده کنیم ، میتونیم 16 هزار رو یه بار دیگه تقسیم کنیم بر عدد 256
اگه از تایمر 16 بیت استفاده کنیم، میتونیم 16 هزار رو تقسیم کنیم بر عدد 65536
پس از تایمر 16 بیت استفاده میکنیم. پس در کل شد :
16 میلیون پالس در ثانیه، تفسیم بر 1024، تقریبا میشه 16 هزار پالس در ثانیه
یه بار دیگه تقسیم بر 65536 ، تقریبا 0.25 پالس در ثانیه. یعنی هر 4 ثانیه یه پالس !
یعنی ما تونستیم با این تقسیم ها، 16 میلیون پالس در ثانیه رو بکنیم یه پالس در 4 ثانیه
این خیلی خوبه
حالا چند تا عیب هست
1) ما باید بتونیم بازه های بزرگتری داشته باشیم. مثلا اگه بتونیم با فرکانس کمتری کار کنیم، یعنی بجای 16 مگاهرتز، مثلا 8 مگاهرتز (یا 6 یا 7.5 یا هر عدد دلخواهی که کرییتالش تولید بشه!) میتونیم این بازه رو بیشتر کنیم
مثلا اگه از کریستال 4 مگاهرتز استفاهد کنیم، تقریبا یه پالس در هر 16 ثانیه خواهیم داشت که این خیلی خوبه.
2) عیب دوم اینکه. این عدد دقیق نیست !! یعنی 16000000 تقسیم بر 1024 و بعد تقسیم بر 65536 ، دقیقا نمیشه 4 ثانیه. میشه 4.2 تقریبا.
اما کریستال هایی هست که برای همینکار ساخته شدن. یعنی بجای مثلا 16 مگاهرتز دقیق، مقدار هست 167460000 مگاهرتز (همینطوری نوشتنم)
وقتی از اینا استفاده کنیم، و تقسیمش کنید بر اون دو تا عدد، دقیقا میده مثلا 4 ثانیه، یا 5 ثانیه یا 4.5 ثانیه. و اینا. یعنی عدد اعشاری نمیده. زمان سنجی خیلی دقیق میشه
شاید 0.2 ثانیه چیزی نباشه (واسه همین سازنده های آردویینو ازش چشم پوشی کردن) اما تو زمان سنجی های بزرگ مثلا ی ماه روشن بودن مداوم، کلی عقب میفته.
من توی پروژه ای که داشتم، از کریستال 4.164304 استفاده کردم به همراه یه تایمر 8 بیتی. یعنی میشه 4194304 تقسیم بر 256 تقسیم بر 1024 که دقیقا میشه 16 .
یعنی اصن سازنده کریستال همین مد نظرش بوده
* برای ارتباط سریال هم همین مشکل هست. یعنی بازم رند نیست. کریستال هایی هست که میشه از اونا استفاده کرد که مقدارشون دقیقا با مقدار مورد نیاز ارتباط سریال میخونه و در نتیجه ارتباط سریال کاملا دقیق میشه. مزیتش اینه که میشه از سرعت های خیلی خیلی بالا استفاده کرد. الان آردویینو تو ارتباط سریال، از سرعت های خیلی بالا پشتیبانی نمیکنه (هرچند خود میکروکنترلره میکنه) چون 16 مگاهرتز، اعداد دقیق و رندی نمیده برای ارتباط سریال و در نتیجه خطا پیش میاد تو ارتباط.
در حالی که اکریستال های 7.4562 مگاهرتز، 12.288 مگاهرتز، 16.684 و ... اعداد دقیق برای ارتباط سریال میدن.
مجوز های ارسال و ویرایش
- شما نمیتوانید موضوع جدیدی ارسال کنید
- شما امکان ارسال پاسخ را ندارید
- شما نمیتوانید فایل پیوست کنید.
- شما نمیتوانید پست های خود را ویرایش کنید
-
مشاهده قوانین انجمن
SEO by vBSEO