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

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

يعرب مطر
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2016
الدولة: سوريا
المشاركات: 130
نشاط [ يعرب مطر ]
قوة السمعة:0
قديم 20-06-2017, 02:14 PM المشاركة 1   
افتراضي مساعدة في هذا الكود Twitter FaceBook Google+



السلام عليكم

لدي هذا الكود لتوليد نغمة بإستخدام الامر delay

اريد كتابة نفس الكود ونفس الزمن بإستخدام مقاطعة التايمر 0


ولكم جزيل الشكر
كود:
void main()
{ int x,y; trisb=0; portb=0; 
while(1){ 
 for(x=0;x<50;x++){ 
 portb.f0=1; for(y=0;y<x;y++)delay_us(10); 
 portb.f0=0; for(y=0;y<x;y++)delay_us(10); 
 } 
 } 
}

اعلانات

يعرب مطر
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2016
الدولة: سوريا
المشاركات: 130
نشاط [ يعرب مطر ]
قوة السمعة:0
قديم 22-06-2017, 03:02 PM المشاركة 2   
افتراضي


للتذكير ...
اريد مساعدة في هذا الكود بأسرع وقت لو سمحتم

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

محمد إلياس
:: مهندس جيد ::
تاريخ التسجيل: Jan 2017
المشاركات: 230
نشاط [ محمد إلياس ]
قوة السمعة:0
قديم 23-06-2017, 02:50 PM المشاركة 3   
افتراضي


السلام عليكم
10 ميكروتانية فوق و10 تحت معناها موجة مربعة بزمن دوري يساوي 20 ميكروتانية أو تردد 50 كيلوهرتز.
المتحكم Pic16F628A يتوفر على 3 تايمرات .
هذا كود بالتايمر2:
كود:
void InitTimer2(){
  T2CON         = 0x04;
  PR2           = 49;
  TMR2IE_bit    = 1;
  INTCON        = 0xC0;
}

void Interrupt(){
  if (TMR2IF_bit)
  {
    TMR2IF_bit = 0;
    PORTB.F0 = ~PORTB.F0;
  }
}

void main()
{
 TRISB = 0;
 PORTB = 0;
 CMCON = 7;
 InitTimer2();
  while(1)
  {

  }
}
وهذه صورة الإعدادات التي هيأت بها المشروع في كومبيلر الميكروسي.
كما تلاحظ الطرف RA5 مهيأ كطرف للدخل وليس للريست يعني تتركه بدون توصيل مع الموجب في هذه التجربة.
وتحت الاعدادات صورة محاكاة على بروتوس تفيد أن الكود يقوم بالمطلوب
لكن عليك بالتنفيذ العملي للحكم عليها:

احصائية الشكر والاعجاب - 2 شكراً, 0 عدم اعجاب, 3 اعجاب
شكراً يعرب مطر, عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب assed, يعرب مطر, عبدالله حجازى ( أعجبته المشاركة )

يعرب مطر
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2016
الدولة: سوريا
المشاركات: 130
نشاط [ يعرب مطر ]
قوة السمعة:0
قديم 23-06-2017, 03:57 PM المشاركة 4   
افتراضي


السلام عليكم

شكرا لك اخي محمد على المساعدة

لكن الكود ليس 10ميكرو فوق و10تحتبشكل دوري!

انما هو 10فوق و10تحت ثم عندما يصبح المتغير xيساوي2
يصبح 20فوق وعشرين تحت وعندما تصبح قيمة xتساوي 3
يصبح30فوق و30تحت وهكذا حتى تصبح 500فوق و500تحت
وهذا ما اريد عمله بالتايمر زيرو

ارجو الرد


محمد إلياس
:: مهندس جيد ::
تاريخ التسجيل: Jan 2017
المشاركات: 230
نشاط [ محمد إلياس ]
قوة السمعة:0
قديم 23-06-2017, 05:40 PM المشاركة 5   
افتراضي


السلام عليكم

شكرا لك اخي محمد على المساعدة

لكن الكود ليس 10ميكرو فوق و10تحتبشكل دوري!

