با سلام من میخوام سه تا فرکانس مختلف از 0-100 هرتز را با یک مگا 8 اندازه بگیرم با توجه به اینکه این میکرو یه تایمر 16 بیتی داره اگه کسی راهی به ذهنش میرسه ممنون میشم راهنمایی کنید ممنون
اطلاعیه
Collapse
No announcement yet.
اندازه گیری سه تا فرکانس مختلف با مگا 8
Collapse
X
-
پاسخ : اندازه گیری سه تا فرکانس مختلف با مگا 8
از اونجایی که فرکانس کاری ماکزیممتون 100 هرتز بیشتر نیست میتونین از تایمر 8 بیتی هم استفاده کنین.
برای کانال سوم هم میتونین از یک وقفه خارجی استفاده کنین.
اگر به تایمر هم برای زمانبندی احتیاج دارین میتونین از دو وقفه خارجی و یک تایمر 16 بیتی برای این کار استفاده کنین و تایمر 8 بیتی رو برای زمانبندی استفاده کنین. و فرکانس رو هر 2 ثانیه یک بار حساب کنین.
روال وقفه با نرخ حداکثر هر 10 میلی ثانیه یکبار اجرا میشه و در اون هم قراره یک متغیر 16 بیتی یکی اضافه بشه. اینجوری با فرض کد زیر:
کد:isr: 2 push r24 2 push r25 2 push r0 2 in r0,SREG 2 lds r24,counter_1+0 2 lds r25,counter_1+1 1 adiw r24,1 2 sts counter_1+0,r24 2 sts counter_1+1,r25 2 out SREG,r0 2 pop r0 2 pop r25 2 pop r24 5 reti
هر سیکل با زمان تقریبی 30 تیک ساعت برابر با زمانی حدود 4 میکرو ثانیه در فرکانس 8 مگا هرتزی کار میکنه که با نرخ 100 هرتز میشه 400 میکرو ثانیه یا به عبارتی حدود 0.04 درصد بار زمانی روی میکرو که زمان زیادی نیست.
دیدگاه
-
پاسخ : اندازه گیری سه تا فرکانس مختلف با مگا 8
دقیقا! این کاریه که شما علی الاصول با کانتر انجام میدی و کانتر 16 بیتی فقط رنج شمارشش بالاتره. ولی چون اینجا فرکانس ماکزیممتون کمه و روال وقفه رو هم میشه کوچیک و سریع نوشت بجای شمارش اتوماتیک در رجیستر داخلی کانتر مربوطه از یک متغیر 2 بایتی معادل اون کانتر کذایی استفاده میکنین.
دیدگاه
-
پاسخ : اندازه گیری سه تا فرکانس مختلف با مگا 8
ممنونم فقط چند تا سوال من با c و کدویژن برنامه مینویسم به نظر شما از نظر زمانی به مشکل نمیخورم؟زمان برای ایجاد زمان یک ثانیه هم یک متغییر را برای هر وقفه در روتین اینتراپت تایمر اضافه کنم تا به یک ثانیه برسم درسته؟در ضمن من فرکانسم تا هرتزه و در نهایت شمارش به 100 میرسه از متغییر 8 بیتی میتونم استفاده کنم؟
دیدگاه
-
پاسخ : اندازه گیری سه تا فرکانس مختلف با مگا 8
شما زمان اجرای وقفه تون هر 10 میلی ثانیه یکبار هست (100 هرتز) کدویژن درسته کامپایلر خیلی عالیی نیست ولی کدش همچین ها هم بد نیست. با تمام این احوالات هم توی 10 میلی ثانیه میکرو که سهله شما هم میتونین یک سری بری کافی شاپ دم منزل چیزی بخورین و برگردین!! :mrgreen:
مسلما متغیر یک بایتی هم کارتون رو راه میندازه منتهی چون شما خواستین با کانتر 16 بیتی مقایسه کنین من 2 بایتی در نظر گرفتم و گرنه با یک بایت زمان اجرای کد حداقل 8 پالس کمتر میشه.
کد:isr: 2 push r24 2 push r0 2 in r0,SREG 2 lds r24,counter_1+0 1 inc r24 2 sts counter_1+0,r24 2 out SREG,r0 2 pop r0 2 pop r24 5 reti
دیدگاه
دیدگاه