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

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

geniusse01
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2008
الدولة: Jordan - Amman
المشاركات: 1,139
نشاط [ geniusse01 ]
قوة السمعة:105
قديم 25-12-2011, 07:22 PM المشاركة 1   
افتراضي أساسيات التعامل مع بروتوكول I2C وتطبيقاته Twitter FaceBook Google+



السلام عليكم

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

من هنا كان اختيار بروتوكول الربط I2C من اكثر الطرق المستخدمة للربط بين المتحكمات وبين العناصر الالكترونية المختلفة مثل الذاكرة الخارجية التسلسية (EEPROM) ومثل ساعة الزمن الحقيقي (DS1307) وغيرها الكثير .


تتألف طريقة الربط بواسطة I2C من طرفين للتوصيل :
1 - طرف لتوصيل نبضات الساعة SCL.
2 - طرف لتوصيل الداتا SDA.

يمكن من خلال بروتوكول I2C توصيل عناصر متعددة الى نفس الطرفين والتخاطب معها جميعا بدون ان يحدث تداخل بينها .



والسؤال الذي يطرح نفسه : في حال كان لدي عدة عناصر الكترونية (مثلا لدي ذاكرة EEPROM وساعة زمن حقيقة DS1307 وغيرها) والتي تستخدم طريقة I2C فكيف يمكن نقل الداتا من المتحكم الى الايبروم فقط ؟؟؟

الجواب بسيط جدا : تعتمد عملية نقل الداتا على استخدام عنوان مميز لكل عنصر ( هذا العنوان يشبه الاسم والذي يميز كل انسان) فمثلا الذاكرة الخارجية التسلسلية EEPROM لها رقم مميز يختلف عن DS1307 ، ويجب مراجعة الداتاشيت للعنصر لمعرفة هذا الرقم حتى نتمكن من نقل الداتا والا فان عملية الربط ستكون بدون جدوى .

هذه مقدمة بسيطة لتوضيح هذا البروتوكول ،وان شاء الله يتم التوضيح بشكل تدريجي للوصول الى فهم اكبر لهذا البروتوكول ،كما وسيتم الاستفادة من موضوع اخينا نافذ ابو كشك على الرابط التالي:


واخر دعوانا ان الحمدلله رب العالمين .. وصلى الله على سيدنا محمد وعلى اله وصحبه وسلم.


التعديل الأخير تم بواسطة : geniusse01 بتاريخ 25-12-2011 الساعة 09:27 PM
اعلانات

الصورة الرمزية compiler_x
compiler_x
:: مهندس متميز ::
تاريخ التسجيل: Apr 2008
الدولة: IRAQ
المشاركات: 375
نشاط [ compiler_x ]
قوة السمعة:0
قديم 26-12-2011, 07:31 AM المشاركة 2   
افتراضي


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

وما المتحكم الذي ستستخدمه ؟

جزاك الله خيرا

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

hamzazayyad
:: مهندس متميز ::
تاريخ التسجيل: Aug 2005
الدولة: موزنبيق
المشاركات: 701
نشاط [ hamzazayyad ]
قوة السمعة:0
قديم 26-12-2011, 10:18 AM المشاركة 3   
افتراضي


السلام عليكم
مقدمه جميله اخي فادي بارك الله فيك

وهذا رابط لفس البروتوكول ولكن لربط اثنين ميكروكنترولر ببعض
احدهما رئيسي والاخر متحكم فرعي
http://www.qariya.com/vb/showthread.php?t=98827


geniusse01
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2008
الدولة: Jordan - Amman
المشاركات: 1,139
نشاط [ geniusse01 ]
قوة السمعة:105
قديم 27-12-2011, 04:39 PM المشاركة 4   
افتراضي


السلام عليكم

تعتمد عملية نقل الداتا من خلال بروتوكول I2C على وجود طرفين يتم نقل الداتا بينهما :

1 - السيد او الماستر : وهو الذي يقوم بالتحكم بعملية النقل بشكل عام وهو المسؤول عن توليد نبضات الساعة اللازمة لعملية نقل الداتا ، وخلال الشرح سيكون المتحكم هو الذي يقوم بهذه الوظيفة ، وسنستخدم في الشرح PIC16F877A والذي يحتوي على هاردوير داخلي I2C .

2 - التابع او الخادم : وهو الذي يقوم بكل ما يطلب منه من خلال الماستر مثل حفظ المعلومات او استرجاعها ، وخلال الشرح ستكون ذاكرة الايبروم الخارجية هي التي تقوم بهذه الوظيفة ، وسنستخدم الذاكرة 24C16.

