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

   

عبدالله نعمان
:: مهندس متواجد ::
تاريخ التسجيل: May 2006
المشاركات: 173
نشاط [ عبدالله نعمان ]
قوة السمعة:
قديم 25-11-2013, 11:39 PM المشاركة 9   
افتراضي



تعقيب بسيط:
-------------------
حساب الزمن لا يتاثر بتردد الكريستاله لانه زمن ثابت
اما عن 1 مكرو ثانيه فمعناه ان مليون امر يتم تنفيذهم في الثانيه
اما 1 مللي ثانيه فهو معناه الف امر في الثانيه
اما اختيار كريستاله بتردد معين فهذا في المقام الاول يزيد من عدد الاوامر المنفذه في الثانيه الوااحده
كذلك وفقا للاشارات التي تريد توليدها من المكرو مثلا استخدامه في الاتصالات وهكذا............
----------------
هذا في حدود علمي والله اعلم...

اعلانات

الصورة الرمزية remon romany
remon romany
:: عضو نشط ::
تاريخ التسجيل: Feb 2011
المشاركات: 893
نشاط [ remon romany ]
قوة السمعة:
قديم 25-11-2013, 11:54 PM المشاركة 10   
افتراضي


تعقيب بسيط:
-------------------
حساب الزمن لا يتاثر بتردد الكريستاله لانه زمن ثابت
اما عن 1 مكرو ثانيه فمعناه ان مليون امر يتم تنفيذهم في الثانيه
اما 1 مللي ثانيه فهو معناه الف امر في الثانيه
اما اختيار كريستاله بتردد معين فهذا في المقام الاول يزيد من عدد الاوامر المنفذه في الثانيه الوااحده
كذلك وفقا للاشارات التي تريد توليدها من المكرو مثلا استخدامه في الاتصالات وهكذا............
----------------
هذا في حدود علمي والله اعلم...
افهم من كلام حضرتك ان حساب الزمن يكون ثابت ولكن سرعة تنفيذ الاوامر هى اللى بتتغير
يعنى مثلا لو كتبت الامر delay_us 1000 ووضعت مثلا كريستالة 4 ميجا هرتز
وكان الامر delay_us 1000 ينفذ فى ثانية مثلا فى وجود الكريستالة 4 ميجا
فان الامر delay_us 1000 سوف ينفذ فى نصف ثانية اذا وضعت كريستالة 8 ميجا
فهل انا كلامى صحيح ام لا
ارجو التوضيح وشكرا

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

عبدالله نعمان
:: مهندس متواجد ::
تاريخ التسجيل: May 2006
المشاركات: 173
نشاط [ عبدالله نعمان ]
قوة السمعة:
قديم 26-11-2013, 12:34 AM المشاركة 11   
افتراضي


انا اقصد ان الزمن نفسه لا يتاثر بمعني
لو مثلا السطر delay رقمه 1000
وسرعة التنفيذ 1 مللي
فسيتم تنفيذه بعد ا ثانيه
واذا كان الليد يضيء لمدة 10 ثواني فسيضيء لمدة 10 ثواني ولا يتاثر بقيمة الكريستاله
وانما الذي يتغير سرعة تنفيذ الاوامر نفسها
وهذا ما افهمه والله عزوجل اعلم
وياريت الاخوه يشاركونا ايضا لكي نستوعب الامر علي اكمل وجه


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 26-11-2013, 05:57 AM المشاركة 12   
افتراضي


