PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل در فرمان به موتور dc !!!!!!!!



a123
09-11-2010, 23:41
سلام، لطفا کمک کنید!!!!!!!!!!!!!! :(:(:(
مداری به شرح زیر دارم. در پروتئوس طراحی کردم و برنامه اش را نوشتم، اما کار نمیکنه. نیمدونم مشکل از طراحی برده یا برنامه؟؟؟؟؟؟؟؟
آیا کسی هست که بتونه مشکلش رو رفع کنه؟؟؟؟

مداری به یک موتور DC 12 Volt فرمان میدهد. قابل ذکر است، این موتور از یک برد اصلی نیز فرمان می­گیرد. لذا به کمک یک رله در صورت نیاز فرمان از برد اصلی قطع و کنترل آن به برد جدید واگذار می­شود.
در این مدار باید با یکبار فشار کلید فشاری SW1 موتور در جهت ساعتگرد با 50% سرعت آن ب­چرخد و به رله موجود ندر صورت نیاز فرمان داده می­شود تا موتور توسط برد جدید کنترل گردد. این دوران تا فشرده شدن میکروسوییچ SW2 ادامه خواهد داشت و بعد از فشار SW2 باید توقف موتور و قطع رله صورت گیرد. این مورد برای جهت پادساعتگرد به ترتیب برای کلیدهای SW3 و SW4 نیز اتفاق خواهد افتاد. قابل ذکر است، در حین چرخش موتور توسط این برد باید یک عدد LED نیز روشن شود.
لینک مدار طراحی شده:
You can see links before reply
لینک فایل برنامه C :
You can see links before reply

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

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

a123
10-11-2010, 17:57
کسی نیست کمک کنه ؟؟؟؟؟؟؟؟؟؟؟
lov: :(

fatemehjml
11-11-2010, 11:48
سلام
ورود شما رو به انجمن ایران میکرو خوش آمد میگم.
توی زبان c اپراتورهای = و == با هم فرق می کنند و شما هر موقع که خواستید از مقایسه توی دستورات if یا while استفاده کنید باید به جای = بنویسید ==.
داخل این لینک (You can see links before reply) می تونید کامل این مورد رو ببینید.
من نتونستم چک کنم ولی شما تست کنید و نتیجه شو بفرمایید.
موفق باشید.

a123
11-11-2010, 14:23
:alc: fatemehjml (You can see links before reply)
رفتم که امتحان کنم، ببینم نتیجه چی میشه.

a123
07-12-2010, 16:34
سلام
همچنان مشکل موجود است و با تغییر فوق نیز حل نشد.

با تشکر

mostafa_a
07-12-2010, 18:30
سلام .
عزیز if (PINC.5=1) رو با if (PINC.5==1) عوض کن و شروط if و کل حلقه های while که تک مساوی هستن یه = اضافه کن که شرطی بشه.
یه چیز دیگه معمولا سعی می شه از یه حلقه while داخل برنامه استفاده نشه.
پیشنهاد می کنم اول یه برنامه ساده بنویس که مثلا بدون اینکه اصلا چیزی بخونه بره چپ یا راست یا با یه تاخیر سوییچ بکنه بعد که از اون جواب گرفتی حداقل از مدارت مطمئن می شی :hi:

a123
08-12-2010, 09:43
سلام
با تشکر از mostafa_a ، قبلا fatemehjml در مورد تعویض = با == در دستورات شرطی گفتن من نیز تغییر دادم باز هم جواب نداد. یادم رفت فایل پیوست شده رو تغییر بدم. البته فایل 4shared رو تغیر دادم. :unh::unh:

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

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

mostafa_a
08-12-2010, 22: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) شما اینجا تموم می شه. می بخشید دور قبل سریع نگاه انداختم متوجه نشدم.:hi:

a123
09-12-2010, 16:35
عزیز مشکل کد شما به نظرم اینجاست تو اکولاد ها اشتباه کردی


// 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) شما اینجا تموم می شه. می بخشید دور قبل سریع نگاه انداختم متوجه نشدم.:hi:

سلام
با تشکر از توجه تون. :0013:

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


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;
{
{

mostafa_a
09-12-2010, 22:52
ببیند در برنامه شما اجرای دستورات داخل while(1) به آخر برنامه نمی رسه یعنی کل برنامه ای که باید در این حلقه while اجرا بشه در اکولادهاش نیست. شما قاعدتا یکی از آکولاد ها رو جابجا گذاشتی و جایی که باید قرار می گرفت هم انتهای کد شماست. حالا با توجه به الگوریتم خودتون ببینید کدوم اکولاد بسته باید به انتهای برنامه منتقل بشه. پیشنهاد می کنم اکولادهای باز و بسته رو نامگذاری کنید که راحت مشکلتون حل بشه.
موفق باشی.:hi: