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

   

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 29-09-2014, 05:24 AM المشاركة 57   
افتراضي تعديل بسيط في الكود



طبعا هذا التعديل ربما ليس فيه أضافه كبيره على كود وانما قمت فقط بتغير ربط سويج puls وجعلته على RB0 و دايركشن على RB1 وفعلت انتربت عبر RB0 لغرض الضمان حصول على النبضه من كمبيوتر
كود:
sbit sw_puls at         Rb0_bit;
sbit sw_dir at         Rb1_bit;
bit kk1 , kk2 ;
char state=0 ,puls1=0, state_run=0 , negative=0 ;
short value=0;
#define motor_stepper  porta=(porta &0xF0)


void interrupt()
{
 if(INTF_bit==1)
         {
          INTF_bit=0;
          kk1=1;
         }

}
void main()
{
  TRISA.f0=0;
  TRISA.f1=0;
  TRISA.f2=0;
  TRISA.f3=0;
  motor_stepper= 0 ;
  trisb.f0=1;
  trisb.f1=1;
  GIE_bit=1;
  INTE_bit=1;
  INTF_bit=0;
  INTEDG_bit=1;

  while(1)
         {
            if(sw_dir==1)value=-1;
            else value=1;

          if(  kk1==1 )
                         {
                            kk1=0;
                            GIE_bit=0;
                            if(value==1)
                                         {
                                          if(puls1>0 && negative==2){puls1--;state=2;}
                                          else {puls1++;state=1; negative=1;}

                                         }
                                   else if(value==-1)
                                              {
                                               if(puls1>0 && negative==1){puls1--;state=1;}
                                               else {puls1++;state=2; negative=2;}
                                              }

                                   if(puls1>=8)puls1=0;

                               GIE_bit=1;
                           }

          


          if( state==1)
               {
                state=0;

               switch(puls1)
                            {
                             case 0:motor_stepper |=9;break;
                             case 1:motor_stepper |=1;break; //-45
                             case 2:motor_stepper |=3;break; //-90
                             case 3:motor_stepper |=2;break;  //-135
                             case 4:motor_stepper |=6;break; //-180
                             case 5:motor_stepper |=4;break; //-225
                             case 6:motor_stepper |=12;break;//-270
                             case 7:motor_stepper |=8;break;//-315

                             default:break;
                            }

               }
            else if(  state==2)
               {

                state=0;

                switch(puls1)
                            {
                             case 0:motor_stepper |=9;break; //0
                             case 1:motor_stepper |=8;break; //45
                             case 2:motor_stepper |=12;break; //90
                             case 3:motor_stepper |=4;break;  //135
                             case 4:motor_stepper |=6;break; //180
                             case 5:motor_stepper |=2;break; //225
                             case 6:motor_stepper |=3;break; //270
                             case 7:motor_stepper |=1;break;//315

                             default:break;
                            }

               }
         }
}

اذا ردت هذا الكود لــ 16f628a
فقط أضيف هذا الكود الى داله الرئيسيه void main
كود:
 cmcon=7;

اعلانات

الصورة الرمزية قطر الندى 89
قطر الندى 89
:: مهندس متميز ::
تاريخ التسجيل: Aug 2013
الدولة: IRAQ
المشاركات: 332
نشاط [ قطر الندى 89 ]
قوة السمعة:
قديم 29-09-2014, 06:31 AM المشاركة 58   
افتراضي


السلام عليكم ..... عذرآ ع التدخل بالموضوع ... ااستاذ حسن هادي ارسلتلك رسالة عالخاص فياريت المتابعة

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

النمرالفولاذي
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
المشاركات: 134
نشاط [ النمرالفولاذي ]
قوة السمعة:
قديم 30-09-2014, 12:21 AM المشاركة 59   
افتراضي


مشكور استاذ حسن هادي واقدر هذا اهتمامك


النمرالفولاذي
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
المشاركات: 134
نشاط [ النمرالفولاذي ]
قوة السمعة:
قديم 30-09-2014, 12:22 AM المشاركة 60   
افتراضي


الحمد الله خفت قبل قليل لايقبل الرد تصورت عندي خلل لاسامح الله استاذ حسن انا غدا ذاهب الى بغداد الحبيبة اتمنى من الله ان اجد المواد واذا لم اجدها سوف اضطر ان احجز المواد من موقع علي اكس بريس الصيني حيث وجدت فيه كل ما احتاج وباسعار جدا مناسبه


النمرالفولاذي
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
المشاركات: 134
نشاط [ النمرالفولاذي ]
قوة السمعة:
قديم 30-09-2014, 01:47 AM المشاركة 61   
افتراضي