السلام عليكم
سرعه تنفيذ هي تعتمد على تردد الساعه (( كرستاله)) وسرعه البرنامج معتمده على هذا التردد فمثلا عندما نتعامل مع تايمر0 لابد من أخذ زمن تنفيذ الاوامر لكي نستطيع حساب عدد نبضات فمثلا كرستاله 4 معناها زمن تنفيذ الاوامر 1us وبتالي كل امر ينفذ بهذا الزمن الا delay يبقى نفس ماهو لانه داله وهذه داله تأخذ تغير تردد كرستاله بعين الاعتبار (( في delay يزداد سرعه تنفيذ الاوامر داخل داله delay ولكنك ستحصل على نتيجه ثابته اي كانما نقول لغرض فهم ان delay اصلا هي عباره عن تكرار أمر لعده مرات وهذه تكرار مساويه تقريبا لزمن الحقيقي واذا افترضنا تردد كرستاله 4 وكتبنا الامر (delay_ms(1000
فانه حتى نحصل على هذا الزمن فان delay سوف تكرر الامر بعد x من مرات لكي يكون بعدها زمن 1 ثانيه واذا تم تغير كرستاله الى 8 هنا سرعه سوف تزداد ويصبح زمن تنفيذ 0.5us ولكي نحصل على 1 ثانيه فانه سوف تقوم داله delay بتنفيذ تكرار الاوامر بعدد 2x من مرات وبتالي يبقى زمن 1 ثانيه))

ولو تلاحظ في تايمر0 عندما يكون تردد كرستاله 4 فانما عندما نقول نريد يحدث الانتربت كل 1 ملي ثانيه يعني كل 1000 مايكروثانيه
انظر كود لكرستاله 8 ميكا
كود:
//Timer0
//Prescaler 1:8; TMR0 Preload = 5; Actual Interrupt Time : 1 ms
 
//Place/Copy this part in declaration section
void InitTimer0(){
  OPTION_REG	 = 0x82;
  TMR0		 = 5;
  INTCON	 = 0xA0;
}
 
void Interrupt(){
  if (TMR0IF_bit){ 
    TMR0IF_bit	 = 0;
    TMR0		 = 5;
    //Enter your code here
  }
}
وكود لكرستاله 4 ميكا
كود:
//Timer0
//Prescaler 1:4; TMR0 Preload = 5; Actual Interrupt Time : 1 ms
 
//Place/Copy this part in declaration section
void InitTimer0(){
  OPTION_REG	 = 0x81;
  TMR0		 = 5;
  INTCON	 = 0xA0;
}
 
void Interrupt(){
  if (TMR0IF_bit){ 
    TMR0IF_bit	 = 0;
    TMR0		 = 5;
    //Enter your code here
  }
}
على فكره يوجد برنامج كامل من شركه مايكروشيب لكتابه الكود لكل تايمرات

لاحظ بالكود انه الاعدادات هي نفسها ولكن اختلف فقط معامل تقسيم Prescaler

لكي يبقى زمن كما هو وفي مثالنا في الانتربت هو 1 ملي ثانيه


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 26-11-2013 الساعة 06:13 AM

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 26-11-2013, 06:21 AM المشاركة 13   
افتراضي


هذا هو برنامح الخاص بجميع التايمرات

http://www.mediafire.com/download/8c...2520v2.5.1.rar

اختار البك عت طريق تحديد العائله الي ينتمي لها فالبك 16f84a ينتمي الى 16f
بعدين حدد تردد كرستاله

بعدين حدد زمن الذي يحدث عنده الانتربب
وبعدين اضغط على calculate وفي جهه مقابله سوف يعطيك كود جاهز
يمكنك الاستفاده من هذا البرنامج في تعلم كيفيه ضبط الاعدادات لتايمرات وايضا رجسترات التي يتعامل معها وايضا يعطيك حساب الصحيح لما تريده بالضبط

ملاحظه يكتبلك داله تايمر وبعدين داله الانتربت لنسخ الكود يوجد كلمه
copy to clipboard
وعليك انت بكتابه داله تهيئه تايمر في داله الرئيسيه.


الصورة الرمزية remon romany
remon romany
:: عضو نشط ::
تاريخ التسجيل: Feb 2011
المشاركات: 893
نشاط [ remon romany ]
قوة السمعة:
قديم 26-11-2013, 02:12 PM المشاركة 14   
افتراضي


السلام عليكم
سرعه تنفيذ هي تعتمد على تردد الساعه (( كرستاله)) وسرعه البرنامج معتمده على هذا التردد فمثلا عندما نتعامل مع تايمر0 لابد من أخذ زمن تنفيذ الاوامر لكي نستطيع حساب عدد نبضات فمثلا كرستاله 4 معناها زمن تنفيذ الاوامر 1us وبتالي كل امر ينفذ بهذا الزمن الا delay يبقى نفس ماهو لانه داله وهذه داله تأخذ تغير تردد كرستاله بعين الاعتبار (( في delay يزداد سرعه تنفيذ الاوامر داخل داله delay ولكنك ستحصل على نتيجه ثابته اي كانما نقول لغرض فهم ان delay اصلا هي عباره عن تكرار أمر لعده مرات وهذه تكرار مساويه تقريبا لزمن الحقيقي واذا افترضنا تردد كرستاله 4 وكتبنا الامر (delay_ms(1000
فانه حتى نحصل على هذا الزمن فان delay سوف تكرر الامر بعد x من مرات لكي يكون بعدها زمن 1 ثانيه واذا تم تغير كرستاله الى 8 هنا سرعه سوف تزداد ويصبح زمن تنفيذ 0.5us ولكي نحصل على 1 ثانيه فانه سوف تقوم داله delay بتنفيذ تكرار الاوامر بعدد 2x من مرات وبتالي يبقى زمن 1 ثانيه))

ولو تلاحظ في تايمر0 عندما يكون تردد كرستاله 4 فانما عندما نقول نريد يحدث الانتربت كل 1 ملي ثانيه يعني كل 1000 مايكروثانيه
انظر كود لكرستاله 8 ميكا
كود:
//Timer0
//Prescaler 1:8; TMR0 Preload = 5; Actual Interrupt Time : 1 ms
 
//Place/Copy this part in declaration section
void InitTimer0(){
  OPTION_REG	 = 0x82;
  TMR0		 = 5;
  INTCON	 = 0xA0;
}
 
void Interrupt(){
  if (TMR0IF_bit){ 
    TMR0IF_bit	 = 0;
    TMR0		 = 5;
    //Enter your code here
  }
}
وكود لكرستاله 4 ميكا
كود:
//Timer0
//Prescaler 1:4; TMR0 Preload = 5; Actual Interrupt Time : 1 ms
 
//Place/Copy this part in declaration section
void InitTimer0(){
  OPTION_REG	 = 0x81;
  TMR0		 = 5;
  INTCON	 = 0xA0;
}
 
void Interrupt(){
  if (TMR0IF_bit){ 
    TMR0IF_bit	 = 0;
    TMR0		 = 5;
    //Enter your code here
  }
}
على فكره يوجد برنامج كامل من شركه مايكروشيب لكتابه الكود لكل تايمرات

لاحظ بالكود انه الاعدادات هي نفسها ولكن اختلف فقط معامل تقسيم Prescaler

لكي يبقى زمن كما هو وفي مثالنا في الانتربت هو 1 ملي ثانيه
انا متشكر جدا يا استاذ حسن على المجهود الرائع ده
باختصار انا اللى فهمتة
ان الدالة DELAY لا تتاثر بتغيير قيمة الكريستالة
حيث ان البرنامج يتاقلم مع قيمة الكريستالة وفى كل الاحوال سيبقى DELAY 1000MS يساوى ثانية واحده مهما تغيرت قيمة الكريستالة
ولكن الذى يتاثر هو الزمن فى التايمر زيرو حيث
ان قيمة الكريستالة لها تاثير على تايمر زيرو
كما قلت حضرتك


الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 636
نشاط [ المظلوم ]
قوة السمعة:
قديم 26-11-2013, 03:49 PM المشاركة 15   
افتراضي


أهلا ،،

فقط معلومة احببت ان ادرجها ،،


التجربة التي قمت بها أخي ،، لا يمكن من خلالها ان ترى أي فرق في عمل الدائرة ،، لسبب بسيط وهي انك عندما تضع أمرا ،، Delay_ms(1000) سيقوم البك بحساب ثانية فعليه ،، بغض النظر عن قيمة الكريستالة ،، 4 او 8 او 20 حتى ،، ! ،،



قيمة التردد تؤثر في حسابات أخرى ،، مثلا لو اردت ان تخرج دالة بتردد معين ،، فعليك ان تنتبه هنا لقيمة الكريستالة لان تردد الدالة التي تريد أن تخرجها ،،سيعتمد بشكل رئيسي على تردد هذه الكريستالة أو ما يمسمى المذبذب ،، oscillator !



تمنياتي


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 26-11-2013, 04:00 PM المشاركة 16   
افتراضي


انا متشكر جدا يا استاذ حسن على المجهود الرائع ده
باختصار انا اللى فهمتة
ان الدالة DELAY لا تتاثر بتغيير قيمة الكريستالة
حيث ان البرنامج يتاقلم مع قيمة الكريستالة وفى كل الاحوال سيبقى DELAY 1000MS يساوى ثانية واحده مهما تغيرت قيمة الكريستالة
ولكن الذى يتاثر هو الزمن فى التايمر زيرو حيث
ان قيمة الكريستالة لها تاثير على تايمر زيرو
كما قلت حضرتك
نعم كلامك صحيح



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