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

   

النمرالفولاذي
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
المشاركات: 134
نشاط [ النمرالفولاذي ]
قوة السمعة:
قديم 28-09-2014, 04:03 PM المشاركة 41   
افتراضي



السلام عليكم
تم تعديل الكود
اذا كان سويج dir==0 فمحرك يدور عكس اتجاه عقارب الساعه
اذا كان سويج dir==1 فمحرك يدور مع اتجاه عقارب الساعه

كود:
sbit sw_puls at         Rb1_bit;
sbit sw_dir at         Rb0_bit;
sbit sw_speed_inc at         Rb2_bit;
sbit sw_speed_dec at         Rb3_bit;
sbit sw_speed_cont at         Rb4_bit;

bit kk1 , kk2 , kk3 , kk4 , kk5;
unsigned int cont , time=10  ;
char state=0 ,puls1=0, run=0 , state_run=0 , negative=0 , cont_run;
short value=0;
#define motor_stepper  porta=(porta &0xF0)
//Timer0
//Prescaler 1:32; TMR0 Preload = 100; Actual Interrupt Time : 4.992 ms

//Place/Copy this part in declaration section
void InitTimer0()
{
  TMR0                 = 100;
}

void Interrupt()
{
  if (TMR0IF_bit)
          {
           TMR0IF_bit         = 0;
           TMR0                 = 100;
           //Enter your code here
           cont++;
           if(kk5==1)cont_run++;
          }
}


