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

أدوات الموضوع

A-M-S
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 242
نشاط [ A-M-S ]
قوة السمعة:0
قديم 05-01-2021, 11:48 PM المشاركة 1   
ha السلام عليكم ..محتاج كود بسيط ان شاء الله Twitter FaceBook Google+



السلام عليكم و رحمة الله:
*محتاج كود بسيط ان شاء الله و لكنه دقيق,, يحتوي الكود على led عدد 2 و مفتاحين button
عندما نضغط على المفتاح الاول يضيء اللد الاول " و عندما نضغط عليه مره اخرى ينطفىء اللد و هذا سهل ان شاء الله .

* عندما نضغط على المفتاح الثاني يضيىء اللد الثاني لمدة ثانيه واحده ثم ينطفىء و هذا بشرط ان يكون اللد الاول مضيىء(اذا كان اللد الاول منطفىء لا اريد ان يعمل اللد الثاني حتى لو ضغطنا على المفتاح الثاني))

*اذا ضغطنا مره اخرى على المفتاح الثاني (و اللد الاول مضيىء) لا اريد ان يضيىء اللد الثاني ...اريده ان يضيىء فقط اذا كان الاول مشتعل و لمره واحده فقط و لا يشتعل مره اخرى الا اذا اطفأنا اللد الاول و اعدنا اشعاله من جديد (( ان شاء الله يكون الكلام مفهوم))

*ثالثا اريد ان ينطفىء البورت ب portb بالكامل بعد خمس دقائق من تشفيل الجهاز

ملاحظه اريد ان تكون اوامر التأخير بالتايمر و ليس بالديلاي حيث ان الاخير يدخل المتحكم في حالة جمود ..و اخيرا اريد استخدام المتحكم 16f628a

اسف على الاطاله و دمتم سالمين ....

اعلانات

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


السلام عليكم و رحمة الله:
*محتاج كود بسيط ان شاء الله و لكنه دقيق,, يحتوي الكود على led عدد 2 و مفتاحين button
عندما نضغط على المفتاح الاول يضيء اللد الاول " و عندما نضغط عليه مره اخرى ينطفىء اللد و هذا سهل ان شاء الله .

* عندما نضغط على المفتاح الثاني يضيىء اللد الثاني لمدة ثانيه واحده ثم ينطفىء و هذا بشرط ان يكون اللد الاول مضيىء(اذا كان اللد الاول منطفىء لا اريد ان يعمل اللد الثاني حتى لو ضغطنا على المفتاح الثاني))

*اذا ضغطنا مره اخرى على المفتاح الثاني (و اللد الاول مضيىء) لا اريد ان يضيىء اللد الثاني ...اريده ان يضيىء فقط اذا كان الاول مشتعل و لمره واحده فقط و لا يشتعل مره اخرى الا اذا اطفأنا اللد الاول و اعدنا اشعاله من جديد (( ان شاء الله يكون الكلام مفهوم))

*ثالثا اريد ان ينطفىء البورت ب portb بالكامل بعد خمس دقائق من تشفيل الجهاز

ملاحظه اريد ان تكون اوامر التأخير بالتايمر و ليس بالديلاي حيث ان الاخير يدخل المتحكم في حالة جمود ..و اخيرا اريد استخدام المتحكم 16f628a

اسف على الاطاله و دمتم سالمين ....
وعليكم السلام ورحمه الله

تفضل أخي اليك ما طلبت

صورة للكود




كود:
   
      // ENG ABDALLA HYGAZY //

      #define  LED1   PORTB.F0
      #define  LED2   PORTB.F1
      #define  OFF   =0;
      #define  ON   =1;
       unsigned int X1=0,X2=0,X3=0;
       unsigned int DATA1=0,DATA2=0;
       unsigned int TEMR1=0,TEMR2=0,TEMR3=0;

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

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

          if( DATA2==0){  TEMR1++;   }
           if( X1==1 && X2==1 ) { DATA1++;  LED2 ON       }                        
           if( DATA1==1000    ) { LED2 OFF DATA1=0; X2=0; }
          //******************************************************//
           if( TEMR1==1000 ) { TEMR2++; TEMR1=0;                            }        
           if( TEMR2==60   ) { TEMR3++; TEMR2=0;                            }             
           if( TEMR3==5    ) { TEMR3=0; TEMR2=0; TEMR1=0; DATA2=1; PORTB=0; }   
  }
  }

         void main() {
         PORTB=0; TRISB=192;
         InitTimer0();

          while(1){

         if( DATA2==0 )
        {
          if(PORTB.F7==1){ PORTB.F0 =~ PORTB.F0;                                    
          if(PORTB.F0==1){  X1=1;  }   else X1=0;
          if(PORTB.F0==1){  X3=1;  }   else X3=0;  delay_ms(250);}
          if(PORTB.F6==1 && X1==1 && X3==1 ){X2=1; X3=0; delay_ms(250);}
        }


     }
  }

صورة للمحكاة والدائرة




بالتوفيق ان شاء الله

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

A-M-S
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 242
نشاط [ A-M-S ]
قوة السمعة:0
قديم 07-01-2021, 03:29 PM المشاركة 3   
x5


السلام عليكم و رحمة الله
اخي عبد الله انا عاجز عن الشكر ... شكرا جزيلا لحضرتك وجعله الله في ميزان حسناتك
اخي الكريم اريد من حضرتك تعديل بسيط على البرنامج اذا سمحت ..
اولا اريد ان تكون مفاتيح الادخال على PORTA و الخرج على PORTB
ثانيا اريد ان استخدم مذبذب 4MHZ حيث انني اريد استخدام المذبذب الداخلي للمتحكم .. و اريد من حضرتك شرح بسيط على طريقة تبديل التوقيت في حال انني اردت زيادة او انقاص الوقت سواء في الدقائق او في الثواني ... و هنا لاحظت شيئ ان وقت التأخير في هذا البرنامج هو 10 دقائق و ليس 5 و و عندما اردت التفيير ل 5 دقائق قسمت الرقم على 2 // اي انني كتبت 2.5 بدل 5 و نجح الامر
و يا ريت تكون الارقام حقيقيه اذا امكن .. بمعنى اخر اذا احتجت 5 دقائق اكتب رقم 5 و اذا احتجت تأخير 7 دقائق اكتب الرقم 7 اما اذا كان هذا صعب فلا يوجد مشكله اذا كتبنا ارقام اخرى و قمنا بقسمتها و لكن اريد شرح بسيط عن الموضوع..

ثالثا اريد اضافة ليدات عدد 2 على PORTB و مفتاحان عللا PORTA احداهما كالمفتاح الاول ؛؛اذا ضغطنا عليه يضيئ اللد الثالث و اذا ضغطنا عليه مره اخرى يطفئ اللد الثالث INVERT
اما المفتاح الرابع عند الاستمرار بالضغط عليه يبقى اللد الرابع مضيئ و عند افلاته ينطفئ اللد الرابع (if ilse)
تحملني اخي الكريم بعرف ازعجتك ... انا لدي معرفه في البرمجه لكن بسيطه و دمت لنا


A-M-S
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 242
نشاط [ A-M-S ]
قوة السمعة:0
قديم 07-01-2021, 03:33 PM المشاركة 4   
افتراضي


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

تفضل أخي اليك ما طلبت

صورة للكود




كود:
   
      // ENG ABDALLA HYGAZY //

      #define  LED1   PORTB.F0
      #define  LED2   PORTB.F1
      #define  OFF   =0;
      #define  ON   =1;
       unsigned int X1=0,X2=0,X3=0;
       unsigned int DATA1=0,DATA2=0;
       unsigned int TEMR1=0,TEMR2=0,TEMR3=0;

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

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

          if( DATA2==0){  TEMR1++;   }
           if( X1==1 && X2==1 ) { DATA1++;  LED2 ON       }                        
           if( DATA1==1000    ) { LED2 OFF DATA1=0; X2=0; }
          //******************************************************//
           if( TEMR1==1000 ) { TEMR2++; TEMR1=0;                            }        
           if( TEMR2==60   ) { TEMR3++; TEMR2=0;                            }             
           if( TEMR3==5    ) { TEMR3=0; TEMR2=0; TEMR1=0; DATA2=1; PORTB=0; }   
  }
  }

         void main() {
         PORTB=0; TRISB=192;
         InitTimer0();

          while(1){

         if( DATA2==0 )
        {
          if(PORTB.F7==1){ PORTB.F0 =~ PORTB.F0;                                    
          if(PORTB.F0==1){  X1=1;  }   else X1=0;
          if(PORTB.F0==1){  X3=1;  }   else X3=0;  delay_ms(250);}
          if(PORTB.F6==1 && X1==1 && X3==1 ){X2=1; X3=0; delay_ms(250);}
        }


     }
  }

