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

   

الصورة الرمزية hussien1995
hussien1995
:: عضو فضي ::
تاريخ التسجيل: Nov 2012
الدولة: syria
المشاركات: 764
نشاط [ hussien1995 ]
قوة السمعة:
قديم 09-03-2015, 10:12 PM المشاركة 9   
افتراضي



أخي حسن ببساطة اللذي أريده هوَ أنهُ عندما يعطي الكمبيوتر نبضات لقيادة المحرك أنا أستخدم l297 وهيَ تعمل بكفاءة ولكن عندما يتوقف محور من محاور الألة لكي يعمل محور أخر أنا أريد أن يفصل المحرك عن العمل إذا طالت فترة التوقف عن 3ثواني لكي لايسخن المحرك لدرجة كبيرة لذلك خطرة ببالي فكرة أن أضع بيك فتتلقى النبضات أيضاً مع الأيسية l297 وعند تلقي النبضة ترسل تفعل مخرج متصل مع موسفيت قدرة يرسل بدوره الجهد الأرضي للموسفيت التي تقود المحرك الخطوي وعند توقف النبضات تنتظر البيك مثلاً 3ثواني وبعدها تفصل المخرج فيتوقف موسفيت القدرة عن العمل وبالتالي لايصل كهرباء إلى الموسفيت التي تقود المحرك وعندها سوف يتوقف المحرك عن العمل ولن تزيد حرارته وهذا شرح بسيط عن الفكرة التي ببالي.

أنا جربت وصل النبضات بالموسفيت مباشرةً والطريقة نجحت ولكن قدرة المحرك تضعف بشكل ملحوظ لأن الموسفيت القدرة يستلم نبضات وبالتالي تكون القدرة المارى خلاله ضعيفة.
أنا كتبت كود وهوَ يعمل ولكن مثلما ذكرت لايعمل إلا لمخرج واحد أي أنني بحاجة لثلاث أيسيات للمكنة,أتمنى أن تكون الفكرة قد وصلت وأتمنى أن يكون الكود على الأيسية 16f84A إذا أمكن لأن هذا المتوافر لدي حالياً وشكراً لك.

اعلانات

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


كود:
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;
          }

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

انتم انطوني شيئ مواضح بالكود لكي اشرحه لكم
يهمني ان تفهمون الكود لانه مهم وبتالي انتم تستطيعون كتابه بقيه الاكواد
تحياتي

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

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


أخي حسن ببساطة اللذي أريده هوَ أنهُ عندما يعطي الكمبيوتر نبضات لقيادة المحرك أنا أستخدم l297 وهيَ تعمل بكفاءة ولكن عندما يتوقف محور من محاور الألة لكي يعمل محور أخر أنا أريد أن يفصل المحرك عن العمل إذا طالت فترة التوقف عن 3ثواني لكي لايسخن المحرك لدرجة كبيرة لذلك خطرة ببالي فكرة أن أضع بيك فتتلقى النبضات أيضاً مع الأيسية l297 وعند تلقي النبضة ترسل تفعل مخرج متصل مع موسفيت قدرة يرسل بدوره الجهد الأرضي للموسفيت التي تقود المحرك الخطوي وعند توقف النبضات تنتظر البيك مثلاً 3ثواني وبعدها تفصل المخرج فيتوقف موسفيت القدرة عن العمل وبالتالي لايصل كهرباء إلى الموسفيت التي تقود المحرك وعندها سوف يتوقف المحرك عن العمل ولن تزيد حرارته وهذا شرح بسيط عن الفكرة التي ببالي.

أنا جربت وصل النبضات بالموسفيت مباشرةً والطريقة نجحت ولكن قدرة المحرك تضعف بشكل ملحوظ لأن الموسفيت القدرة يستلم نبضات وبالتالي تكون القدرة المارى خلاله ضعيفة.
أنا كتبت كود وهوَ يعمل ولكن مثلما ذكرت لايعمل إلا لمخرج واحد أي أنني بحاجة لثلاث أيسيات للمكنة,أتمنى أن تكون الفكرة قد وصلت وأتمنى أن يكون الكود على الأيسية 16f84A إذا أمكن لأن هذا المتوافر لدي حالياً وشكراً لك.

