سلام
در قسمتی از یک پروژه سیگنال هایی با دامنه های متفاوت و نرخی در حدود 20k در هر ثانیه، وارد مداری شده و دامنه آن در 256 کانال به عنوان داده اصلی توسط میکرو تعیین شده و ذخیره میگردد. همچنین نیاز به ارسال این 256 داده به کامپیوتر در هر 1 ثانیه که هر کدام 16 بیتی نیز میباشند هست. در صورتیکه نرخ انتقال اطلاعات هم 38400baud باشد در هر ثانیه زمانی حدود 100 میلی ثانیه صرف انتقال اطلاعات میشود که در این صورت در هر ثانیه حدود 2100 تا از سیگنال ها از دست خواهد رفت چرا که در این مدت زمان میکرو در حال انتقال اطلاعات بوده و توانایی آنالیز سیگنال های ورودی به میکرو را ندارد.
2 راه به فکر خودم میرسد. یکی استفاده از 2 میکرو، یکی برای آنالیز سیگنال و ذخیره اطلاعات در یک حافظه و دیگری برای ارسال اطلاعات. و راه دیگر اینکه در مدت زمان ارسال اطلاعات، آنالیز سیگنال ها متوقف شود، که البته در این مورد، در صورتی که مدت زمان آنالیز 100 ثانیه باشد، به جای 100 ثانیه باید 110 ثانیه صبر کرد چراکه 10 ثانیه صرف انتقال اطلاعات میشود.
معمولا برای حل این مشکل چه روشهایی وجود؟
با تشکر
(۱۴-آبان-۱۳۹۱, ۲۲:۰۵:۵۹)ashaebani2002 نوشته است: [ -> ]سلام
در قسمتی از یک پروژه سیگنال هایی با دامنه های متفاوت و نرخی در حدود 20k در هر ثانیه، وارد مداری شده و دامنه آن در 256 کانال به عنوان داده اصلی توسط میکرو تعیین شده و ذخیره میگردد. همچنین نیاز به ارسال این 256 داده به کامپیوتر در هر 1 ثانیه که هر کدام 16 بیتی نیز میباشند هست. در صورتیکه نرخ انتقال اطلاعات هم 38400baud باشد در هر ثانیه زمانی حدود 100 میلی ثانیه صرف انتقال اطلاعات میشود که در این صورت در هر ثانیه حدود 2100 تا از سیگنال ها از دست خواهد رفت چرا که در این مدت زمان میکرو در حال انتقال اطلاعات بوده و توانایی آنالیز سیگنال های ورودی به میکرو را ندارد.
2 راه به فکر خودم میرسد. یکی استفاده از 2 میکرو، یکی برای آنالیز سیگنال و ذخیره اطلاعات در یک حافظه و دیگری برای ارسال اطلاعات. و راه دیگر اینکه در مدت زمان ارسال اطلاعات، آنالیز سیگنال ها متوقف شود، که البته در این مورد، در صورتی که مدت زمان آنالیز 100 ثانیه باشد، به جای 100 ثانیه باید 110 ثانیه صبر کرد چراکه 10 ثانیه صرف انتقال اطلاعات میشود.
معمولا برای حل این مشکل چه روشهایی وجود؟
با تشکر
اگه میشه ی خورده واضح تر مطرح کنید
![Amaze Amaze](https://www.iranled.com/forum/images/smilies2/my.gif)
فرض کنید قراره یکسری عملیاتی بر روی داده های ورودی به میکرو انجام بشه. مثلا توسط adc دامنه سیگنال های ورودی دیجیتالی شده و بعد آنالیز هایی روی آن انجام و بعد در داخل میکرو ذخیره بشه. همچنین نیاز هست که این اطلاعات ذخیره شده هر 1 ثانیه یک بار هم به کامپیوتر ارسال شوند. با توجه به سرعت ارسال و مقدار اندازه اطلاعاتی که قرار هست ارسال بشه (در حدود 512 بایت)، مدت زمانی در حدود 100 میلی ثانیه (در هر ثانیه) صرف انتقال اطلاعات می شود. که باعث از دست رفتن حدود 2100 سیگنال، در مدت زمان انتقال اطلاعات به pc می شود(یعنی cpu توانایی آنالیز اطلاعات ورودی به میکرو را ندارد و درگیر ارسال اطلاعات میباشد). معمولا برای حل این مشکل که ارسال اطلاعات تاثیری روی آنالیز اطلاعات نگذارد چه روشهایی وجود دارد؟
با تشکر
بخش هاي نقل و انتقال به صورت آسنكرون هم قابل استفاده هستند.
به اين صورت كه مثلا وقتي 1 بايت داده گرفت ، وقفه اي رخ مي دهه و ...
در اين حين هم CPU درگير نمي شه و مي تونه به كاراي ديگه برسه و وقتي وقفه رخ داد ، اطلاعات رو از بافر Uart مثلا مي ندازه تو حافظه ي ميكرو و ...
ميكروهايي كه DMA هم دارن ، بدون اينكه CPU درگير بشه ، اطلاعات مستقيم مي تونه روي حافظه ي ميكرو قرار بگيرهه و ميكرو به كاراي ديگه مي رسه و ...
كمي در مورد امكانات وقفه و ... ميكرويي كه استفاده مي كنيد تحقيق كنيد.
جدا از اينها هر انتقالي محدوديتي دارهه ( بيش از حد توان نمي تونيد انتظار داشته باشيد ). اگر مي تونيد اطلاعات رو خلاصه بفرستيد كه سمت ديگه باز سازي بشه و يا ...
بسته به هدف كاراي زيادي مي شه كرد ، كمي خلاقيت ، چاره ي بخش اصلي مشكلات هست.
موفق باشيد.
دوست عزیز ما هم در یک پروژه به مشکلی تقریبا مثل مشکل شما برخورد کردیم
یک راه حل ساده برای ان این است که شما در هر ثانیه 512 بایت باید ارسال کنید در این داده ها هر داده ای که مقدارش 255 است را تبدیل به 254 کنید وانرا بصورت انلاین ارسال کنید(یعنی همان لحظه کهadc داده را به شما داد)
بعد از انکه 512 بایت ارسال شد یک بایت به مقدار 255 را هم بعنوان سینک ارسال کن در طرف اپلیکیشن با استفاده از داده سینک داده های قبلی را سورت کرده واستفاده بکن
وبدین ترتیب پرت زمان نخواهی داشت خصوصا اینکه اگر از اینترپرانت پورت سریال استفاد بکنی خیلی بهتر (تر)خواهد شد
موفق باشی