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

   

الصورة الرمزية wleed antar
wleed antar
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: القاهرة - مصر
المشاركات: 1,484
نشاط [ wleed antar ]
قوة السمعة:
قديم 13-04-2012, 08:38 AM المشاركة 9   
افتراضي



ما شاء الله عليك يا مهندس وليد
شرح جميل وموضوع أيضا جميل
جعله في ميزان حسناتك
وبارك الله فيك
بارك الله فيك أخى yac100
وسعدت بمرورك
وبالتوفيق

ضبط الوقت أكثر ما يؤرق المبرمجين ، و حضرتك شرحته بما لا يدع مجالا للغموض ، بارك الله و فيك و جزاك عنا خير الجزاء .
مرحبا بك أخى أبو معاذ 2010
نورت الموضوع بمرورك


جزاك الله خيرا

اريد ان اسال هل دقة الوقت الريل تايم تعتمد على المقاطعة

ام قطع اضافيه مثل ds1307

ام لغة البرمجة لها دور

اتمنى لو كان لك شروحات كيف نستخدم ds

-----------------------------------------------------

وبالنسبة للساعة التي عملتها نريد ان نضيف عليها بعض الاضافات

وهي... عند ضبط الساعة السفن سيجمنت يعمل فلاش لخانه الثواني او الدقائق او الساعات حسب ما اختار
والساعة تقف عن العد عند الضبط
بالنسبة لدقة الوقت فهى تعتمد على عدم استهلاك زمن إضافى غير زمن التأخير ، بمعنى أن أى تعليمة من تعليمات البرنامج تستغرق زمنا وهذا بدوره يعمل على تأخير فى مجمل الموضوع ، ونحن كى نكون أقرب ما يكون من الزمن الحقيقى فنحن بحاجة لعدم اهدار الزمن بين تعليمة وأخرى ولذلك فإننا نحتاج لحساب زمن دقيق وهنا فإننا بحاجة لعمل الآتى :-

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

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

وهذا ما يفعله المتحكم الذى صمم خصيصا لهذا الغرض والذى ذكرته ويبدأ بالحرفان DS وقد سبقنا بشرحه الأخ الفاضل فادى جزاه الله خيرا ،

وعند هذا يمكننا أن نعمل فلاشر فى عملية الضبط واجراءات أكثر احترافية ولا نخشى اهدار الزمن !

شكر لك وبالتوفيق

اعلانات

fawzy73
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2008
المشاركات: 92
نشاط [ fawzy73 ]
قوة السمعة:
قديم 13-04-2012, 02:30 PM المشاركة 10   
افتراضي


بارك الله فيك

وجزاك خير الجزاء

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

أحمد نجاح
:: مهندس متميز ::
تاريخ التسجيل: Mar 2008
الدولة: EGYPT
المشاركات: 841
نشاط [ أحمد نجاح ]
قوة السمعة:
قديم 06-02-2014, 06:21 PM المشاركة 11   
افتراضي


بارك الله فيك أخى yac100
وسعدت بمرورك
وبالتوفيق



مرحبا بك أخى أبو معاذ 2010
نورت الموضوع بمرورك




بالنسبة لدقة الوقت فهى تعتمد على عدم استهلاك زمن إضافى غير زمن التأخير ، بمعنى أن أى تعليمة من تعليمات البرنامج تستغرق زمنا وهذا بدوره يعمل على تأخير فى مجمل الموضوع ، ونحن كى نكون أقرب ما يكون من الزمن الحقيقى فنحن بحاجة لعدم اهدار الزمن بين تعليمة وأخرى ولذلك فإننا نحتاج لحساب زمن دقيق وهنا فإننا بحاجة لعمل الآتى :-

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

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

وهذا ما يفعله المتحكم الذى صمم خصيصا لهذا الغرض والذى ذكرته ويبدأ بالحرفان DS وقد سبقنا بشرحه الأخ الفاضل فادى جزاه الله خيرا ،

وعند هذا يمكننا أن نعمل فلاشر فى عملية الضبط واجراءات أكثر احترافية ولا نخشى اهدار الزمن !

شكر لك وبالتوفيق
ربنا يبارك فيك ويزيدك مهندسنا الغالى وليد
بقالى ساعات ابحث عن المعلومات دى


الصورة الرمزية سعيد قادر
سعيد قادر
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2009
الدولة: العراق/ كوردستان
المشاركات: 2,892
نشاط [ سعيد قادر ]
قوة السمعة:
قديم 06-02-2014, 08:49 PM المشاركة 12   
افتراضي


شرح البرنامج


كما نرى فى البرنامج أننا استخدمنا المقاطعة لحساب الزمن حيث أن المقاطعة تعتبر برنامجا فرعيا يتم تشغيله بناء على الغرض المخصص له ،


وهنا المقاطعة هى للتايمر زيرو ومادمنا ذكرنا التايمر زيرو فنحن سنستخدم هذه المقاطعة لحساب الزمن وسنضبط الإعدادات لواحد ثانية وسنقوم بعد ذلك بالنظر إلى بت العلم ( خانة الإعلام عن اكتمال التايمر زيرو) وعندها سنقوم باتخاذ اجراء مرور ثانية والإجراء هنا هو زيادة خانة الثوانى بمقدار واحد وعند الإكتمال 59 يصبح الرقم 00 ثم يزيد الدقائق بمقدار واحد بنفس النظام حتى 59 تصبح 00 وعندها تزيد الساعات بمقدار واحد صحيح حتى 23 وبعدها تكون 00 وبذلك نتلافى استخدام الأمر تأخير ( (delay_ms(1000 ) ثم زمن اجراء تعليمة البحث عن فعل شرط ( IF ) وزمن اجراء كل تعليمة مهما كان زمن قصير فهو سيأخذ من الزمن الحقيقى للساعة ولن تكون دقيقة لذلك فنحن بحاجة لبرنامج المقاطعة ،

كود:
 


unsigned long sec, cnt, show;
هذه الكلمات هى كلمات عشوائية اخترناها لتكون متغيرات من المدى الكبير
كود:
 
void interrupt(){ if(intcon.f2==1){intcon.f2=0;cnt++ ;tmr0 = 132;} }
هذا هو برنامج المقاطعة
فيه يتم البحث هل البت 2 والمسئول الإعلام بامتلاء التايمر زيرو ومعناها مرور واحد ثانية وعندها سيقوم الجواب لهذا الشرط بمسح هذا البت وذلك عن طريق وضع صفر فيه ثم نجد بعد ذلك المتغير
cnt
سيزيد بمقدار واحد صحيح
ويجب أن نعلم أننا الآن دخلنا لبرنامج المقاطعة هذا بسبب أن التايمر زيرو صفرا أو امتلئ وأصبح صفر ولذلك دخلنا لبرنامج المقاطعة وقمنا بإجراء الخطوات أو التعليمات السابقة والآن جاء دور التعليمة التالية
كود:
 
tmr0 = 132;
وهذه التعليمة نطلب فيها وضع القيمة 132 داخل سجل التايمر زيرو
ثم ينتهى بذلك برنامج المقاطعة


يجب أن نعلم أن التايمر زيرو يزداد طالما المذبذب الذى يمد المتحكم بالنبضات يعمل أو بمعنى آخر أن التايمر زيرو لم ولن يتوقف عن العمل لأنه مرتبط بالمذبذب وليس بطرف خارجى لأننا يمكننا أن نربطه مع طرف خارجى خاص بذلك ولكن هنا هو مرتبط مع المذبذب ويجب أن نعلم أيضا أنه كلما اكتمل بالعدد 255 سيعود للصفر مثله مثل أى سجل يتكون من ثمانى بتات وعندها سيعود للصفر كما قلنا محدثا المقاطعة وكما رأينا أننا بنضع رقم 132 وذلك ليبدأ سجل التايمر زيرو من عند الرقم 132 وهذا يعنى أننا سنبدأ العد من الرقم 132 إلى الرقم 255 أى أننا سنعد 123 مرة حتى يكتمل التايمر زيرو
كود:
 
trisb=0xc0; portb=0;trisa=0xE0;porta=0xff;

اعداد المداخل والمخارج وإطفاء قطع السيفن سيجمنت عن طريق اغلاق ترانزستورات الإشعال
كود:
 
option_reg =0x84;
اعدادات الأوبشن ريجستر أو مسجل الوظائف بالقيمة التالية
10000100

وهذا يعنى أننا سنستخدم المقسم
1:32

وبقسمة ربع تردد الكريستالة ال
4MHz
وهو 1000000
سنقسمه على 32 على سبيل المثال واخترت الرقم هذا لأن الناتج رقم صحيح وهو
1000`000 / 32 = 31250
والآن سنقسم الناتج على رقم مناسب من بين 256 و 1
بحيث أن الناتج يكون صحيحا واخترت على سبيل المثال الرقم
125
والآن
الناتج من آخر عملية وهو 31250
31250 / 125 = 250
إذن الناتج رقم صحيح 250
والآن نفهم الآتى
أن التايمر زيرو سيحمل بالقيمة 132 ليقوم بالعد حتى 255 أى سيتحرك بعدد 124 نبضة حتى يعوود للصفر ونكرر الموضوع هذا 32 مرة وهذا هو الرقم المختار من الجدول الخاص بتقسيم التايمر زيرو وكل هذا سيظل يتكرر كام مرة ؟؟؟
250
وهذه النتائج كما سبق فى العمليات الحسابية المذكورة
والآن عندنا خلال البرنامج يمكننا ببساطة عمل تكرار لعرض القيم على شاشة العرض أو وحدات العرض بقيم المتغيرات للثوانى والدقائق والساعات حتى يتم وصول
cnt
إلى الرقم 249 وهذا يعنى 250 خطوة تكرار للمقاطعة وهى بذلك تعنى مرور زمن واحد ثانية

أرجو أن نكون قد استوعبنا هذه الجزئية الهامة جدا وهى درس عملى لحساب الزمن بدقة بالغة جدا وغير تقريبية وكيفية التحكم فى إختيار زمن واحد ثانية وبنفس الطريقة ربما نحتاج لأزمنة أخرى فى برامج مختلفة الأغراض ،


جزاك الله كل الخير اخى وليد على هذا الموضوع الرائع ولية استفسار كيف حسبت التايمر زيرو ؟؟
انا اعرف ان له قانون ما هو القانون الذى استخدمته فى حساب زمن التايمر زيرو ؟؟


ccfl
:: مهندس متواجد ::
تاريخ التسجيل: Sep 2008
الدولة: الجزائر
المشاركات: 153
نشاط [ ccfl ]
قوة السمعة:
قديم 07-02-2014, 12:05 PM المشاركة 13   
افتراضي


جزاك الله خيرا

اريد ان اسال هل دقة الوقت الريل تايم تعتمد على المقاطعة



ام لغة البرمجة لها دور
السلام عليكم اذا اردت الدقة فعليك بلغة التجميع Assembler
لكن للاسف الشديد ان هذه اللغة اصبحت منبودة لصعوبتها لكن اذا كنت منظما في برنامجك سيكون الامر سهلا انظر مثلا الى هذا نظام هذا البرنامج http://www.qariya.com/vb/showthread.php?t=139354
و انبهك ان حتى في الميكرو سي و غيرها تسطيع ان تقوم بالبرمجة بواسطة Assembler بواسطة الامر ASM


الصورة الرمزية Sallam
Sallam
:: مهندس متميز ::
تاريخ التسجيل: Mar 2006
الدولة: Syria
المشاركات: 515
نشاط [ Sallam ]
قوة السمعة:
قديم 27-05-2015, 02:23 AM المشاركة 14   
افتراضي


موضوع متميز ومفهوم جدا

أشكرك على تعبك



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