قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية hussien1995
hussien1995
:: عضو فضي ::
تاريخ التسجيل: Nov 2012
الدولة: syria
المشاركات: 765
نشاط [ hussien1995 ]
قوة السمعة:90
قديم 06-03-2015, 03:04 PM المشاركة 1   
ha ما الخطئ في كتابة هذا الكود؟! Twitter FaceBook Google+



السلام عليكم
إخواني الكرام هذا الكود كتبته لثلاث سويتشات فعند الضغط على الأولى تضيء الليد الأول وعند فصل السويتش تبقى ثلاث ثواني مضاءة وبعدها تفصل والكود عمل جيداً ولكن المشكلة أنني أريد أن تعمل السويتشات معاً يعني مثلاً السويتش الأول والثالث أو الثاني والأول وهكذا ولكن المشكلة أن البيك لاتنفذ إلا أمر واحد يعني أضغط السويتش الأول فتعمل الليد الأول وعند الضغط على السويتش الثالث مثلاً لايعمل حتى أفصل السويتش الأول وأنتظر ثلاث ثواني حتى إنتهاء الأمر الأول وبعدها يعمل الثالث فهل هناك طريقة لكي تعمل السويتشات بشكل منفصل ودقيق لأن الدقة ضرورية في هذه الدارة وشكراً.
كود:
void main() {
trisa.f2=1;
trisa.f3=1;
trisa.f4=1;
trisb=0;
portb=8;
delay_ms(1000);
 portb=0;
delay_ms(500);
portb=8;
delay_ms(500);
portb=0;
delay_ms(500);
portb=8;
delay_ms(500);
portb=0;
delay_ms(500);
portb=8;
delay_ms(500);
portb=0;
delay_ms(500);
portb=8;
delay_ms(500);
while(1){
if(porta.f2==1){portb.f0=1;delay_ms(3000);}
else{portb.f0=0;}
if(porta.f3==1){portb.f1=1;delay_ms(3000);}
else{portb.f1=0;}
if(porta.f4==1){portb.f2=1;delay_ms(3000);}
else{portb.f2=0;}
}
}


التعديل الأخير تم بواسطة : hussien1995 بتاريخ 06-03-2015 الساعة 03:07 PM
اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 07-03-2015, 03:40 AM المشاركة 2   
افتراضي


السلام عليكم
إخواني الكرام هذا الكود كتبته لثلاث سويتشات فعند الضغط على الأولى تضيء الليد الأول وعند فصل السويتش تبقى ثلاث ثواني مضاءة وبعدها تفصل والكود عمل جيداً ولكن المشكلة أنني أريد أن تعمل السويتشات معاً يعني مثلاً السويتش الأول والثالث أو الثاني والأول وهكذا ولكن المشكلة أن البيك لاتنفذ إلا أمر واحد يعني أضغط السويتش الأول فتعمل الليد الأول وعند الضغط على السويتش الثالث مثلاً لايعمل حتى أفصل السويتش الأول وأنتظر ثلاث ثواني حتى إنتهاء الأمر الأول وبعدها يعمل الثالث فهل هناك طريقة لكي تعمل السويتشات بشكل منفصل ودقيق لأن الدقة ضرورية في هذه الدارة وشكراً.
كود:
void main() {
trisa.f2=1;
trisa.f3=1;
trisa.f4=1;
trisb=0;
portb=8;
delay_ms(1000);
 portb=0;
delay_ms(500);
portb=8;
delay_ms(500);
portb=0;
delay_ms(500);
portb=8;
delay_ms(500);
portb=0;
delay_ms(500);
portb=8;
delay_ms(500);
portb=0;
delay_ms(500);
portb=8;
delay_ms(500);
while(1){
if(porta.f2==1){portb.f0=1;delay_ms(3000);}
else{portb.f0=0;}
if(porta.f3==1){portb.f1=1;delay_ms(3000);}
else{portb.f1=0;}
if(porta.f4==1){portb.f2=1;delay_ms(3000);}
else{portb.f2=0;}
}
}
الحل الوحيد هي بأستخدام الانتربت لان ديلي delay يجبر المايكرو على الانتظار ولكن بأستخدام الانتربت يستطيع مايكرو تنفيذ جميع الاوامر

سأعطيك الفكره
كود:
sbit sw1 at RA2_bit;
sbit sw1_dir at TRISA2_bit;
sbit sw2 at RA3_bit;
sbit sw2_dir at TRISA3_bit;
sbit sw3 at RA4_bit;
sbit sw3_dir at TRISA4_bit;

