NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4886 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 10 از 10

موضوع: مشکل در فرمان به موتور dc !!!!!!!!

  1. #1
    عضو جدید
    تاریخ عضویت
    Nov 2010
    نوشته ها
    6
    تشکر
    4
    تشکر شده 0 بار در 0 پست

    Exclamation مشکل در فرمان به موتور dc !!!!!!!!

    سلام، لطفا کمک کنید!!!!!!!!!!!!!!
    مداری به شرح زیر دارم. در پروتئوس طراحی کردم و برنامه اش را نوشتم، اما کار نمیکنه. نیمدونم مشکل از طراحی برده یا برنامه؟؟؟؟؟؟؟؟
    آیا کسی هست که بتونه مشکلش رو رفع کنه؟؟؟؟

    مداری به یک موتور DC 12 Volt فرمان میدهد. قابل ذکر است، این موتور از یک برد اصلی نیز فرمان می­گیرد. لذا به کمک یک رله در صورت نیاز فرمان از برد اصلی قطع و کنترل آن به برد جدید واگذار می­شود.
    در این مدار باید با یکبار فشار کلید فشاری SW1 موتور در جهت ساعتگرد با 50% سرعت آن ب­چرخد و به رله موجود ندر صورت نیاز فرمان داده می­شود تا موتور توسط برد جدید کنترل گردد. این دوران تا فشرده شدن میکروسوییچ SW2 ادامه خواهد داشت و بعد از فشار SW2 باید توقف موتور و قطع رله صورت گیرد. این مورد برای جهت پادساعتگرد به ترتیب برای کلیدهای SW3 و SW4 نیز اتفاق خواهد افتاد. قابل ذکر است، در حین چرخش موتور توسط این برد باید یک عدد LED نیز روشن شود.
    لینک مدار طراحی شده:
    http://www.4shared.com/file/s5WL1lg3/board.html
    لینک فایل برنامه C :
    http://www.4shared.com/file/jqbZP3YZ/program.html

    البته فایل Pfd مدار طراحی شده و فایل txt برنامه نوشته شده آپلود شده است. اما برای تهیه فایل پروتئوی میتونید به لینکهای فوق مراجعه کنید.

    با تشکر فراوان


    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: txt program.txt (2.9 کیلو بایت, 22 نمايش)
    • نوع فایل: pdf board.pdf (158.9 کیلو بایت, 20 نمايش)
    ویرایش توسط a123 : 07-12-2010 در ساعت 16:57

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    عضو جدید
    تاریخ عضویت
    Nov 2010
    نوشته ها
    6
    تشکر
    4
    تشکر شده 0 بار در 0 پست

    Icon16 کسی نیست کمک کنه؟؟؟؟؟؟؟؟؟؟؟

    کسی نیست کمک کنه ؟؟؟؟؟؟؟؟؟؟؟

  4. #3
    کاربر فعال
    تاریخ عضویت
    Oct 2007
    نام
    اصفهان
    نوشته ها
    105
    تشکر
    78
    تشکر شده 144 بار در 64 پست

    پیش فرض

    سلام
    ورود شما رو به انجمن ایران میکرو خوش آمد میگم.
    توی زبان c اپراتورهای = و == با هم فرق می کنند و شما هر موقع که خواستید از مقایسه توی دستورات if یا while استفاده کنید باید به جای = بنویسید ==.
    داخل این لینک می تونید کامل این مورد رو ببینید.
    من نتونستم چک کنم ولی شما تست کنید و نتیجه شو بفرمایید.
    موفق باشید.

  5. کاربران : 2 تشکر کرده اند از شما fatemehjml برای ارسال این پست سودمند:


  6. #4
    عضو جدید
    تاریخ عضویت
    Nov 2010
    نوشته ها
    6
    تشکر
    4
    تشکر شده 0 بار در 0 پست

    پیش فرض با تشکر از دوست عزیز

    fatemehjml
    رفتم که امتحان کنم، ببینم نتیجه چی میشه.

  7. #5
    عضو جدید
    تاریخ عضویت
    Nov 2010
    نوشته ها
    6
    تشکر
    4
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام
    همچنان مشکل موجود است و با تغییر فوق نیز حل نشد.

    با تشکر

  8. #6
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2010
    نام
    مصطفی
    نوشته ها
    23
    تشکر
    126
    تشکر شده 23 بار در 10 پست

    پیش فرض

    سلام .
    عزیز if (PINC.5=1) رو با if (PINC.5==1) عوض کن و شروط if و کل حلقه های while که تک مساوی هستن یه = اضافه کن که شرطی بشه.
    یه چیز دیگه معمولا سعی می شه از یه حلقه while داخل برنامه استفاده نشه.
    پیشنهاد می کنم اول یه برنامه ساده بنویس که مثلا بدون اینکه اصلا چیزی بخونه بره چپ یا راست یا با یه تاخیر سوییچ بکنه بعد که از اون جواب گرفتی حداقل از مدارت مطمئن می شی

  9. تشکرها از این نوشته :


  10. #7
    عضو جدید
    تاریخ عضویت
    Nov 2010
    نوشته ها
    6
    تشکر
    4
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام
    با تشکر از mostafa_a ، قبلا fatemehjml در مورد تعویض = با == در دستورات شرطی گفتن من نیز تغییر دادم باز هم جواب نداد. یادم رفت فایل پیوست شده رو تغییر بدم. البته فایل 4shared رو تغیر دادم.

    یه سوال منظورتون در مورد اینکه "معمولا سعی می شه از یه حلقه while داخل برنامه استفاده نشه." چیه. یعنی باید چه کنم؟

    با تشکر از توجه شما

  11. #8
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2010
    نام
    مصطفی
    نوشته ها
    23
    تشکر
    126
    تشکر شده 23 بار در 10 پست

    پیش فرض

    عزیز مشکل کد شما به نظرم اینجاست تو اکولاد ها اشتباه کردی

    while (1)
    { //1
    // Place your code here
    if (PINC.5=1)
    { // 2
    delay_ms(250);
    PORTB.4=1;
    PORTD.2=1;
    OCR1A=125;
    PORTD.0=1;
    } //2
    while (PINC.4=0)
    { //3
    } //3
    PORTB.4=0;
    PORTD.2=0;
    PORTD.1=0;
    PORTD.0=0;
    OCR1A=0x00;
    } //1



    در ادامه هم اکولادهایی که گذاشتین باعث اتمام برنامه می شه. اما تا ایجایی که گذاشتم فقط در برنامه شما اجرا می شن !!!!!!!
    چون حلقه while(1) شما اینجا تموم می شه. می بخشید دور قبل سریع نگاه انداختم متوجه نشدم.

  12. تشکرها از این نوشته :


  13. #9
    عضو جدید
    تاریخ عضویت
    Nov 2010
    نوشته ها
    6
    تشکر
    4
    تشکر شده 0 بار در 0 پست

    پیش فرض در باره آکولاد

    نقل قول نوشته اصلی توسط mostafa_a نمایش پست ها
    عزیز مشکل کد شما به نظرم اینجاست تو اکولاد ها اشتباه کردی


    // Place your code here
    if (PINC.5=1)
    { // 2
    delay_ms(250);
    PORTB.4=1;
    PORTD.2=1;
    OCR1A=125;
    PORTD.0=1;
    } //2
    while (PINC.4=0)
    { //3
    } //3
    PORTB.4=0;
    PORTD.2=0;
    PORTD.1=0;
    PORTD.0=0;
    OCR1A=0x00;
    } //1



    در ادامه هم اکولادهایی که گذاشتین باعث اتمام برنامه می شه. اما تا ایجایی که گذاشتم فقط در برنامه شما اجرا می شن !!!!!!!
    چون حلقه while(1) شما اینجا تموم می شه. می بخشید دور قبل سریع نگاه انداختم متوجه نشدم.
    سلام
    با تشکر از توجه تون.

    منظورتون اینه که باید اون آکولاد قرمز رنگ توی متن زیر رو حذف کنم ؟

    while (1)
    }
    // Place your code here
    if (PINC.5==1)
    }
    delay_ms(250);
    PORTB.4=1;
    PORTD.2=1;
    OCR1A=125;
    PORTD.0=1;
    {
    while (PINC.4==0)
    }
    {
    PORTB.4=0;
    PORTD.2=0;
    PORTD.1=0;
    PORTD.0=0;
    OCR1A=0x00;
    {
    if (PINC.3==1)
    }
    delay_ms(250);
    PORTB.4=1;
    PORTD.0=1;
    OCR1A=0x00;
    while (PINC.3==1)
    }
    {
    PORTB.4=0;
    PORTD.5=0;
    {
    {
    ویرایش توسط a123 : 09-12-2010 در ساعت 16:46

  14. #10
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2010
    نام
    مصطفی
    نوشته ها
    23
    تشکر
    126
    تشکر شده 23 بار در 10 پست

    پیش فرض

    ببیند در برنامه شما اجرای دستورات داخل while(1) به آخر برنامه نمی رسه یعنی کل برنامه ای که باید در این حلقه while اجرا بشه در اکولادهاش نیست. شما قاعدتا یکی از آکولاد ها رو جابجا گذاشتی و جایی که باید قرار می گرفت هم انتهای کد شماست. حالا با توجه به الگوریتم خودتون ببینید کدوم اکولاد بسته باید به انتهای برنامه منتقل بشه. پیشنهاد می کنم اکولادهای باز و بسته رو نامگذاری کنید که راحت مشکلتون حل بشه.
    موفق باشی.

  15. تشکرها از این نوشته :


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

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