ايران ويج

نسخه‌ی کامل: کار با V-USB
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4
(۱۹-مرداد-۱۳۹۵, ۱۱:۵۷:۰۸)sharin نوشته است: [ -> ]سمت میکرو خودتون سرعت نمونه برداری رو تعیین می کنید.
روش های مختلف وجود داره، ساده ترین راه اینه که یه متغییر بزرگ مثل long ایجاد کنید و هر بار که read_adc می کنید این مقادیر رو با مقدار قبلی جمع کنید و در یک حلقه ی for استفاده کنید. به این ترتیب شرط حلقه رو n بذارید ، مادامی که حلقه در حال اجراست ، n مقدار رو با هم جمع می زنه.
حالا کافیه این مقدار بدست آمده را تقسیم بر n کنید، اینجا میانگین گیری به پایان می رسه و می تونید این مقدار رو به کامپیوتر بفرستید.
برای بار بعدی مقدار این متغییر long رو 0 کنید و مشابه قبل ...

این ساده ترین حرکتی هست کخ می شه زد و جواب هم می ده.
بین هر بار خواندن ADC هم بد نیست یک تاخیر چند میلی ثانیه ای قائل بشید.

میانگین گیری رو هر دو سمت می شه انجام داد، هم سمت میکرو و هم سمت کامپیوتر، برای اینکه انتقال اطلاعات حجیم نشه، سمت میکرو این کار رو انجام بدید بهتر هست.

سمت متلب ، یک شرط گذاشتید که اگر دیتا موجود بود فلان کار رو کنه ، بعد بیرون if مقدار حرکت افقی نمودار رو اضافه کردید. در این وضعیت اگر شرط موجود بودن برقرار نباشه، باز هم حرکت افقی نمودار انجام می شه که این جالب نیست، حرکت افقی نمودار روی محور باید شامل scope شرط if بشه.

راجع به com که می بندیدش، شما com11 استفاده کردید و می بندیدش و بعد com1 باز می کنید!
از چندتا سخت افزار دارید استفاده می کنید؟

در هر صورت نیازی به بستن نیست، کل نمونه ها رو که گرفتید و کار نمام شد، اون موقع انتهای برنامه می تونید ببندیدش.

موفق باشید.
با سلام و عرض خسته نباشید
ان شاء الله که خوب و سلامت باشید واقعا دست شما درد نکنه (خدا خیرتان بدهد به خاطر راهنماییتان) (ان شاء الله بقیه دوستان هم بتوانند از وجود افرادی مثل شما بهره مند شوند ) فقط شرمنده دو تا سوال دیگه داشتم متشکر میشم اگه بتونید باز راهنمایی بفرمایید:
1. شما فرمودید از روش میانگین گیری استفاده کنم واقعیتا سیگنالی را که من میخواهم از میکرو وارد کامپیوتر کنم سیگنال قلب (شکل آن را برای شما ضمیمه کردم) آیا روش میانگین گیری برای این سیگنالها هم مناسب است ؟
2. اینکه کریستالی که من استفاده کردم می تواند باعث خطای پیش آمده (اینکه در بعضی از نقاط اطلاعات را نخواند) در رسم نمودار شود؟ چون من یک سایتی را میخواندم که برای مثلا میکرو PIC نوشته بود که اگر مثلا از کریستال 8 MHz با Baudrate=9600 استفاده کنید 0.2% خطا دارد (بصورت جدول برای تمام کریستال ها با Baudrate های مختلف بود)
                                                                                                                                                                                                           باتشکر فراوان
سلام.

خواهش می کنم.
نمودارتون واحد نداشت، سیگنال قلب فرکانسش چقدر هست؟
میانگین گیری در واقع حکم فیلتر پایین گذر را دارد. اگر فرکانس سیگنال قلب زیاد نباشد، می شه با میانگین گیری هم تا حدی به جواب رسید، البته طبیعتا برای کار تجاری میانگین گیری نمی کنن ، اما برای کار دانشجویی کفایت می کنه.

البته ADC واحد حساسی هست، اینکه از فیلتر مناسب برای واحد ADC استفاده کرده باشید مهم هست، اینکه مدار از برق شهر یا باتری تغذیه می شود مهم هست و حتی عملکرد باقیه واحدهای میکرو می تواند باعث وجود نویز روی ADC شودو ... تمام این موارد می توانند موجب اشکال شوند که نیاز به تمهیدات سخت افزاری خاص تری دارد.

توصیه می شه یک بار بدون اعمال شرط سمت متلب ، هرچیزی که از میکرو دریافت می کنید ، نمودار کنید ، اینجور قطعی تر می شه نظر داد. موقع خواندن ADC هم مطمئن شوید که ADC دردسترس هست و بعد عملیات خواندن را انجام دهید. برای کار دقیقتر، باید کد دقیق تری هم زد. برای اینجور کاربردها خواندن ADC به صورت وقفه ای مناسبتر است.

سوال دومتون مربوط به پروتکل USART هست و درست هست، اما الان شما دارید از USB CDC استفاده می کنید و فرکانس تامین USB 48MHz هست و داستانش جداست ...

موفق باشید.
(۲۱-مرداد-۱۳۹۵, ۱۰:۲۴:۵۲)sharin نوشته است: [ -> ]سلام.

خواهش می کنم.
نمودارتون واحد نداشت، سیگنال قلب فرکانسش چقدر هست؟
میانگین گیری در واقع حکم فیلتر پایین گذر را دارد. اگر فرکانس سیگنال قلب زیاد نباشد، می شه با میانگین گیری هم تا حدی به جواب رسید، البته طبیعتا برای کار تجاری میانگین گیری نمی کنن ، اما برای کار دانشجویی کفایت می کنه.

البته ADC واحد حساسی هست، اینکه از فیلتر مناسب برای واحد ADC استفاده کرده باشید مهم هست، اینکه مدار از برق شهر یا باتری تغذیه می شود مهم هست و حتی عملکرد باقیه واحدهای میکرو می تواند باعث وجود نویز روی ADC شودو ... تمام این موارد می توانند موجب اشکال شوند که نیاز به تمهیدات سخت افزاری خاص تری دارد.

توصیه می شه یک بار بدون اعمال شرط سمت متلب ، هرچیزی که از میکرو دریافت می کنید ، نمودار کنید ، اینجور قطعی تر می شه نظر داد. موقع خواندن ADC هم مطمئن شوید که ADC دردسترس هست و بعد عملیات خواندن را انجام دهید. برای کار دقیقتر، باید کد دقیق تری هم زد. برای اینجور کاربردها خواندن ADC به صورت وقفه ای مناسبتر است.

سوال دومتون مربوط به پروتکل USART هست و درست هست، اما الان شما دارید از USB CDC استفاده می کنید و فرکانس تامین USB 48MHz هست و داستانش جداست ...

موفق باشید.
با سلام
دست شما درد نکنه به خاطر توجهتون (تشکر). فرکانس سیگنال قلب (ECG) به طور استاندارد بین 0.05 تا 100 هرتز است. (این سیگنالی که برای شما ضمیمه کردم محور عمودی آن دامنه سیگنال و محور افقی آن زمان است)
من در مدار آنالوگ دریافت سیگنال قلبی از افراد یک تقویت کننده قرار دادم (چون دامنه آن کوچک است)، دو تا فیلتر میان گذر بین 0.05 تا 100 هرتز قرار دادم و یک فیلتر میان نگذر (برای حذف برق شهر 50 هرتز).
-اینکه فرمودید ADC حساس است می توانم از صفحه آلومینیومی برای دور مدار میکرو استفاده کنم تا نویز کمتر بر روی آن تاثیر بگذارد؟
-ببخشید منظورتون از اینکه فرمودید یکبار بدون اعمال شرط سمت متلب هر چیزی را که از میکرو دریافت میکنید رسم کنم یعنی یکبار با استفاده از دستور fopen پورت را باز کنم و داده های اخذ شده را رسم کنم؟ و اینکه فرمودید مطمئن شوید ADC در دسترس باشد یعنی چی؟ (اگر من USB را به کامپیوتر وصل کنم و شناخته شود کفایت نمی کند؟) در مورد وقفه هم که فرمودید یعنی از interupt در میکرو استفاده کنم یا pause در متلب؟
-برای سوال دوم که پرسیدم برای خطای کریستال میخواستم بدانم اگر کریستال را تغییر بدهم (یک مقداری بیشتر یا کمتر قرار دهم) می تواند کمک کند؟ (مثلا وقتی من از کریستال 8 یا 11 مگاهرتز استفاده کردم اصلا USB توسط کامپیوتر شناخته نشد)
                                                                                                                                                                                                     با تشکر از زحمات شما
سلام.

فرکانسش برای میانگین گیری مناسب هست، ADC های میکرو معمولا نهایت تا 200KHz قابلیت نمونه گیری دارن. فرکانس و رجیسترهای ADC رو می تونید برای این منظور تنظیم کنید و سمت میکرو به صورت وقفه ای بخونید. 

برای رسم نمودار، بله. داده های خام ADC را مستقیم سمت متلب نمودار کنید. ( بدون گذاشتن شرایط برای نمایش سمت متلب ، که کل مقادیر نشان داده بشه )

