I2C

2013-06-24

وهي اختصار لInter-Integrated Circuit - بمعنى الدائة المشتركة المتكاملة، ورقم 2 اي حرف IوI، يمكن اختصارها على الشكل التالي IIC.

وهي تقنية تمكنك من تشغيل مجموعة من الأجهزة باقل عدد ممكن من التوصيلات، وبنفس الكفائة. وفكرتها تقوم على انه لكل جهاز عنوان فريد خاص، (يمكنك ان تتصور الmac address في شبكات الحاسوب)، والتعامل مع الجهاز باستخدام خط الساعة ( serial clock line ).، وخط اخر للبيانات

التوصيلات: لتوصيل الجهاز بالمتحكم تحتاج الى منفذان(أو سلكان) واحد للبيانات والاخر للساعة ( serial clock line )، ويمكنك توصيل هذان الخطان (السلكان) بجميع الاجهزة، كما في المثال في الأسفل

اضف وصف الصورة هنا

التطبيقات:- في الذاكرة العشوائية ( SDRAM, DDR SDRAM, DDR2 SDRAM ) التحكم بالصوت في السماعات الذكية. التحكم في الشاشاة ( OLED/LCD) كشاشة الهاتف على سبيل المثال في المجسات( Sensors )، والمتحكمات من ويكيبيديا مجس الثلاثي الابعاد HMC5883L في كاميرات الCMOS Camera والعديد العديد من التطبيقات الأخرى

مع الأردونينو الاردوينو داعم ممتاز لهذه التقنية، فسنذكر على سبيل المثال:-

  • الاونو المنفذان A4 , A5
  • الميغا Mega2560 المنفذان 20 21
  • ليوناردLeonardo المنفذان2 و 3
  • يمنك البحث عن لوحتك للتاكد من المنافذ الخاصة في الI2C .

التوصيل مع الأردوينو يوجد في الأردينو مكتبة التوصيل Wire، وفيها الدوال الخاصة في انشاء الاتصال وارسال البيانات. مزيد من التفاصيل في المثال.

مثال-توصل مجس HMC5883L

اول يجب معرفة العنوان الخاص فيه، يمكنك ايجاد عنوان الجهاز في الوثائق الخاص فيه، عنوان مجسنا هو 0x1E. الان نقوم بفتح قناة اتصال مع الجهاز، وهنا نستخدم مكتبة التوصل كالاتي

Wire.beginTransmission(address); //open communication with HMC5883

ويمكننا ارسال البيانات باستخدام دالة ارسال

Wire.send(data); //select mode register

النص المصدري كامل موجود في الأسفل

التوصيل

اضف وصف الصورة هنا

/* An Arduino code example for interfacing with the HMC5883 by: Jordan McConnell SparkFun Electronics created on: 6/30/11 license: OSHW 1.0, http://freedomdefined.org/OSHW Analog input 4 I2C SDA Analog input 5 I2C SCL */ #include <Wire.h> //I2C Arduino Library #define address 0x1E //0011110b, I2C 7bit address of HMC5883 void setup(){ //Initialize Serial and I2C communications Serial.begin(9600); Wire.begin(); //Put the HMC5883 IC into the correct operating mode Wire.beginTransmission(address); //open communication with HMC5883 Wire.send(0x02); //select mode register Wire.send(0x00); //continuous measurement mode Wire.endTransmission(); } void loop(){ int x,y,z; //triple axis data //Tell the HMC5883 where to begin reading data Wire.beginTransmission(address); Wire.send(0x03); //select register 3, X MSB register Wire.endTransmission(); //Read data from each axis, 2 registers per axis Wire.requestFrom(address, 6); if(6<=Wire.available()){ x = Wire.receive()<<8; //X msb x |= Wire.receive(); //X lsb z = Wire.receive()<<8; //Z msb z |= Wire.receive(); //Z lsb y = Wire.receive()<<8; //Y msb y |= Wire.receive(); //Y lsb } //Print out values of each axis Serial.print("x: "); Serial.print(x); Serial.print(" y: "); Serial.print(y); Serial.print(" z: "); Serial.println(z); delay(250); }
7


بلال العفوري
بلال العفوريمنذ 3 سنوات

مقال رائع , شكرا امين تلفظ : "اي سكوير سي " وتكتب I2C , صحيح ؟

1

أمين صرصور
أمين صرصورمنذ 3 سنوات

صحيح للاثنين.

غاب عن بالي ان أضع اللفظ، وبالنسبة للكتابة أحيانا تكتب IIC، لكن الشائع هو I2C، بالنسبة للعنوان قام الموقع بتحويل كتابة الرقم الى الشكل الهندي، لهذا السبب شكله غريب نوعا ما...

2

مؤيد السعدي
مؤيد السعديمنذ 3 سنوات

أجمل ما في هذه الطريقة في التواصل إمكانية ربط عدد غير محدود من الأجهزة (يصل العدد إلى 128 جهاز إن اعتمدنا 7-بت لعنوان التابع) بواسطة سلكين فقط!! وكل جهاز يمكن أن يعمل على تردد مختلف عن الآخر بفضل ميزة مط دقات الساعة clock stretching ومن ميزاتها وجود أكثر من قائد multi-master ولبساطة هذا البروتوكول يمكن محاكاته برمجيا في المتحكمات التي لا تدعمه.

لك أن تتخيل روبوت معقد جدا به عدة حساسات ومتحكمات كلها تتخاب معا في نفس السلكين.

3

مؤيد السعدي
مؤيد السعديمنذ 3 سنوات

الوثائق الخاصة بمتحكمات AVR تسميه TWI أي two wire interface

2

Test User