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

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

محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,044
نشاط [ محمد ع يسى ]
قوة السمعة:81
قديم 23-12-2015, 05:15 PM المشاركة 1   
افتراضي مساعدة في إخراج ADC على خرج PIC16F877A Twitter FaceBook Google+



السلام عليكم ورحمة الله وبركاته.
اذهب إلى نافذة المساعدة في برنامج الميكرو سي برو أو ميكرو بيزيك برو فور بك.
ادخل على:
mikroC PRO for PIC Libraries
ثم ادخل منها على أول خيار:
Hardware Libraries
ثم ادخل منها على أول خيار:
ADC Libraries
ستجد أن له ثلاث تعليمات.
في نهاية هذه الصفحة يعطيك كود مشروع.
هذا المشروع بالضبط هو ما أحتاجه.
هذا المشروع عبارة عن إخراج قراءة الإشارة الأنالونج بشكل ديجيتال على عشر مخارج وهي 8 من بورت B واثنان من بورت C.
هذا تماما ما أريد.
فرحت كثيرا بهذا الكود، مع أني لا أعرف بعض الأوامر فيه خاصة أول أربعة أوامر.
ذهبت لأعمل بناء لهذا الكود ولكن هناك عدة مشاكل:
أولا أول أربعة أوامر لا يفهمها البرنامج ويعطي خطأ حتى أمسحهم.
ثانيا كنت قرأت في كتاب ميكروبيديا أنه ينبغي إذا أردت استخدام ال ADC أن أكتب الأمر:
ADC_Int();
بالنسبة للميكرو سي.
ولم أجد هذا الأمر في الكود الذي في نافذة المساعدة.
ثالثا عندي سؤال:
الأمر الثاني:
ADC_Get_Sample
بينما الأمر الثالث:
ADC_Read
السؤال هو ما الفرق بينهما؟
لا تقل الثاني يعطي عينة والثالث يعطي قراءة لأني سأقول لم أفهم الفرق.
وجزاكم الله خيرا.
والسلام عليكم ورحمة الله وبركاته.

اعلانات

ahmed idris
:: مهندس متميز ::
تاريخ التسجيل: Jul 2015
المشاركات: 453
نشاط [ ahmed idris ]
قوة السمعة:0
قديم 23-12-2015, 06:51 PM المشاركة 2   
افتراضي


السلام عليكم
أخي محمد إذا كنت تقصد الكود في هذه الصفحة :
http://www.mikroe.com/download/eng/d...dc_library.htm فهو مناسب للبيك المرافق للمثال
إذا كنت تريد استخدام نفس الكود مع البيك 16F877A يجب إلغاء الاسطر الاربعة التي ذكرتها وتضع مكانها التعليمة الوحيدة التالية:
;ADCON1 = 0x80
علما بأن ADCON1 هو المسجل الذي يهيئ المداخل ونوعها في البيك 16F877A
وهو يختلف عن المسجل الذي يقوم بنفس الدور تقريبا في البيك موضوع المثال.
هنا موضوع به شرح على البيك 16F877A
لكن الدخل في المثال هو RA1 ممكن تعدله إلى RA2
https://electrosome.com/analog-to-di...converter-pic/