صورة للمحكاة والدائرة




بالتوفيق ان شاء الله

السلام عليكم و رحمة الله
اخي عبد الله انا عاجز عن الشكر ... شكرا جزيلا لحضرتك وجعله الله في ميزان حسناتك
اخي الكريم اريد من حضرتك تعديل بسيط على البرنامج اذا سمحت ..
اولا اريد ان تكون مفاتيح الادخال على PORTA و الخرج على PORTB
ثانيا اريد ان استخدم مذبذب 4MHZ حيث انني اريد استخدام المذبذب الداخلي للمتحكم .. و اريد من حضرتك شرح بسيط على طريقة تبديل التوقيت في حال انني اردت زيادة او انقاص الوقت سواء في الدقائق او في الثواني ... و هنا لاحظت شيئ ان وقت التأخير في هذا البرنامج هو 10 دقائق و ليس 5 و و عندما اردت التفيير ل 5 دقائق قسمت الرقم على 2 // اي انني كتبت 2.5 بدل 5 و نجح الامر
و يا ريت تكون الارقام حقيقيه اذا امكن .. بمعنى اخر اذا احتجت 5 دقائق اكتب رقم 5 و اذا احتجت تأخير 7 دقائق اكتب الرقم 7 اما اذا كان هذا صعب فلا يوجد مشكله اذا كتبنا ارقام اخرى و قمنا بقسمتها و لكن اريد شرح بسيط عن الموضوع..

ثالثا اريد اضافة ليدات عدد 2 على PORTB و مفتاحان عللا PORTA احداهما كالمفتاح الاول ؛؛اذا ضغطنا عليه يضيئ اللد الثالث و اذا ضغطنا عليه مره اخرى يطفئ اللد الثالث INVERT
اما المفتاح الرابع عند الاستمرار بالضغط عليه يبقى اللد الرابع مضيئ و عند افلاته ينطفئ اللد الرابع (if ilse)
تحملني اخي الكريم بعرف ازعجتك ... انا لدي معرفه في البرمجه لكن بسيطه و دمت لنا


الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 08-01-2021, 04:27 AM المشاركة 5   
افتراضي


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

تفضل أخي

كود:
       
      // ENG ABDALLA HYGAZY //

      #define  LED1   PORTB.F0
      #define  LED2   PORTB.F1
      #define  OFF   =0;
      #define  ON   =1;
       unsigned int X1=0,X2=0,X3=0;
       unsigned int DATA1=0,DATA2=0;
       unsigned int TEMR1=0,TEMR2=0,TEMR3=0;

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

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

          if( DATA2==0){  TEMR1++;   }
           if( X1==1 && X2==1 ) { DATA1++;  LED2 ON       }                       
           if( DATA1==1000    ) { LED2 OFF DATA1=0; X2=0; }
          //******************************************************//
           if( TEMR1==1000 ) { TEMR2++; TEMR1=0;                            }        
           if( TEMR2==60   ) { TEMR3++; TEMR2=0;                            }         
           if( TEMR3==5    ) { TEMR3=0; TEMR2=0; TEMR1=0; DATA2=1; PORTB=0; }       
  }
  }

         void main() {
         PORTB=0; TRISB=0;
         PORTA=0; TRISA=7;
         InitTimer0();
       //   dcon1=0x06;
         CMCON=7;
         
          while(1){

         if( DATA2==0 )
        {
          if(PORTA.F0==1){ PORTB.F0 =~ PORTB.F0;                                  
          if(PORTB.F0==1){  X1=1;  }   else X1=0;
          if(PORTB.F0==1){  X3=1;  }   else X3=0;  delay_ms(250);}
          if(PORTA.F1==1 && X1==1 && X3==1 ){X2=1; X3=0; delay_ms(250);}
          
           if(PORTA.F2==1){ delay_ms(10); PORTB.F2 =1; } else PORTB.F2=0;

          
        }


     }
  }   






