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

   

ahmed idris
:: مهندس متميز ::
تاريخ التسجيل: Jul 2015
المشاركات: 450
نشاط [ ahmed idris ]
قوة السمعة:
قديم 24-12-2015, 09:36 PM المشاركة 9   
افتراضي



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

المهم إذا احتفظنا بالكود كما هو يجب تعديل الدائرة كما يلي:



وإذا أحببنا الاحتفاظ بالدائرة بدون تعديل يجب تعديل سطرين في الكود كما يلي:


اعلانات

محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,040
نشاط [ محمد ع يسى ]
قوة السمعة:
قديم 24-12-2015, 10:32 PM المشاركة 10   
افتراضي


جزاك الله خيرا أخي أحمد.
لقد فهمت جيدا.
ولي سؤال آخر.
لو استخدمت الميكرو بيزيك هل أكتب نفس الأكواد بطريقة البيزيك؟
ونعدل هذا الأمر فيصبح هكذا؟
PORTC = word(adc >> 8)
بهذين القوسين وكلمة word؟
كما في نافذة المساعدة في الميكرو بيزيك.


التعديل الأخير تم بواسطة : محمد ع يسى بتاريخ 24-12-2015 الساعة 10:43 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

ahmed idris
:: مهندس متميز ::
تاريخ التسجيل: Jul 2015
المشاركات: 450
نشاط [ ahmed idris ]
قوة السمعة:
قديم 24-12-2015, 11:08 PM المشاركة 11   
افتراضي


جزاك الله خيرا أخي أحمد.
لقد فهمت جيدا.
ولي سؤال آخر.
لو استخدمت الميكرو بيزيك هل أكتب نفس الأكواد بطريقة البيزيك؟
ونعدل هذا الأمر فيصبح هكذا؟
PORTC = word(adc >> 8)
بهذين القوسين وكلمة word؟
كما في نافذة المساعدة في الميكرو بيزيك.
أخي ليست لي دراية كبيرة بالميكروبيزك لكن ممكن تجرب الكود الوارد في المساعد للميكروبيزك هنا:
http://www.mikroe.com/download/eng/d...dc_library.htm
طبعا بعد استبدال السطور الاربعة:
ANSEL = 0x04 ' Configure AN2 pin as analog
ANSELH = 0 ' Configure other AN pins as digital I/O
C1ON_bit = 0 ' Disable comparators
C2ON_bit = 0
بالسطر المناسب للبيك 16F877A:
ADCON1 = 0x80


محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,040
نشاط [ محمد ع يسى ]
قوة السمعة:
قديم 25-12-2015, 12:16 AM المشاركة 12   
افتراضي


نعم... هذا ما كنت أقصد.
جزاك الله خيرا.


ahmed idris
:: مهندس متميز ::
تاريخ التسجيل: Jul 2015
المشاركات: 450
نشاط [ ahmed idris ]
قوة السمعة:
قديم 25-12-2015, 01:23 AM المشاركة 13   
افتراضي


بالتوفيق أخي
و طالما هو موجود لدي هذا ملف الدائرة والمحاكاة ببرتوس للمثال بالميكروسي الذي كنا نتحدث حوله (مع تعديل الدخل الى RA2) يمكن يفيدك في المثال بالميكروبيزك :
http://www.up-00.com/?zDsP
(ملحوظة: به أيضا ملفات الميكروسي )


التعديل الأخير تم بواسطة : ahmed idris بتاريخ 25-12-2015 الساعة 01:29 AM

محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,040
نشاط [ محمد ع يسى ]
قوة السمعة:
قديم 25-12-2015, 05:54 PM المشاركة 14   
افتراضي


جزاك الله خيرا أخي أحمد.
عندي سؤال آخر:
لو فرضنا أن المتغير temp_res يساوي
كود:
temp_res = ADC_Read(2) + 1024
فهذا يعني أن temp_res تحتاج ل11 مخرج.
يعني سنستخدم أول ثلاثة مخارج من بورت C.
فهل يكون الكود هكذا:
كود:
PORTC = temp_res >> 8;    // Send 3 most significant bits to RC2,RC1, RC0
لاحظ أنه نفس الكود العملي الذي ورد في نافذة المساعدة لبرنامج الميكرو سي حيث قلت
PORTC = temp_res >> 8;
وجزاكم الله خيرا.


التعديل الأخير تم بواسطة : محمد ع يسى بتاريخ 25-12-2015 الساعة 08:00 PM

ahmed idris
:: مهندس متميز ::
تاريخ التسجيل: Jul 2015
المشاركات: 450
نشاط [ ahmed idris ]
قوة السمعة:
قديم 25-12-2015, 07:50 PM المشاركة 15   
افتراضي


جزاك الله خيرا أخي أحمد.
عندي سؤال آخر:
لو فرضنا أن المتغير temp_res يساوي
كود:
temp_res = ADC_Read(2) + 1024
فهذا يعني أن x تحتاج ل11 مخرج.
يعني سنستخدم أول ثلاثة مخارج من بورت C.
فهل يكون الكود هكذا:
كود:
PORTC = temp_res >> 8;    // Send 3 most significant bits to RC2,RC1, RC0
لاحظ أنه نفس الكود العملي الذي ورد في نافذة المساعدة لبرنامج الميكرو سي حيث قلت
PORTC = temp_res >> 8;
وجزاكم الله خيرا.
أخي ماذا يعني x ؟
عموما ..
1/ بالنسبة لناتج هذه العملية :
temp_res = ADC_Read(2) + 1024
فهو طبعا سيكون عددا سعته 11 بت
2/ بالنسبة للكتابة :
PORTC = temp_res >> 8;
السبب أن ناتج عملية التحويل من أنالوج الى ديجتال كما تعلم هو عدد بسعة 10 بت
أرادوا إظهاره على المنفذ B
لكن منافذ البيك لا تتعدى 8 بت
لذلك أظهروا 8 بت على منفذ B والبتين الباقيين على طرفين من المنفذ C
واستخدموا لهذا الغرض خاصية الازاحة المعروفة في المنطق الالكتروني (كما في متكاملات مسجلات الازاحة TTL أو CMOS)
الازاحة المستخدمة هنا إزاحة لليمين ورمزها هو :
<<


محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,040
نشاط [ محمد ع يسى ]
قوة السمعة:
قديم 25-12-2015, 08:03 PM المشاركة 16   
افتراضي


كنت في البداية كتبت لو فرضنا أن المتغير x، ثم عملت تعديل لتكون مماثلة لما في نافذة المساعدة، ونسيت تغيير هذه الx.
المهم لقد فهمت أن هذا المتغير سيظهر بنفس الكود البت التاسع والعاشر والحادي عشر على المنافذ C0 و C1 و C2.
أليس كذلك؟
ولو فرضنا أنه عبارة عن 16 بت سيظهر من البت التاسع إلى البت ال16 على بورت C دون تغيير الكود.


التعديل الأخير تم بواسطة : محمد ع يسى بتاريخ 25-12-2015 الساعة 08:11 PM


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