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

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

الصورة الرمزية wleed ameer
wleed ameer
:: مهندس متواجد ::
تاريخ التسجيل: Apr 2008
المشاركات: 86
نشاط [ wleed ameer ]
قوة السمعة:0
قديم 10-05-2009, 06:44 AM المشاركة 1   
افتراضي كيف نجعل المتحكم يقرأ Hz ( كيف تكون الفكرة)؟ Twitter FaceBook Google+



السلام عليكم ورحمة الله وبركاته

كيف تكون الفكرة الصحيحة لجعل المتحكم وليكن pic16f628a يقرأ نبضات على طرف من أطرافه ثم يقوم بحساب التردد ؟
وإذا أردناه يقوم بحساب عدد هذه النبضات أيضا هل سنحتاج لمتحكم آخر أم أن متحكم واحد يمكن القيام بالعمليتان وإظهار الناتج على LCD ؟
أنا أستخدم المايكروبيسيك وأريد شرح الفكرة باختصار .. فهل نقوم بعمل تأخير ( delay_ms( 1 يتكرر بين كل نبضتان ونقسم 1000 ميللى على الزمن لينتج الهيرتز أم أن هناك طريقة أخرى ؟ لأنى عندما استخدمت هذه الطريقة وجعلت المتحكم يحسب عدد النبضات والهيرتز ويظهر كلا منهما فى سطر على LCD وجدت العدد يتأخر بينما كان الهيرتز مضبوط ؟ برجاء الإفادة وجزاكم الله خيرا

اعلانات

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 10-05-2009, 08:24 AM المشاركة 2   
افتراضي


اخي العزيز ما هي الفترة الزمنية التي تريد ان تحسب خلالها عدد النبضات ؟ اذا كانت ثانية واحدة فهذا هو الهيرتز . ولا توجد مشكلة لانه اشتغل عندك مضبوط . واذا كان لاكثر من ثانية فهو حتما سيتأخر .

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

الصورة الرمزية wleed ameer
wleed ameer
:: مهندس متواجد ::
تاريخ التسجيل: Apr 2008
المشاركات: 86
نشاط [ wleed ameer ]
قوة السمعة:0
قديم 10-05-2009, 09:45 AM المشاركة 3   
افتراضي


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

أنا أريد حساب سرعة النبضات خلال دقيقة وأريد حساب العدد الكلى !
وما فعلته كالآتى:-

1- استقبال النبضة على طرف 1= porta.0 ثم التأخر زمن ا ميللى ثانية ثم يتم تكرار التأخر طالما porta.0 = 0 وعدد مرات التكرار تخزن فى متغير T إلى أن تكون porta.0 = 1
وهنا نقوم بقسمة 60000 ميللى ثانية على الزمن بين النبضتان والذى يحدده المتغير T فينتج لنا عدد النبضات للدقيقة وهو المطلوب
2- كلما كان porta.0 = 1 نجعل المتغير H = H + 1 ليكون هذا هو مجموع النبضات الكلى

أولا هل هذه الطريقة لحساب التردد صحيحة أم هناك طريقة أفضل لأن معى يظهر لى العدد أبطئ يعنى السرعة تكون أسرع للدقيقة أسرع من العدد الفعلى للنبضات ، يعنى السرعة مثلا 500 نبضة للدقيقة ولكن السطر الخاص بالعدد يقول أن الذى وصل أقل بكثير ؟


التعديل الأخير تم بواسطة : wleed ameer بتاريخ 10-05-2009 الساعة 09:52 AM

الصورة الرمزية wleed ameer
wleed ameer
:: مهندس متواجد ::
تاريخ التسجيل: Apr 2008
المشاركات: 86
نشاط [ wleed ameer ]
قوة السمعة:0
قديم 10-05-2009, 12:22 PM المشاركة 4   
افتراضي


ياجماعة البرنامج بيقوم بعد كل نبضة تأتى على الطرف porta.0 مافيش مشاكل لكنى أريد بالإضافة لذلك أن يقوم بنفس عملية العد لنفس النبضات لكن لمدة ثانية واحدة فقط لأنى محتاج العدد الكلى ليظهر على الشاشة ومحتاج العدد الآخر للنبضات التى جاءت لمدة ثانية

؟ ؟ ؟

لو العملية معقدة فلى سؤال آخر وهو كيف أقوم بحساب عدد نبضات خلال ثانية واحدة فقط ؟؟

أنتظر الرد من العباقرة وشكرا للمساعدة


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 10-05-2009, 05:35 PM المشاركة 5   
افتراضي


أولا هل هذه الطريقة لحساب التردد صحيحة أم هناك طريقة أفضل لأن معى يظهر لى العدد أبطئ يعنى السرعة تكون أسرع للدقيقة أسرع من العدد الفعلى للنبضات ، يعنى السرعة مثلا 500 نبضة للدقيقة ولكن السطر الخاص بالعدد يقول أن الذى وصل أقل بكثير ؟
اخي العزيز هون عليك ولا تتعجل في الموضوع لان العجلة تقلل من التركيز .
1- زمن التأخير الذي تعطيه عبارة delay ليس حقيقي انما هو تقريبي وهذا الموضوع لم نصل معه الى حل لحد الآن
2- انا كتبت لك الكود الذي تريده وانت تتحكم بالزمن كما تريد وهو طبعا بأستخدام المقاطعة

كود:
void interrupt() { portc++; intcon.f1=0; } void main() { trisc=0;portc=0; intcon=0b10010000; loop: delay_ms(1000); intcon=0; goto loop; }
هذه ملفات المشروع
http://www.***********/download/211236/Hz.meter.rar.html
انا جربته على البروتوس واشتغل بصورة طبيعية بأستخدام المتحكم pic16f877a

حيدر علاج حسن

التعديل الأخير تم بواسطة : حيدر علاج حسن بتاريخ 10-05-2009 الساعة 06:25 PM

الصورة الرمزية wleed ameer
wleed ameer
:: مهندس متواجد ::
تاريخ التسجيل: Apr 2008
المشاركات: 86
نشاط [ wleed ameer ]
قوة السمعة:0
قديم 10-05-2009, 07:57 PM المشاركة 6   
افتراضي


شكرا لك أستاذ حيدر لكنى لا أستخدم لغة السى فأنا أستخدم المايكرو بيسيك وأفضل شئ لهذا هو الأمر

sub procedure

ولكنى لم أتمكن من استخدام الأمر delay معه أو أى شئ يخص التعامل مع البورتات مثل if portb.0 = 1 then فهل المقاطعة
sub procedure interrupt لا تتعامل مع البورتات ؟
وهل أستخدامى للتعليمة

TMR0 = 0
INTCON = $20
end sub

هى التى تلغى الأمر delay ؟

أعتذر للإطالة وشكرا



الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 10-05-2009, 08:18 PM المشاركة 7   
افتراضي


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

حيدر علاج حسن

الصورة الرمزية wleed ameer
wleed ameer
:: مهندس متواجد ::
تاريخ التسجيل: Apr 2008
المشاركات: 86
نشاط [ wleed ameer ]
قوة السمعة:0
قديم 10-05-2009, 08:36 PM المشاركة 8   
افتراضي


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

إضافة رد

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

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

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


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

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