یافتن max ورودی سینوسی به ADC در میکرو AVR

سلام دوست عزیز.من این سوال شما رو دیدم.از شما و مهندس معین عذرخواهی میکنم بابت دخالتم.
بنظر با کدنویسی میشه به این هدف رسید.شاید با دو حلقه while صعودی و نزولی بودن مقادیر ADC رو فهمید.و با حلقه if اون مقدار ماکسیمم یا مینیمم رو به دست اورد.اما جون ADC ممکنه ماکسیمم های مختلفی رو بده میشه از میانگین یا از روش های اماری ماکسیممی به دست اورد.یا با چند حلقه if و اینکه سرعت نمونه گیری ADC خیلی بالاست تا حد خوبی ماکسیمم ترین مقدار رو به
میشه به دست اورد.یا گفت داده ها رو بخون.تا زمانی که داده ای بزرگتر از داده ی فعلی پیدا میکنی داده رو نشون نده.مگه اینکه دیگه داده حاضر بزرگترین داده موجوده.این به قولی مهکی برای من بود.مشتاقم بهترین راه حل توسط مهندس معین رو بدونم

@788#1464 مهندس عزیز. روشتون رو امتحان کردم و خیلی خوب دارم ماکزیمم و مینیمم رو میگیرم. فقط دقت و رزولوشن ADC میکرو AVR خیلی پایینه...

سلام دوست عزیز، صورت مسئله شما یکم گیج کننده هست. پیشنهاد می کنم که خودتون رو جای میکرو بذارید و ببینید اگر قرار بود این کار رو روی کاغذ انجام بدید، چه مراحلی رو طی می کردید. (مثلا صبر می کردید که ۴ تا از ماکزیمم ها بیان، بعد بینشون ماکزیمم می گیرید و بعد یک جای دیگه کاغذ یادداشت می کنید. بعد اون ۴ تا عدد رو دور میریزید و ۴ تای بعدی رو می خونید.) بعد که کامل روند کارتون مشخص شد، حالا می تونید با استفاده از ابزارهایی مثل حلقه ها و شرط ها، منطق مورد نظرتون رو با برنامه نویسی پیاده کنید.

اگه خوندن داده های ADC توی loop یا همون (while(1 اتفاق میفته شما یه متغییر تعریف کن که در ابتدا 0 صفر هست.بعد هر بار که مقدار ADC روی میخونی بیا با مقدار 0 اول مقایسه کن.اگه بزرگتر بود اون متغییر که مقدار 0 داخلش بود الان مقدار ADC رو داخلش بریز.و اگه کوچیکتر بود همون مقدار ADC رو چاپ کن.
اگه هم توی اینتراپت ADC رو میخونی که همونجا چک کن.البته کدی که من نوشتم خیلی سبکه.شما میتونی کدتون رو محکم تر بنویسید

@788#1461 سلام دوست عزیز... ممنون بابت راهنماییتون...
اینکه ADC دائما نمونه هایی که میخونه رو با نمونه ی قبلی مقایسه کنه و تا زمانی که عدد قبلی کمتر از عدد بعدی هست نشون نده راه حل خوبی به نظر میرسه. فقط چطور به میکرو بفهمونم که نمونه های ADC رو با هم مقایسه کنه؟؟؟

دوستان مهندس عزیز از راهنمایی های شما بسیار ممنونم. با راهنمایی که داشتید دارم نتیجه خوبی میگیرم.
یک چالش جدید دارم ممنون میشم اگه راهنمایی بفرمایید:
الان طبق راهنمایی شما ماکزیمم و مینیمم رو برای هر پیک سیگنال سینوسی ورودی به ADC میگیرم. حالا قصد دارم کاری کنم که میکرو چهار ماکزیمم اول رو بگیره و با هم مقایسه کنه و بین اون چهارتا ماکزیمم هم باز ماکزیمم بگیره. (تا اینجاش مشکلی نیست) بعد از اینکه چهارتا ماکزیمم اول رو گرفت از اونجا به بعد هر ماکزیمم جدیدی که میگیره، رو با سه ماکزیمم آخر قبلش مقایسه کنه و باز بین اون چهارتا ماکزیمم جدید دوباره ماکزیمم بگیره...
نمیدونم تونستم منظورمو برسونم یا نه. بهرحال ممنون میشم راهنمایی بفرمایید

سلام، تشکر می کنم از جواب دوستان. روشی که آقای افتخاری توضیح دادن روش درست پیدا کردن اکسترمم هست. فقط برای بهتر شدن دقت نهایی، سعی کنید به جای اینکه یک نمونه رو در نظر بگیرید، مثلا میانگین ۱۰ نمونه رو بگیرید و بعد ببینید از بیشترین مقدار قبلی بیشتر هست یا نه. اینطوری دقت سیستم کمی بیشتر میشه. در طراحی مدار نهایی هم اگر از نکات گفته شده در طراحی استفاده کنید، مشکلی با adc نخواهید داشت.

مرسی مهندس باعث افتخاره.
برای دقت ADC هم میشه ولتاژ رفرنس رو به سطح نزدیک تری نسبت به ولتاژ انالوگ اورد.اما مهندس حرف خیلی مهمی میگفت که هر چقدر رزولوشن بالاتر بره مقادیر ADC به نویز نزدیک تر میشه و همچنین کار نویز گیری و فیلتر خیلی مهم تر و جدی تر باید دنبال بشه

مهندس عزیز. روشتون رو امتحان کردم و خلی عالی دارم ماکزیمم و مینیمم رو میگیرم. فقط خیلی دقت و رزولوشن ADC میکرو AVR خیلی پایینه...

باسلام. دوستان بنده پروژه ای دارم که بخشی از اون به این شکل است: سیگنال سینوسی بعنوان خروجی نهایی مدارم، وارد ADC میکرو AVR میشه. فرکانس این سیگنال ورودی به ADC میکرو، 3 هرتز است. اما فرکانس نمونه برداری ADC بالاست (در حد چندصد کیلوهرتز). خب مشکل من اینجاست که می خوام ADC فقط نقاط اکسترمم (یعنی ماکزیمم و مینیمم) این سیگنال رو بخونه و به من بده برای ادامه محاسبات. اصطلاحا من پیک تو پیک این سیگنال رو میخوام. دوستان کسی راه حلی داره؟