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

   

زكي شاكر
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: المغرب
المشاركات: 2,945
نشاط [ زكي شاكر ]
قوة السمعة:
قديم 16-05-2009, 12:57 AM المشاركة 9   
افتراضي



العفو أخي بارك الله فيك وشكرا على البرنامج مسبقا ..
وبخصوص موضوعك هل تبين لك أخي من الجدول الثاني ان 4 ميغاهرتز ربما لا تمكن من الحصول على نبضات التايمر0 بقيمة 1s ؟ ام عندك تصور آخر ؟
تحياتي

اعلانات

HugE
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2009
المشاركات: 73
نشاط [ HugE ]
قوة السمعة:
قديم 17-05-2009, 08:03 AM المشاركة 10   
افتراضي


جزاك الله خير اخي زكي شاكر وقد تبين لي ذلك

ولكن كما قلت لك انا استخدم برنامج لحساب التايم

وهذا هو البرنامج

تحميل الملف من هنا


علما باني وضعت الكرستال 20 MHz

ووضعت النسبه 1:2

اما tmr0 =252

وكان الزمن 2 us
اما التردد هو 500000 Hz

لكن سوالي هو: هل هذا الزمن 2 us هو زمن تنفيذ جميع الاوامر داخل التامير ام ماذا

ومن المفترض انني اذا عملت عداد داخل هذا التايمر يعد من 0 الى 500000 وزمن التنفيذ يكون 2 us سوف نحصل في الاخير على 1 ثانيه

لكن عندما قمت بعمل المحاكاه لم يظهر الناتج المرجو منه

بل اصبح الزمن الكلي تقريبا 20 ثانيه لاكمال العد حتى 500000


ارجو التوضيح

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

زكي شاكر
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: المغرب
المشاركات: 2,945
نشاط [ زكي شاكر ]
قوة السمعة:
قديم 17-05-2009, 04:12 PM المشاركة 11   
افتراضي


هذا هو البرنامج
تحميل الملف من هنا
علما باني وضعت الكرستال 20 MHz
ووضعت النسبه 1:2
اما tmr0 =252
وكان الزمن 2 us
اما التردد هو 500000 Hz
لكن سوالي هو: هل هذا الزمن 2 us هو زمن تنفيذ جميع الاوامر داخل التامير ام ماذا
شكرا أخي على البرنامج
في الحقيقة حساباتي اعطتني زمنا أقل لكن ليس هذا هو المهم
المهم هو سؤالك :
أخي طريقة حساب زمن تنفيذ (أغلب) التعليمات يساوي مقلوب ربع التردد .. مثال للتوضيح:
Fosc =تردد المذبذب وهو 20 ميغاهرتز او 20.000.000 هرتز
نقسمه على 4 فيعطينا التردد F بقيمة 5.000.000 هرتز
وبما ان الزمنT = مقلوب الترددF
T = 1/F
فإن T = 1/5000000 = 0,0000002s
او 0,2 ميكرو تانية
ومن المفترض انني اذا عملت عداد داخل هذا التايمر يعد من 0 الى 500000 وزمن التنفيذ يكون 2 us سوف نحصل في الاخير على 1 ثانيه
لكن عندما قمت بعمل المحاكاه لم يظهر الناتج المرجو منه
بل اصبح الزمن الكلي تقريبا 20 ثانيه لاكمال العد حتى 500000
ارجو التوضيح
من الناحية العملية لايمكنك "عمل عداد داخل التايمر" فنحن لا يمكن ان نعمل عدادا داخل عداد آخر ..
كل ما نستطيع عمله هو ضبط التايمر0 على عدد يتوقف عنه ويصفر نفسه كلما وصل اليه مثل اي متغير .. العدد لايمكن ان يتعدى 256 لان التايمر0 متكون من 8 بيت bits فقط اي ان اكبر عدد ممكن ان يصل اليه = 11111111 = 255
سوف نحصل في الاخير على 1 تانيه
في النهاية ماهو الزمن الذي تريد الحصول عليه ؟
1 ميكروتانية او 1 تانية ؟..


HugE
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2009
المشاركات: 73
نشاط [ HugE ]
قوة السمعة:
قديم 18-05-2009, 03:01 PM المشاركة 12   
افتراضي


انا اقصد بانني سوف اضع for loop داخل التايمر مثل ما هو موضح في الكود في الصفحه السابقه بحيث اذا حدث انترربت يذهب الى سطر count