بالنسبه لضبط الوقت في البرنامج هذا استخدم التايمر الداخلي بمقدار واحد ميلي ثانيه للدورة الواحدة
لو تلاحظ المتغير
كود:
 if( TEMR1==1000 )
هوا يعد 1000 دورة لكي يذيد المتغير المسؤل
عن الثواني بواحد
وهنا تم حسابات الوقت في البرنامج بأن كل 1000 دورة تساوي واحد ثانيه ..
ولأن العداد الداخلي لا يكون دقيق في عد الأوقات الكبيرة مثل 5 قائق فهنا تحدث الخلاف في الوقت
الحقيقي .. والحل هنا كما تفضلت .. انت .. تقوم بذيادة أو انقاص الرقم الشرطي امام المتغير
لكي تحصل علي الوقت الحقيقي ..
بالنسبه لختيار الوقت في البرنامج
كما تفضلت به وقسمت عدد 5 علي 2.5 وهوا عدد الدقائق ..
هنا ايضا يوجد متغير للحساب الواحد ثانيه الخاصه باليد الثاني
ولاحظ هنا
كود:
  if( DATA2==0){  TEMR1++;   }
           if( X1==1 && X2==1 ) { DATA1++;  LED2 ON       }                       
           if( DATA1==1000    ) { LED2 OFF DATA1=0; X2=0; }
لو تلاحظ يوجد متغير اسمه
كود:
  DATA1==1000
ولاحظ الرقم امامه = 1000 وهنا هي 1000 ميلي ثانيه و = واحد ثانيه اللتي ينتظرها الليد الثاني قبل أن ينطفئ
وهنا يمكنك التلاعب في الوقت واختيار ما تشاء .. مثلا يمكنك ان تجعل وقت الديلاي لليد الثاني 10 ثواني
فقط اضف صفر لكل يصبح الرقم 10000 وهكذا لو تريد دقيقه يصبح الرقم 100000 وهنا يكون العد
بالميلي ثانيه يمكنك ضبط الوقت كما تشاء

ايضا توجد مشاريع متقدمه بستخدام شاشه يمكنك منها اختيار وضبط الأوقات للبرنامج كما تشاء بدون اعادة برمجه المتحكم

بالتوفيق
تحياتي ولا تشكرني علي واجب


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

A-M-S
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 242
نشاط [ A-M-S ]
قوة السمعة:0
قديم 09-01-2021, 08:10 PM المشاركة 6   
sun


عليكم السلام اخي عبد الله و اكرر شكري لحضرتك
هنا الكود كالمطلوب بارك الله فيك .. لكن لدي ملاحظه بسيطه ..بالنسبه للمفتاح الاول RA0 يعمل كالمطلوب لكن بعد انقضاء المده الزمنيه المطلوبه5 minit و انطفاء ال PORTB لا يعود المفتاح للعمل مره اخرى الا اذا اطفيت المحاكاه واعدت تشغيلها من جديد (او فصلت التغذيه عن الجهاز في الحقيقه) .. وانا اريد انه بعد انقضاء الفتره و انطفاء البورت ان يعيد التشغيل مره اخرى اذا طلبنا منه ذلك .. اي بدون اطفاء المحاكاه او التغذيه ......

و اذا كان لديك اتساع من الوقت اريد نفس الكود السابق لكن مع اختلاف امر بسيط و هو :
عند الضغط على المفتاح الاول PORTA.F0 يضيئ اللد الاول في PORTB .F0 ( كالسابق !=)و بعد خمس ثواني يضيئ اللد الثاني على PORTB.F1 لمدة 600ms ثم ينطفئ ..او ارجو ان يتسع صدرك لي على كثرة طلباتي لكن هذا جزء من مشروع اريد ان اقوم بعمله و لك الاجر و الثواب ان شاء الله تعالى


الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 10-01-2021, 01:23 AM المشاركة 7   
افتراضي


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

اسف انا كده مش فاهم المطلوب بالظبط
فضلا رتب الأوامر والحالات المطلبه مع زمن التشغيل


A-M-S
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 242
نشاط [ A-M-S ]
قوة السمعة:0
قديم 10-01-2021, 05:37 AM المشاركة 8   
افتراضي


حاضر .. ان شاء الله حرتب الاوامر بالضبط زي ما حضرتك عاوز ....

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025