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

   

الصورة الرمزية burai nuraldaem
burai nuraldaem
:: عضو فضى ::
تاريخ التسجيل: Nov 2015
الدولة: السودان
المشاركات: 501
نشاط [ burai nuraldaem ]
قوة السمعة:
قديم 07-06-2021, 12:22 PM المشاركة 33   
افتراضي



السلا عليكم اخي عبد الله حجازي
تمنياتي لك دوما بدوام التوفيق
مشروع جميل ورائع كما عودتنا
لكن اود لفت نظرك لنقطه هامه
عندما اضطلعت علي الكود وجدت انك تتعامل مع eeprom
ان كنت تحفظ فيها عدد الفات فهنالك مشكله صغيره
ذاكره الايبروم لها حدود في عدد مرات الكتابه عليها
مثلا pic16f87xa يحدد انه يمكن الكتابه او القرائه 1000.000 مره وبعد ذلك ماذا يحدث ؟
لاشيئ مؤكد لباقي المايكرو لكن تلك الذاكره تكون استنفذت قدرتها
الرقم 1000.000 قد يبدو كبير لكن ليس كذلك بما توظفه عليه من مشروع اللف اقصي عدد للعداد ذكرته 9000 بقسمه بسيطه 1M/9k=111.1
اي بعد 111 ماكينه تحصل المشاكل ....

اعلانات

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 19-06-2021, 05:20 AM المشاركة 34   
افتراضي


السلا عليكم اخي عبد الله حجازي
تمنياتي لك دوما بدوام التوفيق
مشروع جميل ورائع كما عودتنا
لكن اود لفت نظرك لنقطه هامه
عندما اضطلعت علي الكود وجدت انك تتعامل مع eeprom
ان كنت تحفظ فيها عدد الفات فهنالك مشكله صغيره
ذاكره الايبروم لها حدود في عدد مرات الكتابه عليها
مثلا pic16f87xa يحدد انه يمكن الكتابه او القرائه 1000.000 مره وبعد ذلك ماذا يحدث ؟
لاشيئ مؤكد لباقي المايكرو لكن تلك الذاكره تكون استنفذت قدرتها
الرقم 1000.000 قد يبدو كبير لكن ليس كذلك بما توظفه عليه من مشروع اللف اقصي عدد للعداد ذكرته 9000 بقسمه بسيطه 1M/9k=111.1
اي بعد 111 ماكينه تحصل المشاكل ....
وعليكم السلام ورحمه الله وبركاته
نعم أخي أعلم ان هذة الذاكرة لها هذا العيب من القرأه والكتابه ..
ولكن ان شاء الله في الكود أو البرنامج سكون الأمر مختلف لا تكتب علي الذاكرة الا في حاله قطع التيار عن الدائرة وهنا سيكون هناك مقاطعه تعمل فور انقطاع التيار عن الدائرة ويوجد مكثف كبير يوفر بعض من الثواني للمتحكم لكي يكتب علي ذاكرة ايبروم قبل أن ينفذ الجهد ويتوقف الميكرو
هنا الكتابه علي الذاكرة سوف يكون عند فصل التيار عن الدائرة فقط وليس عند كل دورة لفات ..

وشكراا جزلا علي المداخله حياك الله .. أخي الكريم وبارك الله فيكم

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

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 19-06-2021, 07:56 AM المشاركة 35   
افتراضي


السلام عليكم ورحمه الله


تم استكمال المشروع وتم اضافه محرك ل رص الملفات









دائرة رص الملفات مع المحرك صورة مكبرة للتوضيح