انما هو 10فوق و10تحت ثم عندما يصبح المتغير xيساوي2
يصبح 20فوق وعشرين تحت وعندما تصبح قيمة xتساوي 3
يصبح30فوق و30تحت وهكذا حتى تصبح 500فوق و500تحت
وهذا ما اريد عمله بالتايمر زيرو

ارجو الرد
معذرة أخي ظننت أنك تريد إشارة مربعة وأن طلبك هو عطف على طلبك السابق هذا:
http://www.qariya.info/vb/showthread.php?t=210306
الآن وبعد توضيحك للمطلوب
أظن أن ما تريده يمكن أن تعمله ببرمجة ال PWM التي يتوفر عليها Pic16F628A.
هذا الرسم يبين أن ال PWM هي طريقة للتحكم في عرض نبضات تردد معين:

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب يعرب مطر, عبدالله حجازى ( أعجبته المشاركة )

يعرب مطر
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2016
الدولة: سوريا
المشاركات: 130
نشاط [ يعرب مطر ]
قوة السمعة:0
قديم 23-06-2017, 06:42 PM المشاركة 6   
افتراضي


شكرا لك اخي محمد الياس
بالضبط هذا ما اريده
سأبحث عن برمجة pwm


شكرا للمساعدة


يعرب مطر
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2016
الدولة: سوريا
المشاركات: 130
نشاط [ يعرب مطر ]
قوة السمعة:0
قديم 24-06-2017, 07:06 PM المشاركة 7   
افتراضي


السلام عليكم
كل عام وانتم بخير


اريد كتابة كود لتفعيل التايمر صفر
التعاريف والدوال والمقاطعة وضمن المقاطعة عداد كل 8ميكروثانية عدة
الرجاء المساعدة


ولكم جزيل الشكر

لانني كتبت الكود ولم يعمل التايمر مع انني نسخت الكود من برنامج تايمركالكوليتر
والزمن المطلوب هو 8ميكرو ثانية والكريستالة المستخدمة 20ميغاهيرتز والبيك pic16f628


محمد إلياس
:: مهندس جيد ::
تاريخ التسجيل: Jan 2017
المشاركات: 230
نشاط [ محمد إلياس ]
قوة السمعة:0
قديم 24-06-2017, 09:30 PM المشاركة 8   
افتراضي


السلام عليكم
كل عام وانتم بخير


اريد كتابة كود لتفعيل التايمر صفر
التعاريف والدوال والمقاطعة وضمن المقاطعة عداد كل 8ميكروثانية عدة
الرجاء المساعدة


ولكم جزيل الشكر

لانني كتبت الكود ولم يعمل التايمر مع انني نسخت الكود من برنامج تايمركالكوليتر
والزمن المطلوب هو 8ميكرو ثانية والكريستالة المستخدمة 20ميغاهيرتز والبيك pic16f628
السلام عليكم
أخي تنسخ الكود وتضعه بأعلى الصفحة كما أخبروك وهو يتضمن دالتين كما ترى:
دالة تهيئة التايمر0 ودالة المقاطعة.
لكن لا تنسى أن تضع تعليمة المناداة على دالة تهيئة التايمر 0 في مكانها المناسب أي ضمن الدالة الرئيسية للبرنامج
طبعا إلى جانب تعليمات التهيئة العادية مثل المسجلات TRISو PORT وغيرها حسب المطلوب .
هذا ضروري لتفعيل المقاطعة.
في هذا المثال التعليمة المذكورة مكتوبة بالأحمر والعداد الذي طلبت هو x مكتوب باللون الأزرق:
كود:
//Timer0 //Prescaler 1:1; TMR0 Preload = 216; Actual Interrupt Time : 8 us //Place/Copy this part in declaration section int x; void InitTimer0(){ OPTION_REG = 0x88; TMR0 = 216; INTCON = 0xA0; } void Interrupt(){ if (TMR0IF_bit){ TMR0IF_bit = 0; TMR0 = 216; //Enter your code here: x++; } } void main() { TRISB = 0; PORTB = 0; CMCON = 7; InitTimer0(); while(1) { } }
وكل عام وأنتم بخير.

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً يعرب مطر ( شكر العضو على هذه المشاركة )
اعجاب يعرب مطر ( أعجبته المشاركة )
إضافة رد

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

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

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


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

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