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

   

النمرالفولاذي
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
المشاركات: 134
نشاط [ النمرالفولاذي ]
قوة السمعة:
قديم 02-10-2014, 11:31 PM المشاركة 81   
افتراضي



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

اعلانات

الصورة الرمزية hussien1995
hussien1995
:: عضو فضي ::
تاريخ التسجيل: Nov 2012
الدولة: syria
المشاركات: 764
نشاط [ hussien1995 ]
قوة السمعة:
قديم 02-10-2014, 11:58 PM المشاركة 82   
افتراضي


وعليكم السلام ورحمه الله وبركاته
أخي الكريم ليست مشكله في تعديل الكود وانما نحن بحاجه الى بنات RB4,RB5,RB6,RB7 كمداخل للنبضات وهذه بنات تعمل بألانتربت ولهذا السبب أخي وضعت سويجات على مداخلRB4,RB5,RB6,RB7 فهو أمر ضروري

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

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

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


السلام عليكم
هذا الكود لاربع محركات
كود:
sbit sw_dir1 at         RD4_bit;
sbit sw_dir1_dir at     TRISD4_bit;
sbit sw_puls1 at         RB4_bit;
sbit sw_puls1_dir at     TRISB4_bit;

sbit sw_dir2 at         RD5_bit;
sbit sw_dir2_dir at     TRISD5_bit;
sbit sw_puls2 at         RB5_bit;
sbit sw_puls2_dir at     TRISB5_bit;

sbit sw_dir3 at         RD6_bit;
sbit sw_dir3_dir at     TRISD6_bit;
sbit sw_puls3 at         RB6_bit;
sbit sw_puls3_dir at     TRISB6_bit;

sbit sw_dir4 at         RD7_bit;
sbit sw_dir4_dir at     TRISD7_bit;
sbit sw_puls4 at         RB7_bit;
sbit sw_puls4_dir at     TRISB7_bit;

sbit led at RC4_bit;

bit kk1 , kk2 , kk3 , kk4 ;
char x,state1=0 , state2=0 , state3=0 , state4=0 ,puls1=0 , puls2=0 ,puls3=0 , puls4=0  , negative1=0 , negative2=0  ,negative3=0 , negative4=0;
unsigned int time_stop1 , time_stop2 , time_stop3 , time_stop4;
short value1=0 , value2=0 , value3=0 , value4=0;
char *motor_stepper;

void stepper_motor_lift(char *motor_stepper,char no_motor );
void stepper_motor_right(char *motor_stepper,char no_motor);

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

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