كود:
    


     //    ENG ABDALLA  HYGAZY     //
     //    COUNTER  CONTROL        //
    //     DATA  2020/6/17         //
    //     Frequency  8  MHz       //
    //     PIC16F877A             //


     #define  The_engine_stops  PORTD.f3
     #define  MOTOR_Brakes      PORTD.f2
     #define  MOTOR             PORTD.f0
     
    #define  DP   PORTB.f7
    #define  BUZ  PORTD.F1=1;  delay_ms(250);  PORTD.F1=0;  delay_ms(80);
    #define  BUZ_count_is_over  for(X=0;X<4;X++){PORTD.F1=1; delay_ms(550);  PORTD.F1=0; delay_ms(150); }
    
    

     #define  DIR    PORTE.f0
     #define  CLOCK  PORTE.f1
    
     #define  DIR_FF    PORTE.f2
     #define  DIR_RR    PORTA.f5
   //********************========************************//
     unsigned int STOP=0,NEXT,X,X1=0;
     unsigned int DATA_1,DATA_2,DATA_3,DATA_4,DATA_CC;
     unsigned int AA1=0,AA2,AA3,AA4=0,AA5=0,a1=0,Brakes=0,START;
     unsigned short mask(unsigned short num);
     long tlong;
  //********************========************************//

  //======================= show_adc ==========================================//
     /*void show_adc() {
      adc_rd = ADC_Read(0);
      tlong = (long)adc_rd * 5000;
     tlong = tlong / 1023;
 }*/
  //=============== show_adc === END ========================================//


   //=========================== void SETENG ================================//
         void SETENG(){ PORTC.F6=1;
              DATA_1  =  DATA_1 / 1000;
              DATA_2  =  DATA_2 / 100;
              DATA_3  =  DATA_3 / 10 ;


         while (NEXT==0) {

         PORTA=1;
         PORTB=mask(DATA_1);delay_ms(1);

     //********************************************************//

         if(PORTD.F7==1){ DATA_1 ++; delay_ms(350);}
         if(PORTD.F6==1){ DATA_1 --;  delay_ms(350);}
         if(DATA_1>9 ){ DATA_1 =9; delay_ms(20);}
         if(DATA_1<0 ){ DATA_1 =0; delay_ms(20);}
         if(PORTD.F5==1){BUZ BUZ NEXT=1; delay_ms(500);}
      //********************************************************//

      }
        EEPROM_Write(0, DATA_1); delay_ms(10); NEXT=0;


   //=============================================================================//
      
       while (NEXT==0) {

         PORTA=1;
         PORTB=mask(DATA_1);  delay_ms(1);

         PORTA=2;
         PORTB=mask(DATA_2);  delay_ms(1);

     //********************************************************//

         if(PORTD.F7==1){ DATA_2 ++; delay_ms(350);}
         if(PORTD.F6==1){ DATA_2 --;  delay_ms(350);}
         if(DATA_2>9 ){ DATA_2 =9; delay_ms(20);}
         if(DATA_2<0 ){ DATA_2 =0; delay_ms(20);}
         if(PORTD.F5==1){BUZ BUZ NEXT=1; delay_ms(500);}
      //********************************************************//

      }
        EEPROM_Write(1, DATA_2); delay_ms(10);  NEXT=0;

     //================================================================================//
       while (NEXT==0) {

         PORTA=1;
         PORTB=mask(DATA_1);  delay_ms(1);

         PORTA=2;
         PORTB=mask(DATA_2);  delay_ms(1);

         PORTA=4;
         PORTB=mask(DATA_3);  delay_ms(1);


     //********************************************************//

         if(PORTD.F7==1){ DATA_3 ++; delay_ms(350);}
         if(PORTD.F6==1){ DATA_3 --;  delay_ms(350);}        // MEN HONAA  KAMEEL //
         if(DATA_3>9   ){ DATA_3 =9; delay_ms(20);}
         if(DATA_3<0   ){ DATA_3 =0; delay_ms(20);}
         if(PORTD.F5==1){BUZ BUZ NEXT=1; delay_ms(500);}
      //********************************************************//

      }
        EEPROM_Write(2, DATA_3); delay_ms(10); NEXT=0; // STOP=0;

     //========================================================================//
      
       while (NEXT==0) {

         PORTA=1;
         PORTB=mask(DATA_1);  delay_ms(1);

         PORTA=2;
         PORTB=mask(DATA_2);  delay_ms(1);

         PORTA=4;
         PORTB=mask(DATA_3);  delay_ms(1);

         PORTA=8;
         PORTB=mask(DATA_4);  delay_ms(1);


     //********************************************************//

         if(PORTD.F7==1){ DATA_4 ++; delay_ms(350);}
         if(PORTD.F6==1){ DATA_4 --;  delay_ms(350);}
         if(DATA_4>9   ){ DATA_4 =9; delay_ms(20);}
         if(DATA_4<0   ){ DATA_4 =0; delay_ms(20);}
         if(PORTD.F5==1){BUZ BUZ NEXT=1; delay_ms(500);}
      //********************************************************//

      }
        EEPROM_Write(3, DATA_4); delay_ms(10); NEXT=0;  STOP=0;     // MEN HONAA  KAMEEL //

     //========================================================================//

       DATA_1 =   DATA_1 *1000;
       DATA_2 =   DATA_2 *100;
       DATA_3 =   DATA_3 *10;

       tlong =  DATA_1 +  DATA_2 +  DATA_3 +  DATA_4;
      
    }
      
      
  //=============== void SETENG ===== END ==============================//


  //============ Timer0 =========== InitTimer0 ========================//
    //Timer0
   //Prescaler 1:8; TMR0 Preload = 6; Actual Interrupt Time : 1 ms
   //Place/Copy this part in declaration section
   void InitTimer0(){
   OPTION_REG   = 0x82;
   TMR0         = 6;
   INTCON       = 0xA0;
 }
 //========================      END    ===============================//

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

         AA4++;  AA5++;
         
        if( AA4==1000 ) { AA4=0;   }

      if(STOP==0)
    {

       if(AA5==1)
      {
       a1 = tlong / 1000;
       PORTA=1;
       PORTB=mask(a1); a1=0;

      }

      if(AA5==2)
      {
       a1 = (tlong % 1000)/100;
       PORTA=2;
       PORTB=mask(a1);  a1=0;

      }

      if(AA5==3)
      {
       a1   = (tlong % 1000)%100/10;
       PORTA=4;
       PORTB=mask(a1); a1=0;

     }

      if(AA5==5)
      {
       a1  = (tlong % 1000)%100%10;
       PORTA=8;
       PORTB=mask(a1); a1=0;

      }

       if(AA5==6){ AA5=0;}
       
       if(tlong>9999){ tlong=9999; PORTD.F0=0; }
    }


          // PORTE.f0=1;
           if( DIR_RR==1 ) { DIR=0;   }
           if( DIR_FF==1 ) { DIR=1;   }

       if(PORTD.F5==1){ BUZ BUZ STOP=1;  SETENG();}
       
       

  }
}

 //===================  Interrupt == END  ===============================//



 //========================   void main  ==========================//

      void main() {
      TRISB=0;   PORTB=0;
      TRISD=240; PORTD=0;
      TRISC=128; PORTC=0;
      TRISE=4;   PORTE=0;
      TRISA=32;   PORTA=0;
      CMCON=0;
      ADCON0=0x00;
      InitTimer0();
      adcon1=0x07;


      DATA_1  = EEPROM_Read(0); delay_ms(10);
      DATA_1  = DATA_1  *1000;

      DATA_2 = EEPROM_Read(1); delay_ms(10);
      DATA_2 = DATA_2 *100;

      DATA_3 = EEPROM_Read(2); delay_ms(10);
      DATA_3 = DATA_3 *10;

      DATA_4 = EEPROM_Read(3); delay_ms(10);

      delay_ms(1000);
      BUZ   BUZ
      loop:
      PORTD.F3=1;  PORTC.F0=0; Brakes=0; MOTOR_Brakes=0;
      PORTC.F1=0;
            tlong =  DATA_1 +  DATA_2 +  DATA_3 +  DATA_4;
            DATA_CC =  tlong  ;

      while(1){


      if(PORTD.F4==1)
      { 
       delay_ms(250);
       MOTOR=1; MOTOR_Brakes=0;PORTC.F1=1; The_engine_stops=0;  tlong =0;

       while(Brakes==0){


      
          if(PORTC.F7==1 && START==0) { while(PORTC.F7==1){  } for(X1=0; X1<200; X1++){ CLOCK=1;delay_ms(1); CLOCK=0;delay_ms(1); }  tlong ++;}   /////////
          


     //  DIR/RR  DIR/FF
          
          if(tlong >= DATA_CC ) 
          {
            MOTOR=0; MOTOR_Brakes=1; The_engine_stops=1;
            PORTC.F0=1; Brakes=1; BUZ_count_is_over START=0; goto loop;
           }
      
      
       if(PORTD.F4==1) { MOTOR=0; MOTOR_Brakes=1; delay_ms(250); START++;  }
       if(START==1   ) { The_engine_stops=1; MOTOR=0;                         }
       if(START==2   ) { MOTOR_Brakes=0; The_engine_stops=0; MOTOR=1; START=0;    }

     }

    }



 }
}

 //====================== void main === END  ==========================//


 //========================   switch (num)  ==========================//