ملاحظة مهمة : في حال استخدام الذاكرة 24C16 فان الذاكرة الداخلية تحتوي على 16384 بت وليس 16384 بايت ،وبالتالي للحصول على عدد البايتات في الذاكرة الداخلية يجب ان نقسم الحجم المذكور على 8 ، هذا الامر قد يسبب بعض الارباك احيانا .

ان عملية نقل الداتا من المتحكم الى الايبروم تسمى عملية الكتابة الى الايبروم ، اما عملية نقل الداتا من الايبروم الى المتحكم فتسمى عملية القراءة من الايبروم .

تتم عملية الكتابة الى الايبروم بطريقتين :

1 - كتابة بايت واحد فقط الى الايبروم (Byte Write) .
2 - كتابة عدة بايتات متتاليةالى الايبروم (Page Write ) .

نبدأ مع النوع الاول :

1 - كتابة بايت واحد فقط الى الايبروم (Byte Write) .


لتوضيح عملية كتابة بايت الى الايبروم فلننظر الى الصورة التالية التي توضح تسلسل عملية الكتابة :


1 - تبدأ عملية ارسال الداتا بارسال اشارة بدء الارسال ( START ) من قبل الماستر .
2 - يقوم الماستر بارسال البايت الاول BYTE1 والذي يتكون من 7 بتات لتحديد العنوان المميز للخادم , في حال البت الثامن يساوي الصفر فان الخادم يفهم بان العملية هي عملية كتابة الى الايبروم ، اما في حال كان البت الثامن يساوي الواحد فان الخادم يفهم بان العملية هي عملية قراءة من الايبروم , بعدها يرد الخادم باشارة ACK والتي تعني بان عملية الاستقبال قد تمت بنجاح .
3 - يقوم الماستر بارسال البايت الثاني BYTE2 والذي يحوي العنوان الذي سيتم الكتابة اليه داخل الايبروم ، ويمكن ان نصل الى 256 موقع ذاكرة (256 بايت ) داخل الايبروم (هذا العنوان يتم وضعه في مؤشر الموقع للايبروم ) ، بعدها يرد الخادم باشارة ACK والتي تعني بان عملية الاستقبال قد تمت بنجاح .
4 - واخيرا يقوم الماستر بارسال البايت الثالث BYTE3 , والذي يحوي الداتا المطلوب كتابتها وحفظها في المكان الذي يدل عليه مؤشر الموقع للايبروم ، بعدها يرد الخادم باشارة ACK والتي تعني بان عملية الاستقبال قد تمت بنجاح .
5 - تنتهي عملية ارسال الداتا بارسال اشارة نهاية الارسال ( STOP ) من قبل الماستر .

ملاحظة مهمة في حال الايبروم المستخدم هنا :
من المهم لاتمام عملية الخاطب معرفة ان الايبروم تمتلك العنوان الثنائي المميز ( 1010) مهما كان حجم الايبروم ، والسؤال الذي يطرح نفسه : ماذا نفعل بالبتات الثلاث الباقية في البايت الاول BYTE1 ؟؟؟
الجواب كالتالي: قلنا ان الذاكرة تحتوي 16384 بت وهذا يعني 2084 بايت .فكم بت نحتاج لتمثيل هذه المواقع في الذاكرة ؟؟؟

بالحساب نجد ان :
كود:
 
2^11 =2048
اي اننا نحتاج الى 11 بت حتى نصل الى اي موقع موجود في الذاكرة .. وبالتالي نستخدم البتات الثلاثة الموجودة في البايت الاول BYTE1 مع كامل البايت الثاني BYTE2 للحصول على 11 بت وبالتالي الوصول الى اي موقع في الايبروم ، وهكذا يتم الوصول الى اي موقع داخل الايبروم من خلال مؤشر الموقع ،حيث يزداد المؤشر بعد كل عملية قراءة او كتابة بشكل تلقائي.

مثال 1 : قم بعمل برنامج باستخدام الميكروسي يقوم بحفظ القيمة (0xAA) في الموقع رقم 1000 داخل الايبروم 24C16 وذلك باستخدام بروتوكول النقل I2C .


معلومة مفيدة : في بداية اي برنامج يستخدم I2C يجب تحديد التردد الذي يستخدم لنقل الداتا ، عادة فان تردد 100 كيلو هيرتز مناسب لكثير من التطبيقات . الامر المستخدم لتحديد التردد حسب الميكروسي هو :

كود:
 
I2C1_Init(100000);
الجواب :

سنقوم بتحديد البايتات الثلاث اللازمة لعملية الكتابة الى الايبروم .

البايت الاول : لتحديد البايت الاول نحن بحاجة الى العنوان المميز للايبروم وهو (1010)، والعملية هي كتابة الى الايبروم فآخر بت هو صفر .. يبقى الان الثلاث بتات التي تحدثنا عنها حيث ناخذها من السؤال (الموقع هو 1000) :


كود:
1000 = 011 1110 1000
وهكذا فان البايت الاول هو :


Byte1 = 1010 011 0 = A6


البايت الثاني : هو البايت الذي يحدد باقي مكان مؤشر الموقع (الموقع هو 1000 ) :



كود:
1000 = 011 1110 1000

Byte2 = 1110 1000 = E8



البايت الثالث : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 1000( :


Byte3 = 0xAA




وهكذا يكون البرنامج كاملا كالتالي:


كود:
 
void main() } I2C1_Init(100000); I2C1_Start(); I2C1_Wr(0xA6); I2C1_Wr(0xE8); I2C1_Wr(0xAA); I2C1_Stop(); {
ملف البروتوس مع الميكروسي برو ( 7.7) موجود على الرابط التالي:



يمكن التعديل على ملف الميكروسي ومن ثم رؤية القيمة التي تم ارسالها الى الايبروم من خلال تشغيل تشغيل ملف البروتوس ، ومن ثم ايقاف البروتوس مؤقتا بالضغط على ( | | ) عندها تظهر نافذة الايبروم كما في الشكل التالي :



ارجو ان تكون الامور واضحة ، وفي حال وجود اي استفسار ارجو طرحه هنا ..


تمرين 1 : قم بكتابة برنامج بواسطة الميكروسي يقوم بحفظ القيمة 0x56في الموقع رقم 1992 داخل الايبروم 24C16 .


وآخر دعوانا ان الحمدلله رب العالمين .. وصلى الله على سيدنا محمد وعلى اله وصحبه وسلم.


التعديل الأخير تم بواسطة : geniusse01 بتاريخ 27-12-2011 الساعة 04:51 PM

geniusse01
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2008
الدولة: Jordan - Amman
المشاركات: 1,139
نشاط [ geniusse01 ]
قوة السمعة:105
قديم 28-12-2011, 08:37 AM المشاركة 5   
افتراضي كتابة عدة بايتات ممتالية Page Write


السلام عليكم

نكمل مع النوع الثاني من طرق الكتابة وهي :


2 - كتابة عدة بايتات متتالية الى الايبروم (Page Write ) :


لا تختلف عملية كتابة بايت الى الايبروم عن كتابة عدة بايتات متتالية والصورة التالية توضح ذلك :








1 - تبدأ عملية ارسال الداتا بارسال اشارة بدء الارسال ( START ) من قبل الماستر .


2 - يقوم الماستر بارسال البايت الاول BYTE1 والذي يتكون من 7 بتات لتحديد العنوان المميز للخادم ، ففي حال كان البت الثامن يساوي الصفر فان الخادم يفهم بان العملية هي عملية كتابة الى الايبروم ، اما في حال كان البت الثامن يساوي الواحد فان الخادم يفهم بان العملية هي عملية قراءة من الايبروم , بعدها يرد الخادم باشارة ACK والتي تعني بان عملية الاستقبال قد تمت بنجاح .


3 - يقوم الماستر بارسال البايت الثاني BYTE2 والذي يحوي العنوان الذي سيتم الكتابة اليه داخل الايبروم ، ويمكن ان نصل الى 256 موقع ذاكرة (256 بايت ) داخل الايبروم (هذا العنوان يتم وضعه في مؤشر الموقع للايبروم ) ، بعدها يرد الخادم باشارة ACK والتي تعني بان عملية الاستقبال قد تمت بنجاح .


4 – الان يقوم الماستر بارسال البايت الثالث BYTE3 , والذي يحوي الداتا المطلوب كتابتها وحفظها في المكان الذي يدل عليه مؤشر الموقع للايبروم ، بعدها يرد الخادم باشارة ACK والتي تعني بان عملية الاستقبال قد تمت بنجاح .


ملاحظة مهمة : بعد عملية الكتابة هنا يزداد مؤشر الموقع بمقدار واحد تلقائيا .


5 – بما ان مؤشر الموقع قد ازداد بمقدار 1 تلقائيا ، الان يقوم الماستر بارسال البايت الرابع BYTE4 كما ورد في النقطة السابقة ، وتعاد نفس العملية مادام هناك بايتات اخرى حتى البايت الاخير BYTE N .


6 - تنتهي عملية ارسال الداتا بارسال اشارة نهاية الارسال ( STOP ) من قبل الماستر .


مثال 2 : قم بعمل برنامج باستخدام الميكروسي يقوم بحفظ القيم (0xA0,0xA1,0xA2,0xA3,0xA4,0xA5) بداية من الموقع رقم 10 داخل الايبروم 24C16 وذلك باستخدام بروتوكول النقل I2C .

الجواب :

نقوم بتحديد البايتات اللازمة لعملية الكتابة الى الايبروم .

البايت الاول : لتحديد البايت الاول نحن بحاجة الى العنوان المميز للايبروم وهو (1010) ، والعملية هي كتابة الى الايبروم فآخر بت هو صفر ..يبقى الان الثلاث بتات التي تحدثنا عنها حيث ناخذها من السؤال (الموقع هو 10) :


كود:
10 = 000 0000 1010
وهكذا فان البايت الاول هو :


Byte1 = 1010 000 0 = A0





البايت الثاني :هو البايت الذي يحدد باقي مكان مؤشر الموقع (الموقع هو 10 ) :




كود:
 
10 = 000 0000 1010




Byte2 = 0000 1010 = 0A





البايت الثالث : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 10 ) :


Byte3 = 0xA0








البايت الرابع : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 11 ) :



Byte4 = 0xA1








البايت الخامس : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 12 ) :



Byte5 = 0xA2








البايت السادس : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 13 ) :



Byte6 = 0xA3








البايت السابع : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 14 ) :



Byte7 = 0xA4





البايت الثامن : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 15 ) :



Byte7 = 0xA5









وهكذا يكون البرنامج كاملا كالتالي:








كود:
 
 
 
 
 
void main(){
I2C1_Init(100000);
I2C1_Start();
I2C1_Wr(0xA0);
I2C1_Wr(0x0A);
I2C1_Wr(0xA0);
I2C1_Wr(0xA1);
I2C1_Wr(0xA2);
I2C1_Wr(0xA3);
I2C1_Wr(0xA4);
I2C1_Wr(0xA5);
I2C1_Stop();
}


ملف البروتوس مع الميكروسي برو ( 7.7) موجود على الرابط التالي:

http://www.gulfup.com/X6t7lkp1tec99


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


تمرين 2 : قم بكتابة برنامج يحفظ الارقام من 1 -10 في الايبروم في الموقع 100 وما بعده .

وآخر دعوانا ان الحمدلله رب العالمين .. وصلى الله على سيدنا محمد وعلى اله وصحبه وسلم.


التعديل الأخير تم بواسطة : geniusse01 بتاريخ 28-12-2011 الساعة 12:46 PM

الصورة الرمزية أبو معاذ 2010
أبو معاذ 2010
:: مشرف قسم الإنتاج الزراعي والحيواني والطاقة البديلة ::
تاريخ التسجيل: Feb 2010
المشاركات: 2,121
نشاط [ أبو معاذ 2010 ]
قوة السمعة:216
قديم 28-12-2011, 10:57 AM المشاركة 6   
افتراضي


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

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


hocinech
:: مهندس ::
تاريخ التسجيل: Oct 2009
المشاركات: 46
نشاط [ hocinech ]
قوة السمعة:0
قديم 28-12-2011, 04:44 PM المشاركة 7   
افتراضي


شكرا
في انتضار الجديد


geniusse01
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2008
الدولة: Jordan - Amman
المشاركات: 1,139
نشاط [ geniusse01 ]
قوة السمعة:105
قديم 28-12-2011, 06:42 PM المشاركة 8   
افتراضي


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

وما المتحكم الذي ستستخدمه ؟

جزاك الله خيرا

السلام عليكم

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


السلام عليكم
مقدمه جميله اخي فادي بارك الله فيك

وهذا رابط لفس البروتوكول ولكن لربط اثنين ميكروكنترولر ببعض
احدهما رئيسي والاخر متحكم فرعي
http://www.qariya.com/vb/showthread.php?t=98827
موضوع جميل وسيكون لنا نقاش حول الموضوع .. احتاج الوقت لقراءة الموضوع وبعدها نطور الافكار ..ارجو لك التوفيق اخي العزيز ..


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

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


سيكون هناك فترة زمنية حتى نبدا القراءة بواسطة هذا البروتوكول حتى يتسنى وضع الاسئلة في حال وجودها من الاخوة الكرام وبعدها سنكمل.. ارجو لك التوفيق اخي العزيز ..


وآخر دعوانا ان الحمدلله رب العالمين ... وصلى الله على سيدنا محمد وعلى اله وصحبه وسلم.

إضافة رد

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

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

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


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

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