ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 11
  1. #1
    2011/10/17
    تهران
    288
    1

    برنامه نویسی به شیوه ماژولار

    سلام تو سایت ها دنبال یه مطلب درباره برنامه نویسی برای میکرو ها به شیوه ماژولار میگشتم که ببینم اصلا چی هست و تصمیم گرفتم یکی از اون ها رو هم اینجا بذارم ببینین (مطلب از محمد علی قنبرلو )

    ین شیوه قالب کلی برنامه تون رو تعیین میکنه . یعنی شما قبل از اینکه هر بخشی از برنامه تون رو بخواهید بنویسید باید اول قالب و ساختار برنامه نویسی تون رو تعیین کنید که برنامه تون رو چه طوری میخواهید بنویسید ؟
    من خودم تا حالا از شیوه ماژولار استفاده کردم و توصیه می کنم شما هم از همین شیوه استفاده کنید .
    این توضیحات مربوط به زبان برنامه نویسی C هستش :
    وقتی شما تو Codevision تنظیمات آیسی رو انجام میدید در آخر میرسید به مهم ترین بخش برنامه یا همون حلقه اصلی ( While ) . خیلی ها تمام برنامه رو تو همین وایل مینویسند . گاهی اوقات این وایل به حدود 200 یا 300 خط میرسه و دیباگ کردنش خیلی سخت میشه . امکان خطا هم بسیار بالا میره .برای رفع این مشکل شما میتونید قبل از وایل توابعی رو که میخواهید استفاده کنید به طور دستی تعریف کنید . مثلا میخواهید موتور سمت راست شروع به چرخش به سمت چپ بکنه . به جای اینکه تو وایل به درایور دستور بدین میتونید یه تابع به طور دستی خودتون بنویسید که با دادن جهت و سرعت به عنوان دو تا متغیر به تابع خود تابع موتور رو کنترل کنه . توی وایل فقط کافیه تابع رو احضار کنید ! مثلا :
    While (1)
    {
    ….
    if (&hellip
    Motor ( 1,75);
    ….
    }
    توی تابع بالا 1 نشونه جهت موتور و 75 درصد سرعت موتوره . دیدین که تو وایل فقط یه خط نوشتین و توضیحات تابع رو قبل از وایل نوشتین .
    تو این روش شاید وایل اصلی شما حدود 20 یا 30 خط بشه . مثلا اگه شما خواستید روبات یه جا وایسه و یه چشمک هم با LED بزنه دیگه لازم نیست تمام برنامه رو تو وایل بنویسید بلکه میتونسد قبل از وایل یه تابع به نام ()Cheshmak تعریف کنید . مراحل برنامه رو توش بنویسید . حالا تو وایل فقط با احضار کردن اون تابع میتونید چشمک بزنید .
    یه نمونه ساده خط یاب با استفاده از این شیوه :
    ( لازم به ذکره OCR1A,B همون تایمره که برای تنظیم سرعت استفاده میشه و PWM میده .)
    In1-4 هم به in های درایور 0 و 1 میده . )


    void strate(void)
    {
    OCR1A=80;
    OCR1B=80;
    in1=1;
    in2=0;
    in3=1;
    in4=0;

    }
    void right1(void)
    {
    OCR1A=100;
    OCR1B=50;
    in1=1;
    in2=0;
    in3=1;
    in4=0;
    }

    void right2(void)
    {
    OCR1A=110;
    OCR1B=0;
    in1=1;
    in2=0;
    in3=1;
    in4=0;
    }

    void right3(void)
    {
    OCR1A=130;
    OCR1B=0;
    in1=1;
    in2=0;
    in3=0;
    in4=1;
    }

    void right4(void)
    {
    OCR1A=120;
    OCR1B=50;
    in1=1;
    in2=0;
    in3=0;
    in4=1;
    }

    void right5(void)
    {
    OCR1A=120;
    OCR1B=100;
    in1=1;
    in2=0;
    in3=0;
    in4=1;
    }

    void left1(void)
    {
    OCR1A=50;
    OCR1B=100;
    in1=1;
    in2=0;
    in3=1;
    in4=0;
    }

    void left2(void)
    {
    OCR1A=0;
    OCR1B=110;
    in1=1;
    in2=0;
    in3=1;
    in4=0;
    }

    void left3(void)
    {
    OCR1A=0;
    OCR1B=130;
    in1=0;
    in2=1;
    in3=1;
    in4=0;
    }

    void left4(void)
    {
    OCR1A=50;
    OCR1B=120;
    in1=0;
    in2=1;
    in3=1;
    in4=0;
    }

    void left5(void)
    {
    OCR1A=100;
    OCR1B=120;
    in1=0;
    in2=1;
    in3=1;
    in4=0;
    }
    …..

    void main(void)
    {

    …....
    …....


    while (1)
    {

    if (sen1<min)
    left5();


    if (sen11<min )
    right5();


    if (sen2<min )
    left4();


    if (sen10<min )
    right4();


    if (sen3<min )
    left3();


    if (sen9<min )
    right3();


    if (sen4<min )
    left2();


    if (sen8<min )
    right2();


    if (sen5<min )
    left1();


    if (sen7<min )
    right1();



    if (sen6<min )

    strate();

    };

    }

    به رویاهات فکر کن!!
  2. #2
    2010/04/09
    اسلامشهر
    1,494
    29

    پاسخ : برنامه نویسی به شیوه ماژولار

    با سلام
    ببخشید ولی به نظرم این چیزی که شما فرمودید مطلب جدیدی نیست ، به نظر من اگر روی multitasking و RTOS کار کنیم بهتره (البته نه اینکه مطلب جدیدی باشند ها خیر بلکه یادگیری این شکل از برنامه نویسی که شاید بشه گفت یکجور برنامه نویسی ماژولار باشه البته نه به مفهوم استفاده از توابع کتابخونه ای) ، فکر میکنم کلا منظور از ماژولار نوشتن یعنی اینکه برنامه رو طوری نوشت که در زمان های آینده برای توسعه و یا انجام کارهای مشابه نیار به صرف زمان کمتری باشه حالا میتونه استفاده از تابع که داخل فایل مین تعریف میشند یا توابع کتابخونه ای که در فایل های کتابخانه ای نوشته و به برنامه اصلی الصاق میشند باشه.
  3. #3
    2011/10/17
    تهران
    288
    1

    پاسخ : برنامه نویسی به شیوه ماژولار

    نقل قول نوشته اصلی توسط mojtaba_led
    با سلام
    ببخشید ولی به نظرم این چیزی که شما فرمودید مطلب جدیدی نیست ، به نظر من اگر روی multitasking و RTOS کار کنیم بهتره.
    سلام دوست عزیز
    همونطوری که شاید حدس زده باشین من تازه کارم و چون این مطلب به نظرم جالب اومد ، پستش کردم.
    درمورد multitasking و RTOS اگه میتونین اطلاعات بیشتری بذارین اینجا و اینکه فرقش با ماژولار و توابع فرغی چی هشتش.. مرسی :smile:

    به رویاهات فکر کن!!
  4. #4
    2010/04/09
    اسلامشهر
    1,494
    29

    پاسخ : برنامه نویسی به شیوه ماژولار

    خوب اگه به لحن بنده هم دقت کرده باشید متوجه میشید که من چیزی زیادی در این باره نمیدونم تازه با این ها آشنا شدم در مورد فرقشون همونطور که گفتم اول باید بگیم اصلا ماژولار یعنی چی ؟ اولین چیزی که به ذهن من میرسه هر وقت این کلمه ماژول و مازولار رو میشنوم یاد ماژولای plc میفتم که در مقابل کامپکت قرار میگره یعنی یه مجموعه فشرده، حالا این جا با توجه به اون نعریفی که شما گفتین میشه گفت ماژول یعنی چند خط برنامه مثل یک تابع که بشه بدون هیچ گونه تغییری در اون در هر برنامه با کاربری مشابه ازش استفاده کرد که نمونه بارز میشه همین توابع کتابخونه ای که با اینکلود کردنشون در ابتدای برنامه میشه از اون ها استفاده کرد ، از این بابت بود که گفتم چیز جدیدی نیست و باید باهاش آشنا بود اما در مورد multitasking , RTOS من چیز زیادی نمیدونم ولی فقط همین رو میتونم بگم که یک دید هر چند شاید اشتباه بهش بدست بیارید کلا تا اونجا که من فهمیدم تو این این دوشیوه برنامه نویسی کل برنامه به چند تا TASK تقسیم میشه و با اختصاص کل زمان اجرا به هر تسک به یک اندازه مشخص در یک چرخه بی نهایت فرایند اصلی مورد نظر انجام میشه منظور از هر تسک یک فایل برنامه هست که قسمتی از فرایند کنترلی ما در اون نوشته شده مثلا من الان خودم چند وقتی که میخوام به همین روش یک برنامه کنترل دور برای موتور از نوع PID کنترلر بنویسم که ست پوینتش بوسیله PC از طریق پورت USB تعیین میشه و اونور با یه انکودر سرعت و بخونه هم برای کنترل دور هم برای نمایش دور موتور روی یه سون سگمنت که حالا من یه سورس که فکر میکنم به روش MULTITASKING توسط اتمل برای ارتباط با پورت USB نوشته شده دارم که میخوام خودم دو تا تسک دیگه برای کارایی که گفتم بهش اضافه کنم اما هنوز نمیدونم چجوری !
  5. #5
    2007/11/25
    1,139
    7

    پاسخ : برنامه نویسی به شیوه ماژولار

    روش یک برنامه کنترل دور برای موتور از نوع PID کنترلر بنویسم که ست پوینتش بوسیله PC از طریق پورت USB تعیین میشه و اونور با یه انکودر سرعت و بخونه هم برای کنترل دور هم برای نمایش دور موتور روی یه سون سگمنت که حالا من یه سورس که فکر میکنم به روش MULTITASKING توسط اتمل برای ارتباط با پورت USB نوشته شده دارم که میخوام خودم دو تا تسک دیگه برای کارایی که گفتم بهش اضافه کنم اما هنوز نمیدونم چجوری !
    با سلام آقا مجتبی کار جالبیه به نظر من تو سایت مطرح کن تاهم مشکل شما حل بشه و هم ما یه چیزی یاد بگیریم
  6. #6
    2007/03/01
    تهران
    1,248
    175

    پاسخ : برنامه نویسی به شیوه ماژولار

    با سلام،

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

    برنامه نویسی ماژولار بیشتر برای مصارف عمومی و کد باز مفهوم پیدا میکنه و به نظر من بخش اصلی و گسترده تر برنامه نویسی ماژولار در میکرو بر میگرده به انجام تعاریف سخت افزاری که فکر میکنم با ماکرو نویسی میتونه انسجام پیدا کنه و برای تغییرات جزیی یا کلی آتی الزامیه و البته ممکنه کمی حجم برنامه رو زیادتر کنه و یا در برخی مواقع سرعت برنامه رو کاهش بده! که به همین دلیل، در برنامه نویسی های اختصاصی که شاید هم حجم و سرعت مهم باشه، ممکنه اصلا از روش ماژولار استفاده نشه.

    به این خطوط توجه کنید که PB2 رو خروجی تعریف میکنه و مثلا یه LED سبز رو که بهش متصله خاموش و روشن میکنه :
    DDRB |= (1<<2);
    PORTB |= (1<<2);
    PORTB &= ~(1<<2);

    و این خطوط هم همون کار رو انجام میده :
    //----------- Green LED (output)
    #define GLED_PRT PORTB
    #define GLED_DDR DDRB
    #define GLED_BIT 2

    //---------------------
    #define GLED_INI() {GLED_DDR |= (1<<GLED_BIT); GLED_PRT &= ~(1<<GLED_BIT);} //Set output & OFF
    #define GLED(x) (x ? (GLED_PRT |= (1<<GLED_BIT)) : (GLED_PRT &= ~(1<<GLED_BIT)))

    و در یک قدم جلوتر این هم همونه ( با تعریف یه ماکرو دیگه ) :
    //----------- Green LED (output)
    #define GLED_PRT PORTB
    #define GLED_DDR DDRB
    #define GLED_BIT 2

    //---------------------
    #define GLED_INI() {sbi(GLED_DDR, GLED_BIT); cbi(GLED_PRT, GLED_BIT);} //Set output & OFF
    #define GLED(x) (x ? (sbi(GLED_PRT, GLED_BIT)) : (cbi(GLED_PRT, GLED_BIT)))

    خوب حالا به نظر شما کدوم نوع از نمونه برنامه نویسی ارائه شده در آینده راحت تر توسعه داده میشه و کد نهایی برنامه در کدوم روش زیبا تر و جمع و جور تر میشه؟ کدومش رو راحت تر میشه Trace یا بررسی کرد؟

    البته این یک نمونه ساده و پیش پا افتاده است، حالا اگر فراتر بریم و از سایر رجیسترهای میکرو برای کاربردهای متنوعی مثل PWM, Timer و غیره استفاده کنیم، با توجه به تفاوت های سخت افزاری بین انواع میکروها ( حتی یک خانواده واحد) ، این موضوع ملموس تر و پیچیده تر خواهد شد.......

    به نظرم نکته مهم ماژولار نویسی، همینه... :biggrin:

    ( برای مشاهده بهتر کدها، اونا رو توی ادیتور خودتون کپی کنید تا از این بهم ریختگی در بیان!!! )

    و نکته بعدی اینکه برنامه نویسی MultiTasking کاملا ضروری و غیر قابل اجتنابه و با موضوع ماژولار نویسی خیلی مربوط نیست و استفاده از OS هم به نظرم برنامه نویسی خیلی ماژولاره! و همیشه قابل استفاده نیست ( بدلیل حجم و سرعت ) و باید بگم که خود من استفاده از OS رو خیلی مناسب کار حرفه ای نمیبینم ...
    مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

    Sh_Nourbakhsh@Yahoo.com

    http://s2.picofile.com/file/7170362468/_Wall_e_.jp
  7. #7
    2010/04/09
    اسلامشهر
    1,494
    29

    پاسخ : برنامه نویسی به شیوه ماژولار

    و نکته بعدی اینکه برنامه نویسی MultiTasking کاملا ضروری و غیر قابل اجتنابه و با موضوع ماژولار نویسی خیلی مربوط نیست و استفاده از OS هم به نظرم برنامه نویسی خیلی ماژولاره! و همیشه قابل استفاده نیست ( بدلیل حجم و سرعت ) و باید بگم که خود من استفاده از OS رو خیلی مناسب کار حرفه ای نمیبینم ...
    ممنون
    اگه میشه در مورد برنامه نویسی MultiTasking یه خورده توضیح بدین مثلا اصول نوشتن یه همچین برنامه نویسی چیه چارت کلی همچین برنامه نویسی ای به چه صورت هست ؟ و اگر بشه من اون سورسی که گفتم لینکشو بزارم تا اگه وقت داشتین یه نگاهی بهش بندازید ببینید اصلا MultiTasking هست یا نه ؟

    البته با اجازه دوست عزیز eric_s88 ، ببخشید که دارم سوالم رو توی تایپیک شما مطرح میکنم .
  8. #8
    2011/10/17
    تهران
    288
    1

    پاسخ : برنامه نویسی به شیوه ماژولار

    نقل قول نوشته اصلی توسط mojtaba_led

    البته با اجازه دوست عزیز eric_s88 ، ببخشید که دارم سوالم رو توی تایپیک شما مطرح میکنم .
    خواهش میکنم من خوشحالم میشمٍ و میخوام از پست هایی که مطرح میشه نهایت استفاده رو بکنم
    به رویاهات فکر کن!!
  9. #9
    2007/03/01
    تهران
    1,248
    175

    پاسخ : برنامه نویسی به شیوه ماژولار

    با سلام،

    ساده ترین برنامه MultiTask بر اساس سیستم عامل DOS نوشته میشه! به این صورت که شما یه تایمر رو بصورت لود شدن خودکار فعال و ست میکنی ( مثلا هر 10 میلی ثانیه ) و از سر ریزش بعنوان تیک سیستم استفاده میکنی. حالا برای هر Task که داری یه اسم، یه فلگ و یه کانتر مجزا تعریف میکنی. بر اساس کانتری که برای هر Task تعریف کردی، در همون تعداد تیک، به این واقعه رسیدگی میکنی. مثلا دو تا LED داری که یکیش هر 30 میلی ثانیه خاموش و روشن میشه و دیگری هر 70 میلی ثانیه، پس شما در هر 3 تیک به وضعیت یکی رسیدگی میکنی و در هر 7 تیک به وضعیت اون دیگری، یعنی در این سیستم فرضی، شما با رزولوشن 10میلی ثانیه ای به وقایع رسیدگی خواهید کرد. البته این یه مثال ساده است، مواقعی پیش میاد که شما در غیر از این شیوه کارتون پیش نخواهد رفت. مثلا میخواید یه تاخیر 2 ثانیه ای رو داشته باشید و در عین حال به کلی کار دیگه بپردازید و.....
    این در اصل MultiTask نیست، بلکه رسیدگی به وقایع در هر 10 میلی ثانیه است که بهش میگن مولتی تسک..... :mrgreen:

    این رو به احتمال زیاد دیدید، ( ببخشید اگه تکراریه ) توی این یه توضیح مختصری در این مورد داده :
    ttp://www.avrfreaks.net/modules/FreaksArticles/files/14/Multitasking%20on%20an%20AVR.pdf
    مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

    Sh_Nourbakhsh@Yahoo.com

    http://s2.picofile.com/file/7170362468/_Wall_e_.jp
  10. #10
    2010/04/09
    اسلامشهر
    1,494
    29

    پاسخ : برنامه نویسی به شیوه ماژولار

    ممنون نه اینو ندیده بودم
    اگه میشه به این سورس اتمل یک نگاهی بندازید ببینید چیه ؟

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 11

موضوعات مشابه

  1. پاسخ: 38
    آخرين نوشته: 2016/03/24, 20:09
  2. طراحی ماژولار
    توسط m0hammad110 در انجمن مفاهیم پایه برق و الکترونیک
    پاسخ: 3
    آخرين نوشته: 2016/01/15, 22:33
  3. نوشتن برنامه به صورت ماژولار
    توسط hamedb3269 در انجمن برنامه نويسي و اينترفيس
    پاسخ: 1
    آخرين نوشته: 2014/06/22, 14:05
  4. برد آموزشي ماژولار
    توسط khast khodaiebehnam در انجمن ماژول های RF - ISM Band و بلوتوث
    پاسخ: 4
    آخرين نوشته: 2010/12/18, 18:58
  5. پاسخ: 2
    آخرين نوشته: 2007/12/06, 22:47

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •