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

   

ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 07-05-2014, 11:01 AM المشاركة 9   
افتراضي



السلام عليكم
أخي أحمد عزيز ,, أني في إنتظارك ,,
نعم اخي ازا قمت بالشرح هل تستطيع تنفيذه انت بالفلوكود لاني لم اعمل على الفلوكود استطيع فقط ان اشرح لك الطريقة واسير معك خطوة خطوة فهل هذا يكفي ام انك بحاجة لمن يكتبه بالفلوكود

اعلانات

ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 07-05-2014, 03:14 PM المشاركة 10   
افتراضي


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

كود:
#include <mega8.h>

unsigned char x0=0,x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,x7=0;   //تعريف المتغيرات لاستخدامها في البرنامج
unsigned char y0=0,y1=0,y2=0,y3=0,y4=0,y5=0,y6=0,y7=0,V0=0,V1=0,V2=0,V3=0,V4=0,V5=0,V6=0,V7=0;
bit u0=0,u1=0,u2=0,u3=0,u4=0,u5=0,u6=0,u7=0,z=0,z1=0;
//////////////////////////////////////////////////////////////////////////

interrupt [TIM0_OVF] void timer0_ovf_isr(void) //هذا التايمر نحدد به اقل جزء نريد ان نقسم عليه 
    {                                          //الزمن الدوري الكامل وهنا اخترنا40ميكرو ثانية  
      TCNT0=0xD7;  
      z=1;  //هذا البت وضعناه في التايمر ليكون شرطا لتنفيذ التعليمات اللتى يجب ان تكون
    }       //داخل التايمرولكن ننفذها خارج التايمر 
/////////////////////////////////////////////////////////////////
interrupt [TIM1_OVF] void timer1_ovf_isr(void) // هذا التايمر نحدد به الزمن الدوري الكامل للنبضة 
  {                                            //وهنا اخترنا 10 ميلي ثانية 
    TCNT1H=0xFB1D >> 8;
    TCNT1L=0xFB1D & 0xff;    
    z1=1;   //هذا البت وضعناه في التايمر ليكون شرطا لتنفيذ التعليمات اللتى يجب ان تكون  
  }         //داخل التايمرولكن ننفذها خارج التايمر 
//////////////////////////////////////////////////////////////
void main(void)
{
PORTB=0x00;
DDRB=0xFF;             //هنا تعريف المداخل والمخارج

PORTD=0xFF;
DDRD=0x00;

TCCR0=0x02;
TCNT0=0xD7;

TCCR1A=0x00;
TCCR1B=0x03;
TCNT1H=0xFB;
TCNT1L=0x1D;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

TIMSK=0x05;

#asm("sei")
///////////////////////////////////////////////////////////////////
while (1)    //البرنامج الرئيسي
      { 
        if(z==1) //هنا عند حدوث مقاطعة التايمر الاول كل 40ميكرو ثانية يتم الدخول الى هذا الشرط
         {       //y وتصفير البت من اجل بدء دورة جديدة وزيادة كل متغيرات 
            z=0;
            y0++;y1++;y2++;y3++;y4++;y5++;y6++;y7++;
         }
        ///////////////////////////////////////////////////// 
        if(z1==1) //عند حدوث مقاطعة التايمر الثاني كل 10 ميلي ثانية يتم الدخول الى هذا الشرط 
          {       //وتصفير البت من اجل بدء دورة جديدة ووضع 5 فولت على كامل البورت اللذي نريد 
                  //y او على اي قطب نريده من المايكروونقوم بتصفير جميع متغيرات 
                  // المسئولة عن التاخير الزمني بين كل زيادةV ونقوم بزيادة متغيرات 
             z1=0;
             PORTB=255;
             y0=0;y1=0;y2=0;y3=0;y4=0;y5=0;y6=0;y7=0; 
             V0++;V1++;V2++;V3++;V4++;V5++;V6++;V7++;
          } 
        /////////////////////////////////////////////////////////////////  
        if(V0>=5){x0++;V0=0;}  // خمس مرات يعني كل 50ميلي ثانية سيدخل يصفر المتغير  V هناعند زيادة متغير 
                               // y0 اللتي سيتم مقارنتها مع  x0 ويزيد 
         if(x0>=249)x0=0; //عند وصول متغير اكس الى 250يعني تقريبا كامل الزمن الدوري وهي 10ميلي تقسيم 40مايكرو نصفر اكس للبدء بدورة جديدة 
                          
                              //Vنقوم بتغيير قيمة  BWM لكل مخرج شرط وهنا 8 شروط لتمن مخارج وللتحكم بسرعة ال
        if(V1>=10){x1++;V1=0;}
         if(x1>=249)x1=0;
         
        if(V2>=15){x2++;V2=0;}
         if(x2>=249)x2=0;
         
        if(V3>=5){x3++;V3=0;}
         if(x3>=249)x3=0; 
         
        if(V4>=5){x4++;V4=0;}
         if(x4>=249)x4=0;
         
        if(V5>=5){x5++;V5=0;}
         if(x5>=249)x5=0;
         
        if(V6>=5){x6++;V6=0;}
         if(x6>=249)x6=0;
         
        if(V7>=5){x7++;V7=0;}
         if(x7>=249)x7=0; 
        /////////////////////////////////////////////////////////////////////  
         if(y0>=x0)PORTB.0=0; // نقوم باطفاء المخرج الذي  x مساوية ل  y عند وصول قيمة
                              //شغلناه اثناء الدخول لتايمر الزمن الدوي 
         if(y1>=x1)PORTB.1=0; 
         if(y2>=x2)PORTB.2=0; 
         if(y3>=x3)PORTB.3=0; 
         if(y4>=x4)PORTB.4=0; 
         if(y5>=x5)PORTB.5=0; 
         if(y6>=x6)PORTB.6=0; 
         if(y7>=x7)PORTB.7=0; 
        //////////////////////////////////////////////////////////////////// 
         
      }
}

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

mar7aba_01
:: موقوف ::
تاريخ التسجيل: Jan 2010
الدولة: المغرب
المشاركات: 739
نشاط [ mar7aba_01 ]
قوة السمعة:
قديم 07-05-2014, 06:11 PM المشاركة 11   
افتراضي


سأحاول كتابته بالفلوكود إنشاء الله ,,
هههه رغم أني لاأطــيق مقاطعات التايمر زيرو ,
منذ مدة وأنا أكتب برامج وأحاول تفاديها قدر المستطاع ,,,
لا يسعني سوى أن أقول """ جــزاك الله خــيـــــــرا """""


التعديل الأخير تم بواسطة : mar7aba_01 بتاريخ 07-05-2014 الساعة 09:24 PM

mar7aba_01
:: موقوف ::
تاريخ التسجيل: Jan 2010
الدولة: المغرب
المشاركات: 739
نشاط [ mar7aba_01 ]
قوة السمعة:
قديم 08-05-2014, 02:14 AM المشاركة 12   
افتراضي


السلام عليكم
أخي "أحمد عزيز" حاولت التواصل معك عبر الرسائل الخاصة لكن يبدو أن خاصية الرسائل معطلة لديك ,


ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 08-05-2014, 09:35 AM المشاركة 13   
افتراضي


السلام عليكم
أخي "أحمد عزيز" حاولت التواصل معك عبر الرسائل الخاصة لكن يبدو أن خاصية الرسائل معطلة لديك ,
نعم اخي كانت هذه الخاصية غير مفعلة الان فعلتها وهي جاهزة


ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 08-05-2014, 09:04 PM المشاركة 14   
افتراضي


سأحاول كتابته بالفلوكود إنشاء الله ,,
هههه رغم أني لاأطــيق مقاطعات التايمر زيرو ,
منذ مدة وأنا أكتب برامج وأحاول تفاديها قدر المستطاع ,,,
لا يسعني سوى أن أقول """ جــزاك الله خــيـــــــرا """""
اخي التايمرات مهمة في البرامج ويجب ان تعتاد على التعامل معها يكاد لايخلو برنامج من استخدام التايمر فجميع البرامج المتعددة الوظائف يجب ان تستخدم التايمر لحساب التاخيرات الزمنية عوضا عن الديلي لكي لايتوقف البرنامج في انتظار نهاية وقت الديلي


mar7aba_01
:: موقوف ::
تاريخ التسجيل: Jan 2010
الدولة: المغرب
المشاركات: 739
نشاط [ mar7aba_01 ]
قوة السمعة:
قديم 09-05-2014, 04:12 AM المشاركة 15   
افتراضي


وهو ما أفعله الآن لكن مشكلتي في ضيق الوقت ,
مما جعلني أطلب المساعدة منك مرة أخري جزاك الله خيرا ,,
المثال الذي أرفقته لي جد جد مهم لي لو تتفضل بتغير المتحكم إلى متحكم نوع بيك كمثل 18F4550 لأني أستخدم لوحة التجارب StartUSB وأبرمج عبر البوت لودر ,, ولو كنت تعلم شيء عن البرمجة بالفلوكود أكون شاكرا لك ,


ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 09-05-2014, 05:54 AM المشاركة 16   
افتراضي


وهو ما أفعله الآن لكن مشكلتي في ضيق الوقت ,
مما جعلني أطلب المساعدة منك مرة أخري جزاك الله خيرا ,,
المثال الذي أرفقته لي جد جد مهم لي لو تتفضل بتغير المتحكم إلى متحكم نوع بيك كمثل 18F4550 لأني أستخدم لوحة التجارب StartUSB وأبرمج عبر البوت لودر ,, ولو كنت تعلم شيء عن البرمجة بالفلوكود أكون شاكرا لك ,
انا اسف اخي فلم اكتب برامج للبك ولم اعمل على الفلوكود ربما يدخل احد الاعضاء من خبراء البك او الفلوكود ونتساعد في تحويل الكود



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