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

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

الصورة الرمزية Semmoor
Semmoor
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
المشاركات: 300
نشاط [ Semmoor ]
قوة السمعة:0
قديم 26-09-2012, 06:54 PM المشاركة 1   
افتراضي مشاريع مهمة عن بروتوكول SPI . Twitter FaceBook Google+



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

بعض المشاريع عن بروتوكول SPI المهمة .


المشروع الاول عندنا بيك مرسل(Master) وبيك مستقل(Slave), المرسل يرسل بيانات للمستقبل, وبعدين المستقبل يشغل ليد حسب البيانات المرسلة.

شرح الكود:

بداية داخل الدالة الرئيسية عندنا :

;trisc.f3=0; trisc.f4=1; trisc.f5=0; trisd.f1=0

;trisc.f3=0 كخرج لتوليد نبضات نقل البيانات للمستقبل, في بروتوكول SPI الماستر هو اللي يولد الساعات لنقل البيانات لكافة المعالجات الاخرى.

;trisc.f4=1 كدخل عشان يستقبل البيانات اذا المستقبل حاب يرسل.


;trisc.f5=0 كخرج لارسال البيانات للمستقبل.

;trisd.f1=0 كخرج لاختيار المعالج الذي سيتم التخاطب معه, في بروتوكول SPI الماستر هو اللي يحدد مع من يتخاطب عشان وهذا الرجل في البيك حق الماستر راح يرسل اشارة يخبر المستقبل بانه سيرسل له بعض البيانات.

;portd.f1=1 قبل بداية البرنامج يجب التاكد عدم اختيار المعالج المراد التخاطب معه بارسال القيمة 1 , كده في البداية البرنامج سيكون المستقبل في وضع عدم الاستقبال مالم يتم ارسال صفر عليه , لان كما قلت الــ portd.f1 سيتم استخدامه لتحديد المعالج المراد التخاطب معه.


وبعدين لتهيئة البروتوكول في الميكروسي نكتب التالي:

SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_end, _SPI_CLK_IDLE_high, _SPI_high_2_low);

باختصار قمنا باختيار برتوكول SPI كا ماستر واخترنا سرعة انتقال البيانات وهي 4 , وارسال البيانات تكون في في الجبهة الهابطة في النبضات, هذه اهم اشياء يجب معرفتها وللمزيد راج الداتاشيت.

وبعدين عندنا حلقة غير منتهية وفي داخلها :



;portd.f1=0 ارسال صفر لاختيار المعالج المستقبل لبدء ارسال البيانات له


;SSPBUF=1 ارسال القيمة 1 للمستقبل, SSPBUF هو البفر اللي يخزن البيانات المراد ارسالها

;(delay_ms(500 انتظار نصف ثانية

;portd.f1=1 عدم اختيار المعالج لاننا انتهينا من ارسال البيانات للمعالج المستقبل.

هذه مثال فقط لارسال القيمة 1 اذا اردنا ارسال قيم اخرى نسوي نفس الشي مثال لارسال القيمة 15:


;portd.f1=0

;SSPBUF=15

;(delay_ms(500

;portd.f1=1

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



والان شرح كود المستقبل(Slave) في المستقبل اضطررت لاستخدام المقاطعات لاستقبال البيانات من الماستر لانني حاولت استخدام المكتبة حقت المايكروسي ولكنها لاتعمل في وضع المستقبل جيدا !! لهذا استخدمت المقاطعة واذا رحت وشفت المكتبة اصلا ماراح تلاقي كود للاستقبال .

اوكيه الان نبدا شرح دالة خدمة المقاطعة:


(if (PIR1.SSPIF نقوم بفحص علم المقاطعة لبروتوكول SPI هل تم حدوث مقاطعة اي البفر استقبل بيانات
}
(if(porta.f5 == 0 هل قام الماستر باختيار المستقبل, اكيد راح يختاره اجل كيف ارسله ههههه بس للتاكد لاغير
}
;temp = SSPBUF خذ البيانات المستقبلة من البفر وخزنها في temp
;flag=1 متغير راح يساوي واحد كلما استقبلنا بيانات جديدة
{
;PIR1.SSPIF = 0 صفر علم مقاطعة البروتوكول SPI
{




داخل الدالة الرئيسية عندنا :

;trisc.f3=1; trisc.f4=1; trisc.f5=0; trisa.f5=1

;trisc.f3=0 كدخل لاستقبال نبضات الساعة اللي يرسلها الماستر.

;trisc.f4=1 كدخل عشان يستقبل البيانات القادمة من الماستر.

;trisc.f5=0 كخرج لارسال البيانات للماستر اذا الماستر طبعا طلب ذلك.

;trisa.f5=1 كدخل لاستقبال اشارة الاختيار القادمة من الماستر لبدء التخاطب.

وبعدين لتهيئة البروتوكول في الميكروسي نكتب التالي:

SPI1_Init_Advanced(_SPI_SLAVE_SS_enable,_SPI_DATA_ SAMPLE_end,_SPI_CLK_IDLE_high,_SPI_high_2_low);

باختصار قمنا باختيار برتوكول SPI كا مستقبل , وارسال البيانات تكون في في الجبهة الهابطة في النبضات, وتمكين استقبال نبضة الاختيار القادمة من الماستر, هذه اهم اشياء يجب معرفتها وللمزيد راج الداتاشيت !!!.

وعندنا اوامر تفعيل المقاطعات لاستقبال البيانات:

;PIE1.SSPIE = 1 تفعيل مقاطعات SPI
;INTCON.GIE = 1 لتفعيل المقاطعات العامة
;INTCON.PEIE = 1 تفعيل المقاطعات المحيطية


اخيرا عندنا الدالة الغير منتهية وداخلها:

اول شي نفحص قيمة العلم اذا كان واحد يعني تم استقبال البيانات عن طريق المقاطعة,
بعدها راح نفحص البيانات القادمة وتشغيل الليد المناسب واخيرا تصفير قيمة علم المقاطعة اللي فحصناه ليتم تعليمنا بقدوم مقطعة اخرى,

هذه هي الخطوات:

(switch(temp افحص البيانات المتستقبلة
}

:case 1 اذا كانت 1

;portd=0b00000001 شغل اول ليد

;flag=0 تفصير علم المقاطقة

;break انتهينا وهكذا بالنسبة للبيانات القادمة الاخرى

{


تحميل المشروع كاملا:
http://www.4shared.com/rar/9SKoiLQ0/...Interrupt.html

اعلانات

الصورة الرمزية Semmoor
Semmoor
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
المشاركات: 300
نشاط [ Semmoor ]
قوة السمعة:0
قديم 26-09-2012, 06:59 PM المشاركة 2   
افتراضي


!!!!!!!!!!!! مهم جدا !!!!!!!!!!



ترى المجلد الاول فيه الهكس حق الماستر اسمه MASTER

والمجلد الثاني فيه الهكس حق المستقبل اسمه SLAVE

في المحاكاة ترى البيك الاول اللي فوق هو MASTER والثاني اللي تحت هو SLAVE


ملاحظة مهمة ترى زمن الانتظار يكون في كود الماستر فقط لانه هو المسؤول في توليد الساعات للمستقبل.


التعديل الأخير تم بواسطة : Semmoor بتاريخ 26-09-2012 الساعة 07:06 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

رجل المستقبل
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2012
المشاركات: 91
نشاط [ رجل المستقبل ]
قوة السمعة:0
قديم 27-09-2012, 08:23 AM المشاركة 3   
افتراضي شكرآ جدآ


بارك الله فيك أخي ‏SEMMOOR‏ شرح ممتاز و مهم ولكن إن كنت أريد أن اربط بك واحد ماستر و 4 أو أكثر ماذا أفعل


khamed tabet
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 333
نشاط [ khamed tabet ]
قوة السمعة:0
قديم 27-09-2012, 11:57 AM المشاركة 4   
افتراضي


شكرا لك يا أخي بخصوص SPI لقد شاهدته في كثير من المشاريع الكبيرة ولم افهمه وهاهو موضوعه D;


التعديل الأخير تم بواسطة : khamed tabet بتاريخ 27-09-2012 الساعة 12:37 PM

الصورة الرمزية Semmoor
Semmoor
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
المشاركات: 300
نشاط [ Semmoor ]
قوة السمعة:0
قديم 27-09-2012, 12:56 PM المشاركة 5   
افتراضي


بارك الله فيك أخي ‏SEMMOOR‏ شرح ممتاز و مهم ولكن إن كنت أريد أن اربط بك واحد ماستر و 4 أو أكثر ماذا أفعل
مرة سهل بس وصل المتحكمات في نفس الاسلاك , وبعدين لازم تظيف سلك لكل معالج كما فعلنا لكي يستخدم في اختيار المعالج المراد التحكم به.

طبعا المهم انك راح تظيف سلك كلما تزيد عدد المتحكمات مثلا لو عندنا خمس بيك وواحد ماستر لازم يكون عندنا خمس اسلاك من الماستر الى المتحكمات الاخرى وبعدين الماستر يقدر يختار اي واحد للتحكم به.


شوووف الصورة:

http://upload.qariya.info/images/qar...a43c80ee58.gif


الصورة الرمزية ibn al islam
ibn al islam
:: عضو فضي ::
تاريخ التسجيل: Sep 2012
الدولة: tunisia
المشاركات: 612
نشاط [ ibn al islam ]
قوة السمعة:81
قديم 27-09-2012, 03:46 PM المشاركة 6   
افتراضي


السلام عليكم

لو امكن اخى ان ترفع لنا نسخة البروتز التى تستعملها او تضع صورة للتوصيل البيك مع رقمه البيك المستعمل

مع الشكر


الصورة الرمزية Semmoor
Semmoor
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
المشاركات: 300
نشاط [ Semmoor ]
قوة السمعة:0
قديم 27-09-2012, 08:50 PM المشاركة 7   
افتراضي


السلام عليكم

لو امكن اخى ان ترفع لنا نسخة البروتز التى تستعملها او تضع صورة للتوصيل البيك مع رقمه البيك المستعمل

مع الشكر

تفضل هذه صورة للدائرة الالكترونية:

http://upload.qariya.info/images/qar...97ecec83d0.png


الصورة الرمزية Semmoor
Semmoor
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
المشاركات: 300
نشاط [ Semmoor ]
قوة السمعة:0
قديم 28-09-2012, 02:13 PM المشاركة 8   
افتراضي


المشروع الثاني :

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

التحميل كاملا:
http://www.4shared.com/rar/-WVmoTZ1/...ER__SLAVE.html

إضافة رد

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

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

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


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

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