void interrupt()
{
  if(RBIF_bit==1)
     {
      RBIF_bit=0;
      if(sw_puls1==1)kk1=1;
      if(sw_puls2==1)kk2=1;
      if(sw_puls3==1)kk3=1;
      if(sw_puls4==1)kk4=1;
     }
  if (TMR0IF_bit)
  {
    TMR0IF_bit         = 0;
    TMR0                 = 61;
    //Enter your code here
    time_stop1++;
    time_stop2++;
    time_stop3++;
    time_stop4++;
  }

}
void main()
{
  adcon1=6;
  trisc.f0=0;
  trisc.f1=0;
  trisc.f2=0;
  trisc.f3=0;
  trisc.f4=0;
  portc &=0xE0;// off motor3 and off led,

  TRISD=0xF0;
  portd &=0xF0;// off motor 4
  trisa.f0=0;
  trisa.f1=0;
  trisa.f2=0;
  trisa.f3=0;
  porta &=0xF0; // off motor 1

 trisb=0xF0;
 portb &=0xF0;// off motor2

  InitTimer0();
  OPTION_REG = 0x87;

  INTCON    = 0xA8;
  if(EEPROM_Read(0)!=0xff)puls1=EEPROM_Read(0);
  if(EEPROM_Read(1)!=0xff)negative1=EEPROM_Read(1);
  if(EEPROM_Read(2)!=0xff)puls2=EEPROM_Read(2);
  if(EEPROM_Read(3)!=0xff)negative2=EEPROM_Read(3);
  if(EEPROM_Read(4)!=0xff)puls3=EEPROM_Read(4);
  if(EEPROM_Read(5)!=0xff)negative3=EEPROM_Read(5);
  if(EEPROM_Read(6)!=0xff)puls4=EEPROM_Read(6);
  if(EEPROM_Read(7)!=0xff)negative4=EEPROM_Read(7);
  delay_ms(100);
  for(x=0;x<10;x++){led=1;delay_ms(250); led=0;delay_ms(250);}
  led=1;
  while(1)
         {
            if(sw_dir1==1)value1=-1;
            else value1=1;

            if(sw_dir2==1)value2=-1;
            else value2=1;

            if(sw_dir3==1)value3=-1;
            else value3=1;

            if(sw_dir4==1)value4=-1;
            else value4=1;

          if(  kk1==1 )
                         {
                            kk1=0;
                            GIE_bit=0;
                            time_stop1=0;
                            if(value1==1)
                                         {
                                          if(puls1>0 && negative1==2){puls1--;state1=2;}
                                          else {puls1++;state1=1; negative1=1;}

                                         }
                            else if(value1==-1)
                                              {
                                               if(puls1>0 && negative1==1){puls1--;state1=1;}
                                               else {puls1++;state1=2; negative1=2;}
                                              }

                                   if(puls1>=8)puls1=0;
                              EEPROM_Write(0,puls1);
                              EEPROM_Write(1,negative1);
                               GIE_bit=1;

                           }

          if(  kk2==1 )
                         {
                            kk2=0;
                            GIE_bit=0;
                            time_stop2=0;
                            if(value2==1)
                                         {
                                          if(puls2>0 && negative2==2){puls2--;state2=2;}
                                          else {puls2++;state2=1; negative2=1;}

                                         }
                                   else if(value2==-1)
                                              {
                                               if(puls2>0 && negative2==1){puls2--;state2=1;}
                                               else {puls2++;state2=2; negative2=2;}
                                              }

                                   if(puls2>=8)puls2=0;
                              EEPROM_Write(2,puls2);
                              EEPROM_Write(3,negative2);
                               GIE_bit=1;
                           }

          if(  kk3==1 )
                         {
                            kk3=0;
                            GIE_bit=0;
                            time_stop3=0;
                            if(value3==1)
                                         {
                                          if(puls3>0 && negative3==2){puls3--;state3=2;}
                                          else {puls3++;state3=1; negative3=1;}

                                         }
                                   else if(value3==-1)
                                              {
                                               if(puls3>0 && negative3==1){puls3--;state3=1;}
                                               else {puls3++;state3=2; negative3=2;}
                                              }

                                   if(puls3>=8)puls3=0;
                              EEPROM_Write(4,puls3);
                              EEPROM_Write(5,negative3);
                               GIE_bit=1;
                           }

           if(  kk4==1 )
                         {
                            kk4=0;
                            GIE_bit=0;
                            time_stop4=0;
                            if(value4==1)
                                         {
                                          if(puls4>0 && negative4==2){puls4--;state4=2;}
                                          else {puls4++;state4=1; negative4=1;}

                                         }
                                   else if(value4==-1)
                                              {
                                               if(puls4>0 && negative4==1){puls4--;state4=1;}
                                               else {puls4++;state4=2; negative4=2;}
                                              }

                              if(puls4>=8)puls4=0;
                              EEPROM_Write(6,puls4);
                              EEPROM_Write(7,negative4);
                               GIE_bit=1;
                           }

          if( state1==1)
               {
                state1=0;
                 stepper_motor_lift(&porta,1);
               }
            else if(  state1==2)
               {
                state1=0;
                stepper_motor_right(&porta,1);
               }


           if( state2==1)
               {
                state2=0;
                stepper_motor_lift(&portb,2);
               }
            else if(  state2==2)
               {
                state2=0;
                stepper_motor_right(&portb,2);
               }


           if( state3==1)
               {
                state3=0;
                stepper_motor_lift(&portc,3);
               }
            else if(  state3==2)
               {
                state3=0;
                stepper_motor_right(&portc,3);
               }


           if( state4==1)
               {
                state4=0;
                stepper_motor_lift(&portd,4);
               }
            else if(  state4==2)
               {
                state4=0;
                stepper_motor_right(&portd,4);
               }

           if(time_stop1> 20 )
                 {
                  porta &=0xF0 ;// OFF motor
                 }

            if(time_stop2> 20 )
                 {
                   portb &=0xF0 ;// OFF motor
                 }
            if(time_stop3> 20 )
                 {
                  portc &=0xF0 ;// OFF motor
                 }

            if(time_stop4> 20 )
                 {
                   portd &=0xF0 ;// OFF motor
                 }
         }
}