افتهمت قصدك
طريقه ببساطه نخلي الانتربت عن طريق بورت b وعند انتهاء ننتظر زمن مثلما قلتم 3 ثواني وبعدها يتم ايقاف محرك
ان شالله اكتب لكم الكود


الصورة الرمزية hussien1995
hussien1995
:: عضو فضي ::
تاريخ التسجيل: Nov 2012
الدولة: syria
المشاركات: 764
نشاط [ hussien1995 ]
قوة السمعة:
قديم 10-03-2015, 08:39 PM المشاركة 12   
Talking


ألف شكر لك أخي حسن والله أنكَ أفرحتني بهذا.
منتظر الكود على أحر من الجمر,ولكن أهم شيء هوَ الدقة أخي حسن فأنا لاأريد تضييع النبضات حتى لو كانت نبضة واحدة لكي لاتختلف دقة المكنة.
لايهم أخي أين تكون المداخل والمخارج أنت إختر المداخل والمخارج التي تراها مناسبة.
وبالنسبة للكود أنا سأحاول فهمه إنشاء الله لكي أعرف كيف أستخدمه بالمستقبل.


الصورة الرمزية hussien1995
hussien1995
:: عضو فضي ::
تاريخ التسجيل: Nov 2012
الدولة: syria
المشاركات: 764
نشاط [ hussien1995 ]
قوة السمعة:
قديم 10-03-2015, 09:00 PM المشاركة 13   
افتراضي


أخي حسن أنا حاولت فهم الكود وقد كتبته بما فهمت والحمد لله الكود عمل على برنامج بروتوس لثلاث سويتشات ولكن زمن الثلاث ثواني لم يعمل يعني تفصل وتوصل مباشرةً ولاتنتظر ثلاث ثواني كما أريد ولاأعرف لماذا حاولت طرق كثيرة ولكن لم تفلح فما السبب برأيك؟؟
كود:
while(1){
if(sw1==0)
           {
            sw1_flag=1;
           }
 if(sw1_flag==1 && sw1_time>=0)// this mean time >= 500
          {
           sw1_flag=0;
           sw1_time=0;
           PORTB.F0=1;

          }
          if(sw1==1)
           {
            sw1_flag=1;
           }
 if(sw1_flag==1 && sw1_time>=0)// this mean time >= 500
          {
           sw1_flag=0;
           sw1_time=0;
           PORTB.F0=0;

          }
 if(sw2==0)
           {
            sw2_flag=1;
           }
 if(sw2_flag==1 && sw1_time>=0)// this mean time >= 500
          {
           sw2_flag=0;
           sw2_time=0;
           PORTB.F1=1;

          }
          if(sw2==1)
           {
            sw2_flag=1;
           }
 if(sw2_flag==1 && sw1_time>=0)// this mean time >= 500
          {
           sw2_flag=0;
           sw2_time=0;
           PORTB.F1=0;

          }
if(sw3==0)
           {
            sw3_flag=1;
           }
 if(sw3_flag==1 && sw1_time>=0)// this mean time >= 500
          {
           sw3_flag=0;
           sw3_time=0;
           PORTB.F2=1;

          }
          if(sw3==1)
           {
            sw3_flag=1;
           }
 if(sw3_flag==1 && sw1_time>=0)// this mean time >= 500
          {
           sw3_flag=0;
           sw3_time=0;
           PORTB.F2=0;

          }

}
}


abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:
قديم 11-03-2015, 02:36 AM المشاركة 14   
افتراضي


طبعا اخي انا لم أكتب كود أطفاء
انا وضعت الكود لتوضيح كيف نستخدم الانتربت (( تايمرات ))