char sw1_flag=0,sw2_flag=0,sw3_flag=0 ;
char sw1_time=0,sw2_time=0,sw3_time=0 ;

//Timer1

//Prescaler 1:2; TMR1 Preload = 15536; Actual Interrupt Time : 50 ms

//Place/Copy this part in declaration section
void InitTimer1(){
  T1CON	 = 0x11;
  TMR1IF_bit	 = 0;
  TMR1H	 = 0x3C;
  TMR1L	 = 0xB0;
  TMR1IE_bit	 = 1;
  INTCON	 = 0xC0;
}

void Interrupt(){
  if (TMR1IF_bit){
    TMR1IF_bit = 0;
    TMR1H	 = 0x3C;
    TMR1L	 = 0xB0;
    //Enter your code here
    if(sw1_flag==1)sw1_time++;
  }
}

void main() {
 sw1_dir=1;
 sw2_dir=1;
 sw3_dir=1;
trisb=0;
portb=8;
delay_ms(1000);
 portb=0;
delay_ms(500);
portb=8;
delay_ms(500);
portb=0;
delay_ms(500);
portb=8;
delay_ms(500);
portb=0;
delay_ms(500);
portb=8;
delay_ms(500);
portb=0;
delay_ms(500);
portb=8;
delay_ms(500);
while(1){
if(sw1==0)
           {
            sw1_flag=1;
           }
 if(sw1_flag==1 && sw1_time>=10)// this mean time >= 500
          {
           sw1_flag=0;
           sw1_time=0;
           PORTB.F0=1;
           
          }

}
بالنسبه للكود الانتربت فهناك برنامج من شركه مايكروشيب اسمه timer-calculator
يحتاج منك العائله الي ينتمي لها البيك و تردد كرستاله و نوع تايمر وزمن الانتربت عندها يعطيك الكود الكامل
http://www.mikroe.com/timer-calculator/

هنا مثلا زمن الانتربت كل 50ms عندما نضغط على سويج نجعل flag لهذا سويج =1 لكي يدل على انه تم ضغط سويج
وفي الانتربت تضع شرط اذا flag لسويج =1 قم بتفعيل متغير اخر لنسميه مثلا time يعني sw_time هنا مايكرو كل 50 ملي ثانيه راح يتم مقاطعته لينفذ اوامر داله الانتربت وبتالي هذه طريقه لن تأخر عمل مايكرو

انت أفهم طريقه ستلاحظ تطبيقها سهل جدا

تحياتي


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 07-03-2015 الساعة 03:45 AM
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً hussien1995 ( شكر العضو على هذه المشاركة )
اعجاب hussien1995 ( أعجبته المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 08-03-2015, 11:33 PM المشاركة 3   
افتراضي


اخي العزيز
لم يعمل الكود
شكرا اخي


الصورة الرمزية hussien1995
hussien1995
:: عضو فضي ::
تاريخ التسجيل: Nov 2012
الدولة: syria
المشاركات: 765
نشاط [ hussien1995 ]
قوة السمعة:90
قديم 09-03-2015, 01:47 PM المشاركة 4   
ha


شكراً جزيلاً اخ حسن مثل العادة تتحفنا بردودك.
أخي الكريم بالنسبة للكود فعلاً لم يعمل لدي وحاولت فهم الطريقة ولكنني للأسف أنا ضعيف بالبرمجة ولدي سؤال أخر هل تعمل هذه الطريقة على الأيسية 84A؟؟؟؟
شكراً لك أخي حسن على تعاونك ولكن أنا لم أفهم الكود جيداً لذلك أرجو منك مساعدتي بحل هذه المشكلة وكتابة الكود واللذي أريده بالضبط هوَ كالأتي:
أريد ثلاث مداخل للبيك وهذه المداخل سوف تتلقى نبضات موجبة أو سالبة والهيرتز تقريباً 200hz وطلبي هوَ عندما تدخل النبضات للبيك أن تخرج من مخرج أخر جهد مستمر موجب وتستمر بإخراج هذا الجهد حتى تفصل النبضات وبعدها تنتظر ثلاث ثواني وبعدها تفصل المخرج وأنا أريد ثلاث مداخل ومخارج في هذه الدارة والهدف منها هوَ تفعيل المحركات وعدم تفعيلها في ماكينة cnc والدقة بتفعيل المخرج مطلوبة يعني مجرد ماتدخل أول نبضة إلى البيك تفعل المخرج فوراً لكي يعمل المحرك.

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً حسن هادي محمود ( شكر العضو على هذه المشاركة )

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 09-03-2015, 02:05 PM المشاركة 5   
افتراضي


شكراً جزيلاً اخ حسن مثل العادة تتحفنا بردودك.
أخي الكريم بالنسبة للكود فعلاً لم يعمل لدي وحاولت فهم الطريقة ولكنني للأسف أنا ضعيف بالبرمجة ولدي سؤال أخر هل تعمل هذه الطريقة على الأيسية 84A؟؟؟؟
شكراً لك أخي حسن على تعاونك ولكن أنا لم أفهم الكود جيداً لذلك أرجو منك مساعدتي بحل هذه المشكلة وكتابة الكود واللذي أريده بالضبط هوَ كالأتي:
أريد ثلاث مداخل للبيك وهذه المداخل سوف تتلقى نبضات موجبة أو سالبة والهيرتز تقريباً 200hz وطلبي هوَ عندما تدخل النبضات للبيك أن تخرج من مخرج أخر جهد مستمر موجب وتستمر بإخراج هذا الجهد حتى تفصل النبضات وبعدها تنتظر ثلاث ثواني وبعدها تفصل المخرج وأنا أريد ثلاث مداخل ومخارج في هذه الدارة والهدف منها هوَ تفعيل المحركات وعدم تفعيلها في ماكينة cnc والدقة بتفعيل المخرج مطلوبة يعني مجرد ماتدخل أول نبضة إلى البيك تفعل المخرج فوراً لكي يعمل المحرك.
اخي كريم انا نسيت وضع هذا الكود في داله الرئيسيه
كود:
 InitTimer1();
لكي يتم تفعيل الانتربت (( تايمر1))


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 09-03-2015, 02:06 PM المشاركة 6   
افتراضي


اخي العزيز
لم يعمل الكود
شكرا اخي
اخي كريم انا نسيت وضع هذا الكود في داله الرئيسيه
كود:
 InitTimer1();
لكي يتم تفعيل الانتربت (( تايمر1))


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 09-03-2015, 02:18 PM المشاركة 7   
افتراضي


شكراً جزيلاً اخ حسن مثل العادة تتحفنا بردودك.
أخي الكريم بالنسبة للكود فعلاً لم يعمل لدي وحاولت فهم الطريقة ولكنني للأسف أنا ضعيف بالبرمجة ولدي سؤال أخر هل تعمل هذه الطريقة على الأيسية 84A؟؟؟؟
شكراً لك أخي حسن على تعاونك ولكن أنا لم أفهم الكود جيداً لذلك أرجو منك مساعدتي بحل هذه المشكلة وكتابة الكود واللذي أريده بالضبط هوَ كالأتي:
أريد ثلاث مداخل للبيك وهذه المداخل سوف تتلقى نبضات موجبة أو سالبة والهيرتز تقريباً 200hz وطلبي هوَ عندما تدخل النبضات للبيك أن تخرج من مخرج أخر جهد مستمر موجب وتستمر بإخراج هذا الجهد حتى تفصل النبضات وبعدها تنتظر ثلاث ثواني وبعدها تفصل المخرج وأنا أريد ثلاث مداخل ومخارج في هذه الدارة والهدف منها هوَ تفعيل المحركات وعدم تفعيلها في ماكينة cnc والدقة بتفعيل المخرج مطلوبة يعني مجرد ماتدخل أول نبضة إلى البيك تفعل المخرج فوراً لكي يعمل المحرك.
اخي انا لم أفهم هدفك بالضبط ارجو التوضيح

عندي مثال ربما أطلعت عليه ام لا وهو تحكم بمحركين بدون أستخدام كومبيوتر
http://up.top4top.net/downloadf-top4...36ae1-rar.html

تحياتي


abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 09-03-2015, 06:12 PM المشاركة 8   
افتراضي


كود:
while(1){
if(sw1==1)
           {
            sw1_flag=1;
           }
 if(sw1_flag==1 && sw1_time>=10)// this mean time >= 500
          {
           sw1_flag=0;
           sw1_time=0;
           PORTB.F0=1;
          }
if(sw2==1)
           {
            sw2_flag=1;
           }
 if(sw2_flag==1 && sw2_time>=10)// this mean time >= 500
          {
           sw2_flag=0;
           sw2_time=0;
           PORTB.F1=1;
          }

}}
اخي العزيز
هو ان عند الضغط على الزر تبقى مضاءة
رغم ان الزر يرجع الى حالته

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 12:38 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025