وداخل هذا السطر يوجد for loop فانا وحسب فهمي لهذا التايمر بان الاوامر التي داخل هذا السطر سوف تفنفذ كل 2 مايكرو ثانيه ( اذا تم ضبط الاعدادات من البرنامج المفرق )

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


اذا كان مفهومي لهذا التامير خطا فارجو اعلامي بذلك

وانا في الاخير اريد طريقه لجعل متغير يغير يعد كل 1 مايكرو ثانيه او 2 مايكرو المهم يكون العد بالمايكرو ثانيه ( حتى تكون الدقه عاليه بالنسبة لي )

وليس متغير واحد فقط بل 3 متغيرات وكل واحد منهم يعمل على حده

من دون عمل hold او delay للمايكرو


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


زكي شاكر
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: المغرب
المشاركات: 2,945
نشاط [ زكي شاكر ]
قوة السمعة:
قديم 18-05-2009, 03:44 PM المشاركة 13   
افتراضي


اظنك تبرمج ببروتون وانا ليس لدي دراية كبيرة بلغة البيزك ..
لكن مع ذلك ما تقوله صحيح حول التايمر من هذا اجانب: كلما اكمل التايمر0العد يحدث مقاطعة ن ويمكن ان تقدح بالنبضة التي يولدها في تلك اللحظة (لحظة حدوث المقاطعة) اي متغير ..هذا ما يحدث في الاسمبلي و في كل لغات البرمجة ..
من ناحية الدقة اذا كنت تريد الحصول في النهاية على 1 تانية ، فلا داعي للبحث عن الميكروتانية ..
بالعكس ما ربحته في الحصول على 1 او 2 ميكروتانية ستخسره اثناء تراكم هذه الميكرو تواني في العد من 0 الى 500000 ..
500000 = 1111010000100100000 ثنائي اي ستكون بحاجة ل 3 متغيرات 8 بيت..
اضافة الى ذلك ان تحميل التايمر برقم ما (252 حسب مثالك) يفقده ميزة الدقة المنشودة.. عند وصوله 252 سيقوم بتصفير نفسه مما يتطلب اللجوء الى تعليمة goto (الخاصة بالاسمبلي) التي تستغرق زمن تنفيذ التعليمات مرتين .. الضبط اذن لن يكون دقيقا ..
الافضل ان يترك التايمر 0 يكمل دورته العادية من 0 الى 256 دون التدخل فيه..
لا تستغرب من ذكر الاسمبلي كل البرامج المعروفة (كومبيلر) تنتج ملف اسمبلي
أفضل طريقة للحصول على 1 تانية بالتايمر0 هي استعمال كوارتز قابل للقسمة على 2 بحيث اذا قسمت قيمته بشكل متتابع على 2 يكون النتاتج الاخير هو 2


HugE
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2009
المشاركات: 73
نشاط [ HugE ]
قوة السمعة:
قديم 18-05-2009, 04:57 PM المشاركة 14   
افتراضي


اخي العزيز انا مصر جدا على المايكروثانيه لاني سوف استخدمه في البرنامج

وسوف يتصفر كل واحد ثانيه

يعني الواحد ثانيه هو مجرد وقت لتصفير العد وبعدها يبدا بالعد مجددا



اما عن لغة الاسمبلي فانا خليفتي فيه ضعيفه جدا ولكنها ليست مشلكه


اهم شئ الفكره فاذا وصلت الفكره استطيع فعله بالبروتون


زكي شاكر
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: المغرب
المشاركات: 2,945
نشاط [ زكي شاكر ]
قوة السمعة:
قديم 18-05-2009, 05:05 PM المشاركة 15   
افتراضي


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


HugE
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2009
المشاركات: 73
نشاط [ HugE ]
قوة السمعة:
قديم 18-05-2009, 05:28 PM المشاركة 16   
افتراضي


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

ولكن مازلت ارجو منك المساعده في هذا الامر

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


وكما قلت لك اريد 3 عدادات كل عداد يعد كل 1 مايكرو ثانيه او على الاقل 10 مايكرو ثانيه مثلا

من دون عمل hold

اعرف اخي انني اتعبتك معي ولكني والله محتاج هذه الطريقه جدا


وجزاك الله خير الجزاء وجعلها في ميزان حسناتك



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