انتم انطوني شيئ مواضح بالكود لكي اشرحه لكم
يهمني ان تفهمون الكود لانه مهم وبتالي انتم تستطيعون كتابه بقيه الاكواد
تحياتي
شكرا اخي
بالنسبة لي =<
داخل الشرط هل يتحقق sw1t_timeحتى يصل الى 500ميلي تانية
ام اصغر


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


أخي حسن أنا حاولت فهم الكود وقد كتبته بما فهمت والحمد لله الكود عمل على برنامج بروتوس لثلاث سويتشات ولكن زمن الثلاث ثواني لم يعمل يعني تفصل وتوصل مباشرةً ولاتنتظر ثلاث ثواني كما أريد ولاأعرف لماذا حاولت طرق كثيرة ولكن لم تفلح فما السبب برأيك؟؟
كود:
while(1){
if(sw1==0)
           {
            sw1_flag=1;
           }
 if(sw1_flag==1 && sw1_time>=0)// this mean time >= 500
          {
           sw1_flag=0;
           sw1_time=0;
           PORTB.F0=1;

          }
          if(sw1==1)
           {
            sw1_flag=1;
           }
 if(sw1_flag==1 && sw1_time>=0)// this mean time >= 500
          {
           sw1_flag=0;
           sw1_time=0;
           PORTB.F0=0;

          }
 if(sw2==0)
           {
            sw2_flag=1;
           }
 if(sw2_flag==1 && sw1_time>=0)// this mean time >= 500
          {
           sw2_flag=0;
           sw2_time=0;
           PORTB.F1=1;

          }
          if(sw2==1)
           {
            sw2_flag=1;
           }
 if(sw2_flag==1 && sw1_time>=0)// this mean time >= 500
          {
           sw2_flag=0;
           sw2_time=0;
           PORTB.F1=0;

          }
if(sw3==0)
           {
            sw3_flag=1;
           }
 if(sw3_flag==1 && sw1_time>=0)// this mean time >= 500
          {
           sw3_flag=0;
           sw3_time=0;
           PORTB.F2=1;

          }
          if(sw3==1)
           {
            sw3_flag=1;
           }
 if(sw3_flag==1 && sw1_time>=0)// this mean time >= 500
          {
           sw3_flag=0;
           sw3_time=0;
           PORTB.F2=0;

          }

}
}
أخي كريم عندك أخطاء كثيره في الكود
مثلا انت اختاريت زمن اكبر او = 0 وهذا خطأ فهو ماراح ينتظر اي زمن
الانتربت يحدث كل 50ms وبتالي انا اختاريت >=10 معناها 10*50=500

خطأ الثاني هو sw1_time مكرر في كل الاكواد وهذا خطأ فكل سويج له متغير خاص به
تحياتي


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


شكرا اخي
بالنسبة لي =<
داخل الشرط هل يتحقق sw1t_timeحتى يصل الى 500ميلي تانية
ام اصغر
نعم هو أكبر او يساوي
طبعا انا لاأستطيع ان اقول فقط = 10 ومعناها 500ms لان ربما لايتم تنفيذ الكود وسبب في ذلك هو مايكرو يقوم بتنفيذ الاوامر بتسلسل وربما عندما يصل sw1t_time الى 10 ربما لايصل الى كود مقارنه وهو
كود:
if(sw1_flag==1 && sw1_time>=10)
لانه ربما القيمه اصبحت 11 يعني ان الاوامر الانتربت تحدث بالضبط كل 50ms بينما انا لااعرف اذا اصبح sw1_time=10 هل سيصل الى كود شرط الي وضعته

لذا لكي أضمن تنفيذ الاوامر الافضل نقول اكبر او يساوي

>= معناها اكبر او يساوي طبعا تضغط ctrl + ز
<= معناها اصغر او يساوي طبعا تضغط ctrl + و



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