//*******************************************//
void stepper_motor_lift(char *motor_stepper,char no_motor )
{
 char pluses1=0;
 *motor_stepper &=0xF0;
 if(no_motor==1)pluses1=puls1;
 else if(no_motor==2)pluses1=puls2;
 else if(no_motor==3)pluses1=puls3;
 else if(no_motor==4)pluses1=puls4;
 switch(pluses1)
             {
              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;
             }

}

//*********************************************//
void stepper_motor_right(char *motor_stepper,char no_motor)
{
  char Pulses2=0;
  *motor_stepper &=0xF0;
  if(no_motor==1)Pulses2=puls1;
  else if(no_motor==2)Pulses2=puls2;
  else if(no_motor==3)Pulses2=puls3;
  else if(no_motor==4)Pulses2=puls4;
   switch(Pulses2)
                 {
                             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;
                 }

 }
http://up.top4top.net/downloadf-top4...4f711-rar.html

حيث عند أنقطاع التيار الكهربائي فأن موقع المحركات سيتم أحتفاظ بها اي اذا كان محرك بقى واقف على زاويه 135 درجه فعند أنقطاع التيار الكهربائي وعودته من جديد فأن برنامج سيبقى محافظ على اخر خطوه وصل بها المحرك
تحياتي


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


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


وبالنسبه للمايكرو 16f877a


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


ألف ألف شكر أخي حسن على الكود وجاري التجريب.
بالنسبة للكريستالة أليس الخيار الذي يليه هوَ الذي يخص الكرستالة؟؟؟
أقصد خيار xt


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


ألف ألف شكر أخي حسن على الكود وجاري التجريب.
بالنسبة للكريستالة أليس الخيار الذي يليه هوَ الذي يخص الكرستالة؟؟؟
أقصد خيار xt
XT اذا كانت الكرستاله اصغر او يساوي 4mhz
اما اذا اكبر من ذلك تختار Hs


الصورة الرمزية hussien1995
hussien1995
:: عضو فضي ::
تاريخ التسجيل: Nov 2012
الدولة: syria
المشاركات: 764
نشاط [ hussien1995 ]
قوة السمعة:
قديم 03-10-2014, 06:48 PM المشاركة 87   
win شكراً جزيلاً على المساعدة


شكراً للتوضيح أخي حسن وأنا اليوم جربت كود الأيسية 16f628 بالواقع وعمل بشكل رائع وسلس ولكن بالنسبة لزمن إطفاء المخارج فهو سريع جداً لذلك قمت بتعديله للقيمة 50 وأصبح ممتاز وبالنسبة للكرستالة الداخلية فأول تجربة كانت فاشلة والمخارج تعمل بطريقة عشوائية لاأعرف لماذا فقمت بفصل الكرستالة الداخلية ووضع كرستالة خارجية بقيمة 20mhz فعملت جيداً ولله الحمد.
بالنسبة لكود 877 هل يمكنك وضع صورة لكيفية وضع السويتش مثل الأيسية 628 لأني بصراحة لم أعرف كيف أوصلها وقد حاولت عدت محاولات ولكنها لم تعمل على البرنامج لانني لاأعرف التوصيل الصحيح وشكراً جزيلاً لك.


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


شكراً للتوضيح أخي حسن وأنا اليوم جربت كود الأيسية 16f628 بالواقع وعمل بشكل رائع وسلس ولكن بالنسبة لزمن إطفاء المخارج فهو سريع جداً لذلك قمت بتعديله للقيمة 50 وأصبح ممتاز وبالنسبة للكرستالة الداخلية فأول تجربة كانت فاشلة والمخارج تعمل بطريقة عشوائية لاأعرف لماذا فقمت بفصل الكرستالة الداخلية ووضع كرستالة خارجية بقيمة 20mhz فعملت جيداً ولله الحمد.
بالنسبة لكود 877 هل يمكنك وضع صورة لكيفية وضع السويتش مثل الأيسية 628 لأني بصراحة لم أعرف كيف أوصلها وقد حاولت عدت محاولات ولكنها لم تعمل على البرنامج لانني لاأعرف التوصيل الصحيح وشكراً جزيلاً لك.
السلام عليكم
أخي العزيز طالما غيرت الكرستاله الى 20mhz ايضا راح يزداد تايمر0 وزياده القيمه الى 50 حل منطقي
بالنسبه للسويجات يكون كتالي


تحياتي



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