اخي واستاذي الفاضل حسن هادي الكود الاخير هو المطلوب وانشاء الله سيكون مشروع نواة مشروع تخرجي ساقوم بتطبيقه وينج انشاء الله
ولو اثقلت عليك اخي الكريم لاكن تحملني بقي شي ينهي المشكلة وهي ان المحرك عندما يدور لانواجه مشكله لاكن المشكله عند ما يتوقف المحرك سوف يبقى الجهد مطبق على الملف الذي توقف فيه المحرك ممايودي الى استهلاك المحرك الخطوي
سوال ولا اريدك ان تتعب نفسك اكثر يا اخي واستاذي
الان البيك يخرج اربع خطوط من خلال هذه الخطوط يتم تحريك المحرك لاكن عند توقف المحرك فان النبضه الاخيره تبقى فعاله وهذا التفعيل يبقي التيار داخل الملف لذا اذا قمت باخبار البيك انه عندما لم تاتيك نبضه خلال مثلا نصف ثانية فقم بقطع التيار الخارج من المخارج الاربعه مع الحفاض على ترتيب النبضات اتصور وصلت الفكره المشكلة اني اواجه مشكله بتوصيل المعلومة اخ حسين ايضا يواجه هذه المشكله الى الان النتيجه التي وصلنا اليها جيده جدا جدا جدا وانا غير مصدق لاكن اطلب منك ان تراجع هذه الملاحضه هل يمكن ام لا
سوف انقطع يومين واعود باذن الله


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 30-09-2014, 05:31 AM المشاركة 62   
افتراضي


اخي واستاذي الفاضل حسن هادي الكود الاخير هو المطلوب وانشاء الله سيكون مشروع نواة مشروع تخرجي ساقوم بتطبيقه وينج انشاء الله
ولو اثقلت عليك اخي الكريم لاكن تحملني بقي شي ينهي المشكلة وهي ان المحرك عندما يدور لانواجه مشكله لاكن المشكله عند ما يتوقف المحرك سوف يبقى الجهد مطبق على الملف الذي توقف فيه المحرك ممايودي الى استهلاك المحرك الخطوي
سوال ولا اريدك ان تتعب نفسك اكثر يا اخي واستاذي
الان البيك يخرج اربع خطوط من خلال هذه الخطوط يتم تحريك المحرك لاكن عند توقف المحرك فان النبضه الاخيره تبقى فعاله وهذا التفعيل يبقي التيار داخل الملف لذا اذا قمت باخبار البيك انه عندما لم تاتيك نبضه خلال مثلا نصف ثانية فقم بقطع التيار الخارج من المخارج الاربعه مع الحفاض على ترتيب النبضات اتصور وصلت الفكره المشكلة اني اواجه مشكله بتوصيل المعلومة اخ حسين ايضا يواجه هذه المشكله الى الان النتيجه التي وصلنا اليها جيده جدا جدا جدا وانا غير مصدق لاكن اطلب منك ان تراجع هذه الملاحضه هل يمكن ام لا
سوف انقطع يومين واعود باذن الله
السلام عليكم
والله كلامك صحيح
قمت بالتعديل على الكود حيث قمت بوضع تايمر0 وخلال فتره 1 ثانيه اذا ماكو نبضات راح يطفئ محرك بدون تأثير على موقع محرك فقط أخبرته أجعل بعد 1 ثانيه من اخر نبضه وصلتك اجعل بنات الي تغذي محرك =0
كود:
sbit sw_puls at         Rb0_bit;
sbit sw_dir at         Rb1_bit;
bit kk1 , kk2 ;
char state=0 ,puls1=0, state_run=0 , negative=0 ;
unsigned int time_stop;
short value=0;
#define motor_stepper  porta=(porta &0xF0)

//Timer0
//Prescaler 1:256; TMR0 Preload = 61; Actual Interrupt Time : 49.92 ms

//Place/Copy this part in declaration section
void InitTimer0(){

  TMR0		 = 61;

}


void interrupt()
{
  if (TMR0IF_bit){
    TMR0IF_bit	 = 0;
    TMR0		 = 61;
    //Enter your code here
    time_stop++;
  }
 if(INTF_bit==1)
         {
          INTF_bit=0;
          kk1=1;
         }

}
void main()
{
  TRISA.f0=0;
  TRISA.f1=0;
  TRISA.f2=0;
  TRISA.f3=0;
  motor_stepper= 0 ;
  trisb.f0=1;
  trisb.f1=1;
  InitTimer0();
  intcon=0xB0;
 OPTION_REG = 0xC7;
  while(1)
         {
            if(sw_dir==1)value=-1;
            else value=1;

          if(  kk1==1 )
                         {
                            kk1=0;
                            GIE_bit=0;
                            time_stop=0;
                            if(value==1)
                                         {
                                          if(puls1>0 && negative==2){puls1--;state=2;}
                                          else {puls1++;state=1; negative=1;}

                                         }
                                   else if(value==-1)
                                              {
                                               if(puls1>0 && negative==1){puls1--;state=1;}
                                               else {puls1++;state=2; negative=2;}
                                              }

                                   if(puls1>=8)puls1=0;

                               GIE_bit=1;
                           }

          


          if( state==1)
               {
                state=0;

               switch(puls1)
                            {
                             case 0:motor_stepper |=9;break;
                             case 1:motor_stepper |=1;break; //-45
                             case 2:motor_stepper |=3;break; //-90
                             case 3:motor_stepper |=2;break;  //-135
                             case 4:motor_stepper |=6;break; //-180
                             case 5:motor_stepper |=4;break; //-225
                             case 6:motor_stepper |=12;break;//-270
                             case 7:motor_stepper |=8;break;//-315

                             default:break;
                            }

               }
            else if(  state==2)
               {

                state=0;

                switch(puls1)
                            {
                             case 0:motor_stepper |=9;break; //0
                             case 1:motor_stepper |=8;break; //45
                             case 2:motor_stepper |=12;break; //90
                             case 3:motor_stepper |=4;break;  //135
                             case 4:motor_stepper |=6;break; //180
                             case 5:motor_stepper |=2;break; //225
                             case 6:motor_stepper |=3;break; //270
                             case 7:motor_stepper |=1;break;//315

                             default:break;
                            }

               }
               
           if(time_stop> 20 ) // 1sec=1000ms ==> 1000/50=20
                 {
                 motor_stepper= 0 ;// OFF motor
                 }
         }
}