unsigned short mask(unsigned short num){
switch (num){

case 0 : return 0xC0;
case 1 : return 0xF9;
case 2 : return 0xA4;
case 3 : return 0xB0;
case 4 : return 0x99;
case 5 : return 0x92;
case 6 : return 0x82;
case 7 : return 0xF8;
case 8 : return 0x80;
case 9 : return 0x90;

}
}

//========================      END    ==========================//



تحميل المشروع https://drive.google.com/drive/folde...Jt?usp=sharing



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

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




بالتوفيق للجميع



......


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 19-06-2021 الساعة 08:22 AM

Nour light
:: مهندس ::
تاريخ التسجيل: Apr 2019
المشاركات: 15
نشاط [ Nour light ]
قوة السمعة:
قديم 20-06-2021, 01:09 AM المشاركة 36   
افتراضي


السلام عليكم ورحمة الله وبركاته
أخ عبدالله بارك الله فيك
على مجهودك وجزاك الله خير الجزاء
ولكن لى استفسار
أنا عندي درايف لماتو استيبر
وعايز اشغله بدل الدائرة
فهل ممكن


الصورة الرمزية mzn-asad
mzn-asad
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2009
الدولة: https://t.me/pump_upp
المشاركات: 60
نشاط [ mzn-asad ]
قوة السمعة:
قديم 21-06-2021, 01:06 AM المشاركة 37   
افتراضي


بارك الله فيك استاذنا الفاضل


الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 24-06-2021, 05:52 AM المشاركة 38   
افتراضي


السلام عليكم ورحمة الله وبركاته
أخ عبدالله بارك الله فيك
على مجهودك وجزاك الله خير الجزاء
ولكن لى استفسار
أنا عندي درايف لماتو استيبر
وعايز اشغله بدل الدائرة
فهل ممكن
وعليكم السلام ورحمه الله

نعم أخي يمكنك استخدام الدرايفر مع المتحكم هي نفس اطراف التحكم .. طرف الساعه وطرف الإتجاة ..
هما نفس الأطراف في جمع الدوائر والدرايفرات


الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 24-06-2021, 05:54 AM المشاركة 39   
افتراضي


بارك الله فيك استاذنا الفاضل
وبارك فيك اخي الكريم شكرا جزيلا



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