ADC دردسترس باشه یعنی اینکه وقتی مشغول محاسبات اندازه گیری و نمونه برداری هست ، در دسترس نیست و اگر در این زمان خونده بشه ، اطلاعات غلط میده. معمولا در میکروها یک فلگ از یک رجیستر وجود داره که پایان تبدیل رو گزارش می کنه ... ، همیشه در این زمان باید خونده بشه ، اگر به صورت وقفه ای بخونید ، همین اتفاق می افته و اطلاعات در زمان درست خوانده می شن، چون همین flag هست که باعث وقوع وقفه می شه. پس کاری به USB نداریم و منظور Interrupt در میکرو بوده.

کریستال درستی رو انتخاب کردید ، تغییر بدید همینطور که گفتید واحد USB نمی تونه کار کنه. 

گذاشتن قاب برای مدار ، برای محیط نویزی هست ، برای کار فعلیتون نیاز نیست ...

موفق باشید.
(۲۲-مرداد-۱۳۹۵, ۱۱:۳۲:۰۷)sharin نوشته است: [ -> ]سلام.

فرکانسش برای میانگین گیری مناسب هست، ADC های میکرو معمولا نهایت تا 200KHz قابلیت نمونه گیری دارن. فرکانس و رجیسترهای ADC رو می تونید برای این منظور تنظیم کنید و سمت میکرو به صورت وقفه ای بخونید. 

برای رسم نمودار، بله. داده های خام ADC را مستقیم سمت متلب نمودار کنید. ( بدون گذاشتن شرایط برای نمایش سمت متلب ، که کل مقادیر نشان داده بشه )

ADC دردسترس باشه یعنی اینکه وقتی مشغول محاسبات اندازه گیری و نمونه برداری هست ، در دسترس نیست و اگر در این زمان خونده بشه ، اطلاعات غلط میده. معمولا در میکروها یک فلگ از یک رجیستر وجود داره که پایان تبدیل رو گزارش می کنه ... ، همیشه در این زمان باید خونده بشه ، اگر به صورت وقفه ای بخونید ، همین اتفاق می افته و اطلاعات در زمان درست خوانده می شن، چون همین flag هست که باعث وقوع وقفه می شه. پس کاری به USB نداریم و منظور Interrupt در میکرو بوده.

کریستال درستی رو انتخاب کردید ، تغییر بدید همینطور که گفتید واحد USB نمی تونه کار کنه. 

گذاشتن قاب برای مدار ، برای محیط نویزی هست ، برای کار فعلیتون نیاز نیست ...

موفق باشید.
با سلام خدمت مهندس عزیز
دست شما درد نکنه به خاطر راهنماییتان (با مواردی که فرمودید پیش می روم تا ان شاء الله مشکل برطرف شود). تشکر
(۱۹-مرداد-۱۳۹۵, ۱۱:۵۷:۰۸)sharin نوشته است: [ -> ]سمت میکرو خودتون سرعت نمونه برداری رو تعیین می کنید.
روش های مختلف وجود داره، ساده ترین راه اینه که یه متغییر بزرگ مثل long ایجاد کنید و هر بار که read_adc می کنید این مقادیر رو با مقدار قبلی جمع کنید و در یک حلقه ی for استفاده کنید. به این ترتیب شرط حلقه رو n بذارید ، مادامی که حلقه در حال اجراست ، n مقدار رو با هم جمع می زنه.
حالا کافیه این مقدار بدست آمده را تقسیم بر n کنید، اینجا میانگین گیری به پایان می رسه و می تونید این مقدار رو به کامپیوتر بفرستید.
برای بار بعدی مقدار این متغییر long رو 0 کنید و مشابه قبل ...

این ساده ترین حرکتی هست کخ می شه زد و جواب هم می ده.
بین هر بار خواندن ADC هم بد نیست یک تاخیر چند میلی ثانیه ای قائل بشید.

میانگین گیری رو هر دو سمت می شه انجام داد، هم سمت میکرو و هم سمت کامپیوتر، برای اینکه انتقال اطلاعات حجیم نشه، سمت میکرو این کار رو انجام بدید بهتر هست.

سمت متلب ، یک شرط گذاشتید که اگر دیتا موجود بود فلان کار رو کنه ، بعد بیرون if مقدار حرکت افقی نمودار رو اضافه کردید. در این وضعیت اگر شرط موجود بودن برقرار نباشه، باز هم حرکت افقی نمودار انجام می شه که این جالب نیست، حرکت افقی نمودار روی محور باید شامل scope شرط if بشه.

راجع به com که می بندیدش، شما com11 استفاده کردید و می بندیدش و بعد com1 باز می کنید!
از چندتا سخت افزار دارید استفاده می کنید؟