الصورة الرمزية hussien1995
hussien1995
:: عضو فضي ::
تاريخ التسجيل: Nov 2012
الدولة: syria
المشاركات: 764
نشاط [ hussien1995 ]
قوة السمعة:
قديم 30-09-2014, 03:19 PM المشاركة 63   
Smile


السلام عليكم
والله كلامك صحيح
قمت بالتعديل على الكود حيث قمت بوضع تايمر0 وخلال فتره 1 ثانيه اذا ماكو نبضات راح يطفئ محرك بدون تأثير على موقع محرك فقط أخبرته أجعل بعد 1 ثانيه من اخر نبضه وصلتك اجعل بنات الي تغذي محرك =0
كود:
sbit sw_puls at         Rb0_bit;
sbit sw_dir at         Rb1_bit;
bit kk1 , kk2 ;
char state=0 ,puls1=0, state_run=0 , negative=0 ;
unsigned int time_stop;
short value=0;
#define motor_stepper  porta=(porta &0xF0)

//Timer0
//Prescaler 1:256; TMR0 Preload = 61; Actual Interrupt Time : 49.92 ms

//Place/Copy this part in declaration section
void InitTimer0(){

  TMR0		 = 61;

}


void interrupt()
{
  if (TMR0IF_bit){
    TMR0IF_bit	 = 0;
    TMR0		 = 61;
    //Enter your code here
    time_stop++;
  }
 if(INTF_bit==1)
         {
          INTF_bit=0;
          kk1=1;
         }

}
void main()
{
  TRISA.f0=0;
  TRISA.f1=0;
  TRISA.f2=0;
  TRISA.f3=0;
  motor_stepper= 0 ;
  trisb.f0=1;
  trisb.f1=1;
  InitTimer0();
  intcon=0xB0;
 OPTION_REG = 0xC7;
  while(1)
         {
            if(sw_dir==1)value=-1;
            else value=1;

          if(  kk1==1 )
                         {
                            kk1=0;
                            GIE_bit=0;
                            time_stop=0;
                            if(value==1)
                                         {
                                          if(puls1>0 && negative==2){puls1--;state=2;}
                                          else {puls1++;state=1; negative=1;}

                                         }
                                   else if(value==-1)
                                              {
                                               if(puls1>0 && negative==1){puls1--;state=1;}
                                               else {puls1++;state=2; negative=2;}
                                              }

                                   if(puls1>=8)puls1=0;

                               GIE_bit=1;
                           }

          


          if( state==1)
               {
                state=0;

               switch(puls1)
                            {
                             case 0:motor_stepper |=9;break;
                             case 1:motor_stepper |=1;break; //-45
                             case 2:motor_stepper |=3;break; //-90
                             case 3:motor_stepper |=2;break;  //-135
                             case 4:motor_stepper |=6;break; //-180
                             case 5:motor_stepper |=4;break; //-225
                             case 6:motor_stepper |=12;break;//-270
                             case 7:motor_stepper |=8;break;//-315

                             default:break;
                            }

               }
            else if(  state==2)
               {

                state=0;

                switch(puls1)
                            {
                             case 0:motor_stepper |=9;break; //0
                             case 1:motor_stepper |=8;break; //45
                             case 2:motor_stepper |=12;break; //90
                             case 3:motor_stepper |=4;break;  //135
                             case 4:motor_stepper |=6;break; //180
                             case 5:motor_stepper |=2;break; //225
                             case 6:motor_stepper |=3;break; //270
                             case 7:motor_stepper |=1;break;//315

                             default:break;
                            }

               }
               
           if(time_stop> 20 ) // 1sec=1000ms ==> 1000/50=20
                 {
                 motor_stepper= 0 ;// OFF motor
                 }
         }
}
ألف مليون كلمة شكر لاتوفيك حقق أخي حسن فعلاً هذا الذي كُنا نبحث عنهُ بالضبط,شكراً جزيلاً لك.


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 30-09-2014, 03:27 PM المشاركة 64   
sun


ألف مليون كلمة شكر لاتوفيك حقق أخي حسن فعلاً هذا الذي كُنا نبحث عنهُ بالضبط,شكراً جزيلاً لك.
بالخدمه أخي الكريم وكل عام انتم وأهلكم وبلادكم بألف ألف خير



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