سلام من میخام با یه استپ موتور تعداد کلید زنی تک سوییچ را شمارش کنم یه برنامه نوشتم که سه قسمت دارد اول استپ موتور میچرخه و برنامه ای اضافه شده که از یک تا 1000 میشمارد و در قسمت اخر تعداد کلید زنی شمارش میشود و در واقع میخام روی خط اول ال سی دی شمارش شود و در خط بعد ال سی دی تعداد کلید فشرده شمارش شود برنامه ای که من نوشتم ایراد دارد و اون اینکه فقط اون موردی که در while اول نوشته شده کار انجام میشود اگر استپ موتور را اول قرار دهم فقط استپ موتور میچرخد اگر شمارنده را قرار دهم روی LCD فقط شمارش میشود و اگر کلید زنی را قرار دهم شمارش کلید های فشرده انجام میشود چکار کنم هر سه قسمت همزمان انجام شود استپ موتور بچرخد شمارش شود و بتوانم تعداد کلید های فشرده شده توسط استپ موتور را شمارش کنم ممنونم
اطلاعیه
Collapse
No announcement yet.
انجام چند برنامه به صورت همزمان
Collapse
X
-
پاسخ : انجام چند برنامه به صورت همزمان
سلام
می تونی توی یه حلقه شمارش رو انجام بدی و در ضمن در همون حلقه استپ موتور رو هم حرکت بدی .
برای شمارش کلید فشرده شده توسط موتور (اگه درست متوجه شده باشم کلیدی داری که موتور با چرخش آن را قطع و وصل می کند؟) می تونی از وقفه میکرو استفاده کنی و تعداد آنرا در متغییری نگهداری کنی و در lcd نمایش بدی .
موفق باشید
- به دنبال فرصت عمری تباه کردم ! فرصت جوانی ام بود من اشتباه کردم .
-
پاسخ : انجام چند برنامه به صورت همزمان
وقتی استپ موتور و شمارنده توی یک حلقه هستند استپ موتور یک گام میچرخد و بعد شمارنده یک شماره بالا میرود مجدد استپ موتور یک گام میچرخد بعد شمارنده یک شماره بالا میرود ولی من میخاهم استپ موتور و شمارنده با هم همزمان بچرخند؟ در ضمن با شمارش استپ موتور کلید هم زده شود و شمارش شود
دیدگاه
-
پاسخ : انجام چند برنامه به صورت همزمان
نوشته اصلی توسط moemوقتی استپ موتور و شمارنده توی یک حلقه هستند استپ موتور یک گام میچرخد و بعد شمارنده یک شماره بالا میرود مجدد استپ موتور یک گام میچرخد بعد شمارنده یک شماره بالا میرود ولی من میخاهم استپ موتور و شمارنده با هم همزمان بچرخند؟ در ضمن با شمارش استپ موتور کلید هم زده شود و شمارش شودروزی که درک کردیم همه چیز به خدا تعلق دارد . آن روز .روز طلوع دانش است
دیدگاه
-
پاسخ : انجام چند برنامه به صورت همزمان
سلام به همه دوستان
موضوعی ایی که دوستمون مطرح کردن موضوع خیلی خوب و حرفه ای هست . راستش من خودم قبلا خیلی به این موضع فکر کرده بودم ولی هیچ وقت نخواستم اونو بصورت جدی پیگیری کنم . :biggrin:
حالا در این تاپیک بنظرم فرصت خوبی هست که این موضوع رو روشن کنیم یا اگه قبلا چیزی بوده کسی ما رو روشن کنه !
من توی انجمن رو سرچ کردم چیزی پیدا نشد ( یا من نتونستم پیدا کنم ) :redface:
راستش برنامه نویسی MultiTHreading رو در سی شارپ خیلی خوب میشناسم و راحت باهاش کار میکنم آیا در میکرو هم این کار امکان پذیر هست ؟
خواهشان دوستان حرفه ای یه جواب درست حسابی به این سوال بدن . :rolleyes:
راستی فکری که خودم برای جواب شما دارم دوست من moem این هست :
شما می تونی از یه کریستال سریع استفاده کنی و در بین برنامه شمارشگر که با lcd داره کار میکنه یه وقفه رو فعال کنی و در اون وقفه موتور رو بحرکت در بیاری . راستش خودم این کارو تست نکردم ولی فکر مینکم جواب بده . چون عملکرد سیستم عامل ویندوز هم همین جوری دیگه یعنی زمان رو تقسیم می کنه بین کارا و این کارو آنقدر سریع انجام میده که ما فکر میکنم همه کارا دارن با هم انجام میشن . :icon_razz:
یعنی از وقفه ها برای حل مشکلت استفاده کن !
در ضمن یه جایی خوندم که از تایمر ها هم میشه استفاده کرد ولی نمیدونم چطوری ! :angry:
راستی یه سرچی هم زدم در رابطه با این موضوع این رو پیدا کردم . ولی خودم راستش چیزی ازش نفهمیدم (وقتشم نداشتم ببخشید )
http://www.bourbonstreetsoftware.com...velopment.html
موفق باشید
- به دنبال فرصت عمری تباه کردم ! فرصت جوانی ام بود من اشتباه کردم .
دیدگاه
-
پاسخ : انجام چند برنامه به صورت همزمان
من خودم رو حرفه ای نمیدونم ولی به خودم این جسارت رو میدم که در مورد این موضوع نظرم رو بگم.
آره حق باشماست multi tasking در AVR خیلی مهمه.
اصولا برای انجام چند کار بهصورت همزمان شما باید از وقفه ها استفاده کنید ولا غیر (atmega, atttiny ) البته این موضوع در Xmega فرق می کنه و شما می تونید علاوه بر وقفه های استاتیک از وقفه های دینامیک در حالت Low Level و همچنین از قابلیت Event System استفاده کنید که بسیار به شما کمک خواهد کرد.
اصولا وقفه ها دارای بردار وقفه هستند که ترتیب اولویت اونها رو تعیین می کنه وشما به وسیله ای ترتیب اولویت می تونید تعیین کنید که کار مهم شما در بین چند کار متفاوت چیه؟
اما ویژگی بسیار مفیدی که در Avr هست وجود تایمر ها و همچنین وقفه های مر بوط به تایمر هاست.
شما توسط فعال سازی وقفه های تایمر می تونید به صورت زمان بندی شده و منظم به انجام کارهاتون بپردازید.به عنوان در ATmega32 من تایمر یک رو با فرکانس مورد نظرم و در مود دو شیبه فعال می کنم . علاوه بر اون وقفه های مربوط به سرریز تایمر و وقفه های مربوط به تساوی مقایسه کانال A و B رو هم فعال می کنم.
با این شرایط من می تونم چندین کار رو به صورت همزمان (خیلی سریع ) انجام بدم به طوری که اخلالی در روند برنامه به وجود نیاد.
به عنوان مثال برای راه اندازی MMC توسط کدوِیژن و استفاده از کتابخانه ی Fat این مترجم شمامجبورید هر 10 میلی ثانیه یک تابع خاص رو صدا یرنی.
این کار فقط از عهده ی تایمر بر میاد . چون می تونی با تنظیم تایمر در فرکانس شمارش 100 هرتز و استفاده از وقفه ی سرریز یا تساوی مقایسه شما مطمئن هستی که اون تابع سر موعد مقرر فراخوانی میشه و بس.
از دید من جدای از همه ی اینا باید شما دیتا تایمینگ دقیقی هم اعمال کنید به طوری که روند شروع هر وقفه باعث اخلال در کار در حال انجام دیگه ای نشه.
به عنوان مثال شما باید دقیقا بدونید که اجرای برنامه ی داخل وقفه ی موردنظر شما از لحاظ تعداد کلاک چقدر طول میکشه و ...
.................
من دیگه عرضی ندارم.
.................
دوستان لطفا نظر بدند.
برای جوینده ی علم محدودیتی نیست. "ولو بالسین"
دیدگاه
-
پاسخ : انجام چند برنامه به صورت همزمان
با سلام
دوست عزیز تا جایی که من میدونم انجام دو عمل همزمان در میکرو ممکن نیست البته شنیدم میکرو هایی مثل xmega میتونن دو یا چند عمل رو به صورت همزمان به علت داشتن واحد dma انجام بدن .البته مطمعن نیستم درست باشه
مشکلی که شما میگید زمانی بروز میکنه که سرعت چرخش استپ موتور انقدر کم باشه که مخاطب بتونه این اختلاف در زمان عمل کرد رو ببینه .ولی وقتی سرعت چرخش موتور زیاد میشه و حالا جلوتر از اون یا عقبتر از اون عمل شمارش روی نمایشگر انجام میشه .دیگه مخاطب نمیتونه شناسایی کنه که کدوم عمل زودتر اتفاق افتاد و هر دو عمل همزمان به نظر میرسنروزی که درک کردیم همه چیز به خدا تعلق دارد . آن روز .روز طلوع دانش است
دیدگاه
-
پاسخ : انجام چند برنامه به صورت همزمان
سلام با تشکر از دوستانی که اظهار نظر کردند اما من قرار نیست شمارشگرمن اونقدر سریع بچرخد که من متوجه تغییر نشوم قرار است تعداد چرخش استپ موتور و در نتیجه ان تعداد کلید فشرده شده را شمارش کنم اینکه چند برنامه همزمان اجرا شود عملی است و باید برنامه را طوری نوشت که بتوان این کار را انجام داد اگه کسی میتونه ممنون میشم دوستان سوالاتی که من در اول بحث مطرح کردم رو بخونن با تشکر
دیدگاه
-
پاسخ : انجام چند برنامه به صورت همزمان
:surprised:
دوست عزیز
جواب شما رو قبلا دادم یکبار دیگه مرور کنید
فقط کد نویسی نکردم که وقتش رو نداشتم . با جواب های قبلی شما می تونی دقیقا همون کاری رو که می خوای انجام بدی .
مشکلی هست ؟
- به دنبال فرصت عمری تباه کردم ! فرصت جوانی ام بود من اشتباه کردم .
دیدگاه
-
پاسخ : انجام چند برنامه به صورت همزمان
در همین رابطه :
http://www.tabaar.com/Nashrie/Files/869.pdf
http://www.tamirkaran.ir/forum/TamirKaran366/multitasking-avr-5921.htmlمن نمىآتوانم فرضیه «بىآاخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآدانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
آلبرت اینشتین
منبع: http://fa.wikiquote.org
دیدگاه
-
پاسخ : انجام چند برنامه به صورت همزمان
نوشته اصلی توسط moemسلام من میخام با یه استپ موتور تعداد کلید زنی تک سوییچ را شمارش کنم یه برنامه نوشتم که سه قسمت دارد اول استپ موتور میچرخه و برنامه ای اضافه شده که از یک تا 1000 میشمارد و در قسمت اخر تعداد کلید زنی شمارش میشود و در واقع میخام روی خط اول ال سی دی شمارش شود و در خط بعد ال سی دی تعداد کلید فشرده شمارش شود برنامه ای که من نوشتم ایراد دارد و اون اینکه فقط اون موردی که در while اول نوشته شده کار انجام میشود اگر استپ موتور را اول قرار دهم فقط استپ موتور میچرخد اگر شمارنده را قرار دهم روی LCD فقط شمارش میشود و اگر کلید زنی را قرار دهم شمارش کلید های فشرده انجام میشود چکار کنم هر سه قسمت همزمان انجام شود استپ موتور بچرخد شمارش شود و بتوانم تعداد کلید های فشرده شده توسط استپ موتور را شمارش کنم ممنونم
در سیستم های کامپیوتری برای اعمال متفاوت بصورت همزمان باید که ابتدا برای هر عمل جداگانه ای یه تابع جداگانه تعریف کنید! :read:
سپس با تاخیرهای مناسب هر مرتبه یکی از این توابع اجرا شود! :nice:
در این روش تصور می شود که همزمان سه تابع با کاربردهای متفاوت همزمان اجرا می شوند! :nerd:
غیر از این اصلا برای پروسسور ها غیرممکن است که در آن واحد بر دو موضوع عملیات انجام دهند! حتی cpu های کامپیوتر!
لازم می دانم توضیح دهم! شما موسیقی گوش می دهید! همزمان در اینترنت وب گردی می نمایید! نرم افزار آنتی ویروس شما نیز در حال اسکن درایو ها است! تمام این اعمال اگرچه در ظاهر به صورت همزمان انجام میشوند ولی در عمل دقیقا غیر از این است و cpu کامپیوتر شما با توجه به سرعت پردازش و هسته های آن هر بار یکی از این اعمال را در کسر بسیار کوچکی از ثانیه با ترتیب یا بدون ترتیب پردازش می نمایند!
مثلا هر تابع باید در 5 میلی ثانیه کارانجام دهد! هر تابع در هر ثانیه حدود 200 بار اجرا میشود! فکر می کنم مقدار خوبی باشد و شما تصور می کنید سه تابع دارد بصورت همزمان اجرا می شود! :wow:
حالا اگه وقت شد سورس برنامه نویسی + شبیه سازی پروتئوس رو براتون میزارم!
اما یادتون باشه آنچه که باعث موفقیت شما می شود:
سخت کوشی است و نه نخبگی! :nerd:آنچه که باعث موفقیت انسان ها می شود سخت کوشی است و نه نخبه بودن! Porsche 911 Turbo S 181.000 $ USD
جناب سعدی فرموده بودند: "بر احوال ان مرد باید گریست _ که دخلش بود نوزده، خرجش بیست!"
که اگه الان بود باید میگفت: "بود حال و احوال آن مرد زار _ که دخلش ریال است ، خرجش دلار :|"
http://www.eca.ir/forum2/index.php?topic=80472.msg489565#msg489565
http://www.eca.ir/forum2/index.php?topic=82242.msg501926#msg501926
دیدگاه
-
پاسخ : انجام چند برنامه به صورت همزمان
سلام.من هم یه همچین مشکلیو دارم. برنامه ای نوشتم که تو اون یه استیپر میچرخه و انکودریو میچرخونه. و انکودر به اینت وصله.هربار اینت با لبه مشخص تحریک میشه یکی به متغیر اضافه میشه و تو lcd نمایش داده میشه.حالا وقتی اینت فعال میشه موتور نمیچرخه.اومدم موتور dc گذاشتم.اینبار وقتی میرفت تو lcd نمایش بده از شمردن جا میموند. حدود 400 خط انکودر از جلوش رد میشه فقط 5 - 6 تاش رو میرسه بخونه.با کم کردن سرعت موتور هم مشکل حل نمیشه.فقط غیر ممکن غیر ممکن است.
دیدگاه
دیدگاه