در هر صورت نیازی به بستن نیست، کل نمونه ها رو که گرفتید و کار نمام شد، اون موقع انتهای برنامه می تونید ببندیدش.

موفق باشید.
با سلام خدمت مهندس
ان شاء الله که خوب و سلامت باشید شرمنده باز مزاحم شدم یادم رفت از شما بپرسم که فرمودید "حرکت افقی نمودار روی محور باید شامل scope شرط if بشه" یعنی چی؟ میتوانید راهنمایی کنید چه چیزی باید بنویسم؟   باتشکر
سلام.

به همچنین. یعنی اون خط هایی از برنامه که حرکت افقی رسم نمودار رو تشکیل می ده ، جزء { تا } شرط if بنویسید.

موفق باشید.
(۲۱-مرداد-۱۳۹۵, ۱۰:۲۴:۵۲)sharin نوشته است: [ -> ]سلام.

خواهش می کنم.
نمودارتون واحد نداشت، سیگنال قلب فرکانسش چقدر هست؟
میانگین گیری در واقع حکم فیلتر پایین گذر را دارد. اگر فرکانس سیگنال قلب زیاد نباشد، می شه با میانگین گیری هم تا حدی به جواب رسید، البته طبیعتا برای کار تجاری میانگین گیری نمی کنن ، اما برای کار دانشجویی کفایت می کنه.

البته ADC واحد حساسی هست، اینکه از فیلتر مناسب برای واحد ADC استفاده کرده باشید مهم هست، اینکه مدار از برق شهر یا باتری تغذیه می شود مهم هست و حتی عملکرد باقیه واحدهای میکرو می تواند باعث وجود نویز روی ADC شودو ... تمام این موارد می توانند موجب اشکال شوند که نیاز به تمهیدات سخت افزاری خاص تری دارد.

توصیه می شه یک بار بدون اعمال شرط سمت متلب ، هرچیزی که از میکرو دریافت می کنید ، نمودار کنید ، اینجور قطعی تر می شه نظر داد. موقع خواندن ADC هم مطمئن شوید که ADC دردسترس هست و بعد عملیات خواندن را انجام دهید. برای کار دقیقتر، باید کد دقیق تری هم زد. برای اینجور کاربردها خواندن ADC به صورت وقفه ای مناسبتر است.

سوال دومتون مربوط به پروتکل USART هست و درست هست، اما الان شما دارید از USB CDC استفاده می کنید و فرکانس تامین USB 48MHz هست و داستانش جداست ...

موفق باشید.

با سلام و عرض خسته نباشید
ان شاء الله که خوب و سلامت باشید شرمنده باز مزاحم شدم پاراگراف 4 که فرموده بودید بدون اعمال شرط سمت متلب هر چیزی را از میکرو دریافت کنید من 3 بار این کار را انجام دادم که یکبار نقطه آخر عددی نزدیک به صفر شد، یکبار نقطه اول عددی نزدیک به صفر شد و یکبار هم درست در تمام نقاط عدد 5 را دریافت کرد.(عکس ها را ضمیمه کردم) میخواستم بپرسم مشکل کجا می تواند باشد که یکبار درست اطلاعات را دریافت می کند و یکبار در یک نقطه خطا دارد؟ باتشکر فراوان
There was an error during the execution of this program.
The application might become unstable and even useless.
It's recommended that you save your work and close this application.
Access violation at address 008D7965 in module 'bascavr.exe'. Read of address 00000000.
اقا یه سوال
من تازه میخوام با بسکام کار کنم
نرم افزارم ارور بالا رو میده وقتی تو محیط برنامه نویسیش = میذارم :|
یکی کمک کنه در راه علم
ali-kazemi8 :


سلام.

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


اااااااااا
برای سوالتون یه تاپیک جدا گونه ایجاد کنید تا بتونید سریعتر به جواب برسید.


با آرزوی موفقیت برای همگی ...
(۰۵-شهریور-۱۳۹۵, ۱۲:۰۴:۴۶)sharin نوشته است: [ -> ]ali-kazemi8 :


سلام.

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


اااااااااا
برای سوالتون یه تاپیک جدا گونه ایجاد کنید تا بتونید سریعتر به جواب برسید.


با آرزوی موفقیت برای همگی ...
با سلام دست شما درد نکنه و کد های میکرو (code 1) و کد اصلی متلب (code 2) و کد بدون اعمال شرط در متلب (code 3) را برای شما ضمیمه کردم یک سوال دیگه اینکه فرموده بودید در if از scope استفاده کنم واقعیتن نمیدونم کجای دستور باید اضافه کنم که محور افقی بدون داشتن اطلاعات هم ادامه پیدا نکنه.باتشکر
صفحه‌ها: 1 2 3 4