التعديل الأخير تم بواسطة : ahmed idris بتاريخ 23-12-2015 الساعة 06:55 PM
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً محمد ع يسى ( شكر العضو على هذه المشاركة )
اعجاب محمد ع يسى ( أعجبته المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,044
نشاط [ محمد ع يسى ]
قوة السمعة:81
قديم 23-12-2015, 08:35 PM المشاركة 3   
افتراضي


وعليك السلام ورحمة الله وبركاته.
جزاك الاه خيرا أخي أحمد.
لقد قرأتها PIC16F877 من قبل أن أسألكم فأعطتني خطأ.
حيث أني لم أنتبه أنه ليس 877 وإنما 887.
فشكرا لك على التنبيه.
لكن لا تزال هناك أسئلة.
هل الأفضل استخدام 887 أم 877A؟
وما هو الأمر:
ADCON1 = 0x80
أعلم أنك شرحته ولكني لم أفهمه.
كما أنه استخدم في الصورة C0 و C1 بينما قال في الكود أنه سيخرج على C6 و C7
ولماذا لم نضع الأمر:
ADC_Int();
لقد قرأت في الكتاب أنه نضعه لتهيئة الADC
وأنتظر من المهندسين إجابة بقية الأسئلة التي سألتها في المشاركة الأولى.


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:408
قديم 24-12-2015, 06:14 AM المشاركة 4   
افتراضي


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

ADC_Int();
بالنسبة للميكرو سي.
ولم أجد هذا الأمر في الكود الذي في نافذة المساعدة.
ثالثا عندي سؤال:
الأمر الثاني:
ADC_Get_Sample
بينما الأمر الثالث:
ADC_Read
السؤال هو ما الفرق بينهما؟
لا تقل الثاني يعطي عينة والثالث يعطي قراءة لأني سأقول لم أفهم الفرق.
وجزاكم الله خيرا.
والسلام عليكم ورحمة الله وبركاته.
عليكم السلام ورحمة الله وبركاته
أعلم أن الإنجليزية ليست مفضلة لديك لكن للأسف يجب أن تدرس ولو معانى المفردات فلا مفر من الداتا شيت للقطعة التى تستخدمها و قراءة ملفات المساعدة جيدا فهذا يوفر كثيرا من الجهد و الوقت
فى الداتا شيت ستجد أن 877A له 2 ريجستر داخلى يتحكمان فى وظائف المدخل A,C للتحويل من تماثلى لرقمى وهما ADCON0,ADCON1 وهو اختصار ADC-CONtrol
عند الريسيت تكون مداخل A كلها تماثلية وليست رقمية بنسق محدد يمكنك تغييره لعدة نظم مختلفة لفوائد مختلفة أو تحوله إلى مداخل رقمية
من هذا لتستخدم المحول التماثلى قد تحتاج لتعديله أو إن شئت تستخدمه كما هو بالضبط الإفتراضى له

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

الأمر الثانى
ADC_Get_Sample
يقرأ الوحدة دون تهيئة أى يتركها على ما هى عليه - فقط سبدأ دورة التحويل ثم يقرأ النتيجة

لهذا إن شئت يمكنك استخدام
ADC_Init
أو تقوم بالتهيئة الخاصة المطلوبة ثم بعد ذلك تستخدم
ADC_Get_Sample

أو تستخدم أمر
ADC_Read
للتهيئة الإفتراضية و القراءة ثم تكرر بعد ذلك
ADC_Get_Sample

و السبب ان فى المثال لم يستخدم الأمر ADC_Init انه يستخدم ADC_Read المحتوى على التهيئة

احصائية الشكر والاعجاب - 2 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً ahmed idris, محمد ع يسى ( شكر العضو على هذه المشاركة )
اعجاب ahmed idris, محمد ع يسى ( أعجبته المشاركة )

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


فى الداتا شيت ستجد أن 877A له 2 ريجستر داخلى يتحكمان فى وظائف المدخل A,C للتحويل من تماثلى لرقمى وهما ADCON0,ADCON1 وهو اختصار ADC-CONtrol
عند الريسيت تكون مداخل A كلها تماثلية وليست رقمية بنسق محدد يمكنك تغييره لعدة نظم مختلفة لفوائد مختلفة أو تحوله إلى مداخل رقمية
من هذا لتستخدم المحول التماثلى قد تحتاج لتعديله أو إن شئت تستخدمه كما هو بالضبط الإفتراضى له

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

الأمر الثانى
ADC_Get_Sample
يقرأ الوحدة دون تهيئة أى يتركها على ما هى عليه - فقط سبدأ دورة التحويل ثم يقرأ النتيجة

لهذا إن شئت يمكنك استخدام
ADC_Init
أو تقوم بالتهيئة الخاصة المطلوبة ثم بعد ذلك تستخدم
ADC_Get_Sample

أو تستخدم أمر
ADC_Read
للتهيئة الإفتراضية و القراءة ثم تكرر بعد ذلك
ADC_Get_Sample

و السبب ان فى المثال لم يستخدم الأمر ADC_Init انه يستخدم ADC_Read المحتوى على التهيئة
كفيت ووفيت أخي ماجد بارك الله فيك
اهتمامك فى الآوتة الأخيرة بشؤون برمجة البيك فيه مكسب كبير لزوار القرية
جزاك الله خيرا ..


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:408
قديم 24-12-2015, 08:14 AM المشاركة 6   
افتراضي


شكرا أخى احمد

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً ahmed idris ( شكر العضو على هذه المشاركة )

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


وعليك السلام ورحمة الله وبركاته.
جزاك الاه خيرا أخي أحمد.
لقد قرأتها PIC16F877 من قبل أن أسألكم فأعطتني خطأ.
حيث أني لم أنتبه أنه ليس 877 وإنما 887.
فشكرا لك على التنبيه.
لكن لا تزال هناك أسئلة.
هل الأفضل استخدام 887 أم 877A؟
وما هو الأمر:
ADCON1 = 0x80
أعلم أنك شرحته ولكني لم أفهمه.
كما أنه استخدم في الصورة C0 و C1 بينما قال في الكود أنه سيخرج على C6 و C7
ولماذا لم نضع الأمر:
ADC_Int();
لقد قرأت في الكتاب أنه نضعه لتهيئة الADC
وأنتظر من المهندسين إجابة بقية الأسئلة التي سألتها في المشاركة الأولى.
عليكم السلام ورحمة الله وبركاته
أعلم أن الإنجليزية ليست مفضلة لديك لكن للأسف يجب أن تدرس ولو معانى المفردات فلا مفر من الداتا شيت للقطعة التى تستخدمها و قراءة ملفات المساعدة جيدا فهذا يوفر كثيرا من الجهد و الوقت
فى الداتا شيت ستجد أن 877A له 2 ريجستر داخلى يتحكمان فى وظائف المدخل A,C للتحويل من تماثلى لرقمى وهما ADCON0,ADCON1 وهو اختصار ADC-CONtrol
عند الريسيت تكون مداخل A كلها تماثلية وليست رقمية بنسق محدد يمكنك تغييره لعدة نظم مختلفة لفوائد مختلفة أو تحوله إلى مداخل رقمية
من هذا لتستخدم المحول التماثلى قد تحتاج لتعديله أو إن شئت تستخدمه كما هو بالضبط الإفتراضى له

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

الأمر الثانى
ADC_Get_Sample
يقرأ الوحدة دون تهيئة أى يتركها على ما هى عليه - فقط سبدأ دورة التحويل ثم يقرأ النتيجة

لهذا إن شئت يمكنك استخدام
ADC_Init
أو تقوم بالتهيئة الخاصة المطلوبة ثم بعد ذلك تستخدم
ADC_Get_Sample

أو تستخدم أمر
ADC_Read
للتهيئة الإفتراضية و القراءة ثم تكرر بعد ذلك
ADC_Get_Sample

و السبب ان فى المثال لم يستخدم الأمر ADC_Init انه يستخدم ADC_Read المحتوى على التهيئة
السلام عليكم
شكرا أخي ماجد على الشرح المفصل ..
1/
بالنسبة لفهم دلالة الصيغة ADCON1 = 0x80 الافضل تحويل العدد السادس عشري 0x80 الى مقابله التنائي وهو 10000000 ستصير هكذا:
;ADCON1 = 10000000
الآن لنذهب الى الداتا شيت للتعرف على بتات المسجل ADCON1:

المسجل ADCON1 يتكون من ثمان بتات . البتات الاربع الاولى على اليمين تحدد نوع المداخل ما هي الأنالوج وماهي الديجتال وماهي الاطراف التي تم اختيارها كجهود مرجعية خارجية (فقط عند الحاجة إليها) لعملية التحويل من أنالوج إلى ديجتال
الجدول الثاني في الصورة يتضمن التفاصيل حولها
في التعليمة :
;ADCON1 = 10000000
نلاحظ ان البتات المذكورة تساوي صفر وبالعودة الى الجدول المذكور هذا يعني أن أطراف المنفذ A (باستثناء الطرف RA4) + كل أطراف المنفذ E مبرمجة كدخول أنالوج
وأن الجهد المرجعي الموجب داخلي وهو جهد تغدية البيك vdd
وأن الجهد المرجعي السالب هو الارضي vss
2/
بالنسبة للخرجين الخطأ في الدائرة فهي لا تناسب تعليمة الازاحة في الكود :
PORTC = adc >> 2; // Send 2 most significant bits to RC7, RC6
3/
هل الأفضل استخدام 887 أم 877A؟
أخي PIC16F887 نسخة محسنة من سابقه PIC16F877A كما يخبر بذلك المصنع و المنتج Microchip


التعديل الأخير تم بواسطة : ahmed idris بتاريخ 24-12-2015 الساعة 09:09 AM
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً محمد ع يسى ( شكر العضو على هذه المشاركة )
اعجاب محمد ع يسى ( أعجبته المشاركة )

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


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

إضافة رد

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

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

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


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

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