سلام
می خواستم بدونم چطور میشه با avr حالت دائمی یه سیگنال رو که به یکی از پینهاش وارد میشه تشخیص داد؟ (منظورم از حالت دائمی اینه که مقدار تغییراتش در یه بازه ی زمانی از یه حدی کمتر باشه)
سلام.
شما با AVR آشنايي داريد ؟
حالت دائمي ، منظورتون همون مفهمو در كنترل خطي و ... هست درسته ؟
كلا ميكرو كنترلرها فقط 0 و 5 يا 0 و 3.3 و يا ... اينها رو مي فهمن. فقط 2 سطح منطقي ...
اين موضوع حتما بايد رعايت بشه ...
اما اگر بخواهيد از ADC استفاده كنيد ( به شرطي كه فركانس حالت گذر زياد نباشه ... ) مي تونيد از اون شكل موج در حالت گذرا چند تا نمونه بگيريد و وقتي تفاوت مقدار قبلي با بعدي از يك حد معيني كمتر شد ، اون رو به عنوان حالت دائمي در نظر بگيريد.
سرعت نمونه برداري براي AVR حداكثر چيزي حدود 125KHz هست. يعني فركانس موج ورودي حداكثر بهتره نصف اين مقدار باشه ...
موفق باشيد.
(۱۶-تير-۱۳۹۱, ۱۰:۵۸:۱۲)sharin نوشته است: [ -> ]سلام.
شما با AVR آشنايي داريد ؟
حالت دائمي ، منظورتون همون مفهمو در كنترل خطي و ... هست درسته ؟
كلا ميكرو كنترلرها فقط 0 و 5 يا 0 و 3.3 و يا ... اينها رو مي فهمن. فقط 2 سطح منطقي ...
اين موضوع حتما بايد رعايت بشه ...
اما اگر بخواهيد از ADC استفاده كنيد ( به شرطي كه فركانس حالت گذر زياد نباشه ... ) مي تونيد از اون شكل موج در حالت گذرا چند تا نمونه بگيريد و وقتي تفاوت مقدار قبلي با بعدي از يك حد معيني كمتر شد ، اون رو به عنوان حالت دائمي در نظر بگيريد.
سرعت نمونه برداري براي AVR حداكثر چيزي حدود 125KHz هست. يعني فركانس موج ورودي حداكثر بهتره نصف اين مقدار باشه ...
موفق باشيد.
سلام
از پاسختون ممنونم
بله کمی آشنا هستم و اتفاقا از ADC استفاده میکنم. فرکانس ورودی حدود برق شهری هست یعنی 50 هرتز. مساله ای که هست اینه که دو تا نمونه جواب نمیده حداقل باید 10 تا نمونه رو با اختلاف 0.001 ثانیه توی 10 تا رجیستر نگه دارم و ماکزیمم و مینیمم اونها رو بگیرم و اختلافش رو نگاه کنم این رو بلد نیستم. از یه طرف باید اون 10 تا رجیستر دائم آپدیت بشن و از طرف دیگه باید ماکس و مین اونها تشخیص داده بشه و از هم کم بشن. به نظرتون چیکار کنم؟
با چه كامپايلري كار مي كنيد؟
ADC رو مي تونيد تو مود Free پيكربندي كنيد كه خودش اتوماتيك بسته به فركانسي كه شما براش تعيين مي كنيد ، نمونه ها رو بگيرهه ...
از اونجايي كه فركانس 50Hz هست مشكلي نيست ...
براي مقايسه ي مقادير و ... هم يه سري توابع بايستي باشه ...
گرچه با استفاده از يكسري شرط هم مي تونيد كارتون رو انجام بديد ...
فكر نمي كنم قسمت گنگي داشته باشه ...
----------------------------
يكي از كارهايي كه مي تونيد انجام بديد.از اونجايي كه MAX و MIN براتون اهميت دارهه...
متغييرهايي با نام max , min , now رو مثلا تعريف كنيد.
اولين بار مقدار ADC رو مي خونيد و در now نگه مي داريد.
هر مقداري رو كه ADC مي گيرهه رو مقايسه مي كنيد با max ، اگر now > max اونموقع max = now در غير اين صورت اگر now < min اون موقع min = now در غير اين صورت هيچ ، و بار هاي بعدي هم به همين صورت
يك مقدار پيش فرض 0 به max و min هم بدهه.
شايد بهتر باشه اول min رو چك كني و بعد max .
مقدار اختلافشون رو هم در هر سري مي توني بدست بياري ...
اين عمليات در روال وقفه ي ADC بايستي صورت بگيرهه ...
اين چيزي بود كه فعلا به ذهن من رسيد. ايده هاي ديگه اي هم مي تونيد براي كارتون پيدا كنيد.
----------------------------------------------------
در نهايت قسمتي از كد رو كه مشكل داريد بذاريد تا كسايي كه مي تونن كمك كنن.
موفق باشيد.
حتی یک در صد هم مشکلت رو نفهمیدم !
یکم دقیق تر بگو...