void main()
{
  //sw_dir_dir=1;
  //sw_puls_dir=1;
  TRISA.f0=0;
  TRISA.f1=0;
  TRISA.f2=0;
  TRISA.f3=0;
  motor_stepper= 0 ;
  trisb.f0=1;
  trisb.f1=1;
  trisb.f2=1;
  trisb.f3=1;
  trisb.f4=1;
  
  InitTimer0();
  INTCON         = 0xA0;
  OPTION_REG         = 0x84;
  while(1)
         {
            if(sw_dir==1)value=-1;
            else value=1;
            
          if(sw_speed_inc==1 && kk3==0)kk3=1;
          if(sw_speed_dec==1 && kk4==0) kk4=1;
          if(!sw_speed_inc && kk3==1){ time++; kk3=0;}
          if(!sw_speed_dec && kk4==1){ if(time>=1)time--; kk4=0;}
          
          if(kk1==0 && sw_puls==1)kk1=1;
          if(sw_speed_cont==1)kk5=1;
          if(!sw_speed_cont && cont_run>25)
                                   {
                                    kk5=0;
                                    cont_run=0;
                                    state_run=~state_run;
                                    if(state_run==255){ run=1;}

                                   }
          if( (!sw_puls && kk1==1 ) || run==1)
                                   {
                                   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;
                                   kk1=0;
                                   run=0;
                                  }

          


          if(cont>time && state==1)
               {
                cont=0;

                state=0;
                 if(state_run==255)run=1;
               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( cont>time  && state==2)
               {

                cont=0;
                state=0;
                if(state_run==255)run=1;

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

               }
         }
}
ملاحظه // تردد كرستاله 4 ميكا هيرتز

اخي كريم وفق لكلامكم فأنه لاداعي لسويج continue فهل تريدون ألغاءه طالما انتم تعتمدون على منفذ الطابعه

طبعا اذا تريد 10 خطوات اضغط على سويج puls
10 مرات واذا تريد 20 اضعط على سويج 20 مره وهكذا

ممكن سؤال ماهو البرنامج الي تستخدموه في كمبيوتر واين منفذ الطابعه صراحه لم تعامل معه

http://up.top4top.net/downloadf-top4...d7501-rar.html
تحياتي
مشكوووووووووووووور وجار التجربه

اعلانات

النمرالفولاذي
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
المشاركات: 134
نشاط [ النمرالفولاذي ]
قوة السمعة:
قديم 28-09-2014, 04:04 PM المشاركة 42   
افتراضي


نعم اخي لانحتاج الى مفتاح كونتنيو

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

النمرالفولاذي
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
المشاركات: 134
نشاط [ النمرالفولاذي ]
قوة السمعة:
قديم 28-09-2014, 04:05 PM المشاركة 43   
افتراضي


البرنامج اسمه mach 3 يوجه نبضات الى الدائره عبر منفذ الطابعة


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 28-09-2014, 04:07 PM المشاركة 44   
افتراضي


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

كود:
sbit sw_puls at         Rb1_bit;
sbit sw_dir at         Rb0_bit;
sbit sw_speed_inc at         Rb2_bit;
sbit sw_speed_dec at         Rb3_bit;


bit kk1 , kk2 , kk3 , kk4 , kk5;
unsigned int cont , time=10  ;
char state=0 ,puls1=0, state_run=0 , negative=0 ;
short value=0;
#define motor_stepper  porta=(porta &0xF0)
//Timer0
//Prescaler 1:32; TMR0 Preload = 100; Actual Interrupt Time : 4.992 ms

//Place/Copy this part in declaration section
void InitTimer0()
{
  TMR0                 = 100;
}

void Interrupt()
{
  if (TMR0IF_bit)
          {
           TMR0IF_bit         = 0;
           TMR0                 = 100;
           //Enter your code here
           cont++;

          }
}


void main()
{
  //sw_dir_dir=1;
  //sw_puls_dir=1;
  TRISA.f0=0;
  TRISA.f1=0;
  TRISA.f2=0;
  TRISA.f3=0;
  motor_stepper= 0 ;
  trisb.f0=1;
  trisb.f1=1;
  trisb.f2=1;
  trisb.f3=1;

  
  InitTimer0();
  INTCON         = 0xA0;
  OPTION_REG         = 0x84;
  while(1)
         {
            if(sw_dir==1)value=-1;
            else value=1;
            
          if(sw_speed_inc==1 && kk3==0)kk3=1;
          if(sw_speed_dec==1 && kk4==0) kk4=1;
          if(!sw_speed_inc && kk3==1){ time++; kk3=0;}
          if(!sw_speed_dec && kk4==1){ if(time>=1)time--; kk4=0;}
          
          if(kk1==0 && sw_puls==1)kk1=1;

          if( !sw_puls && kk1==1 )
                                   {
                                   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;
                                   kk1=0;

                                  }

          


          if(cont>time && state==1)
               {
                cont=0;

                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( cont>time  && state==2)
               {

                cont=0;
                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;
                            }

               }
         }
}


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 28-09-2014 الساعة 04:12 PM

النمرالفولاذي
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
المشاركات: 134
نشاط [ النمرالفولاذي ]
قوة السمعة:
قديم 28-09-2014, 04:17 PM المشاركة 45   
افتراضي


هذا منفذ الطابعه موجود في الحواسيب القديمة
http://topcoder.ucoz.com/_pu/0/53148084.jpg
اخي حسن بالنسبه الى خط داير مستخدم الاداة لوجك ستيت هل تعمل كمفتاح اذا واحد مفتوح واذا صفر مغلق ام تعتبر اذا واحد تررد التيار واذا صفر تقطع التيار الدائره الان هي المطلوبه ولا اعرف كيف اشكرك لاكن المفتاح سبيد وكونتنيو لا احتاجهم
شكرا لك اخي


النمرالفولاذي
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
المشاركات: 134
نشاط [ النمرالفولاذي ]
قوة السمعة:
قديم 28-09-2014, 04:24 PM المشاركة 46   
افتراضي


ماشاء الله عليك الله يحفظك يا استاذ حسن


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 28-09-2014, 04:26 PM المشاركة 47   
افتراضي


هذا منفذ الطابعه موجود في الحواسيب القديمة
http://topcoder.ucoz.com/_pu/0/53148084.jpg
اخي حسن بالنسبه الى خط داير مستخدم الاداة لوجك ستيت هل تعمل كمفتاح اذا واحد مفتوح واذا صفر مغلق ام تعتبر اذا واحد تررد التيار واذا صفر تقطع التيار الدائره الان هي المطلوبه ولا اعرف كيف اشكرك لاكن المفتاح سبيد وكونتنيو لا احتاجهم
شكرا لك اخي
نعم أخي أستخدمت الاداة لوجك ستيت لكي تعطينا اما 0 او 1 يمكن بالطبع أستخدام مفتاح

في مشاركه 44 قمت بالغاء مفتاح continue
سأقوم بالغاء مفتاح speed يعني سويجين الي أسمهما ++ , --
أنتظرني قليلا


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 28-09-2014, 04:34 PM المشاركة 48   
افتراضي


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

void main()
{
  TRISA.f0=0;
  TRISA.f1=0;
  TRISA.f2=0;
  TRISA.f3=0;
  motor_stepper= 0 ;
  trisb.f0=1;
  trisb.f1=1;

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

          if(kk1==0 && sw_puls==1)kk1=1;

          if( !sw_puls && kk1==1 )
                                   {
                                   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;
                                   kk1=0;

                                  }

          


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

               }
         }
}



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