في برنامجنا التعليمي السابق تطرقنا الى اتصالات الواجهة الطرفية التسلسلية SPI في الأردوينو. سنتعرف اليوم على نظام اتصالات تسلسلي آخر: الدوائر المتكاملة (Inter Integrated Circuits) I2C. مقارنة I2C مع I2C، SPI لديه سلكين فقط في حين يستخدم SPI أربعة أسلاك. كذلك، يمكن أن يكون لـ I2C العديد من المتحكمات والمخارج، في حين أن SPI يمكن أن يكون لها فقط متحكم واحد و العديد من المخارج. لذلك يتم استخدام I2C في حال وجود أكثر من متحكم واحد في المشروع. يستخدم I2C بشكل عام للاتصال مع الجيروسكوب، التسارع، وأجهزة استشعار الضغط الجوي، وشاشات LED، الخ …
ما هو نظام اتصالات I2C؟
يشير المصطلح IIC إلى “الدوائر المتكاملة المتكاملة”. عادةً ما يتم الإشارة إليه على أنه I2C أو I تربيع C أو حتى نظام توصيل بسلكين (TWI) في بعض الأماكن ولكن كل ذلك يشير الى معنى واحد. I2C هو نظام اتصال متزامن، يعمل على تبادل المعلومات بين المتحكمات تحت إشارة ساعة واحدة. كما أنه يحتوي على سلكين لتبادل المعلومات التي يتم استخدامها. واحد لإشارة الديك والآخر لإرسال واستقبال البيانات.
كيف تعمل اتصالات I2C؟
تم تقديم أول اتصال من I2C بواسطة Phillips. كما قال في وقت سابق أنه يحتوي على سلكين، سيتم توصيل هذين الأسلاك عبر جهازين. هنا يدعى جهاز واحد سيد ويتم استدعاء الجهاز الآخر باسم العبيد. يجب أن يحدث التواصل دائماً بين سيدين وعبد. ميزة الاتصال I2C هو أنه يمكن توصيل أكثر من عبد واحد إلى المتحكم أو (السيد).
يحدث التواصل الكامل من خلال هذين السلكين وهما: Serial Clock (SCL) و Serial Data (SDA).
- Serial Clock (SCL): يشترك في إشارة الساعة التي تم إنشاؤها بواسطة السيد مع العبيد.
- Serial Data (SDA): يرسل البيانات من وإلى السيد والعبد.
في أي وقت كان، فقط السيد سيستطيع بدء الاتصال. ونظرًا لوجود أكثر من عبيد، يجب على المتحكم الرجوع إلى كل عبد باستخدام عنوان مختلف. عند التعامل مع العبد فقط مع العنوان المحدد له ، سوف يستجيب للمعلومات. وبهذه الطريقة ، يمكننا استخدام الدائرة واحدة للاتصال مع العديد من الأجهزة.
مستويات الجهد لـ I2C ليست محددة مسبقا. إن اتصال I2C مرن، وهذا يعني أن الجهاز الذي يعمل بجهد 5 فولت ، يمكن أن يستخدم 5 فولت لـ I2C ويمكن للأجهزة 3.3 فولت أن تستخدم 3v لاتصالات I2C. ولكن ماذا لو كان هناك جهازان يعملان على جهد مختلف، وبحاجة إلى الاتصال باستخدام I2C؟ لا يمكن توصيل 5V I2C بجهاز 3.3V. وفي هذه الحالة، يتم استخدام أجهزة تبديل التيار الكهربائي لمطابقة مستويات الجهد بين جهازي I2C.
هناك مجموعة من الشروط التي لابد من وجودها لإتمام الاتصال. حيث تبدأ عملية بدء الإرسال بحافة ساقطة من SDA ، والتي يتم تعريفها بأنها شرط “START” في أسفل الرسم البياني حيث يترك الرئيسي SCL عالياً أثناء إعداد SDA منخفض.
كما هو موضح في الرسم البياني أعلاه، فإن حافة السقوط من SDA هي مشغل الأجهزة لحالة START. بعد هذا كل الأجهزة على نفس الموجة تذهب إلى وضع الاستماع.
وبنفس الطريقة، توقف حافة SDA الإرسال الذي يظهر كشرط “STOP” في الرسم التخطيطي أعلاه، حيث أن السيد يترك SCL عاليًا ويطلق SDA أيضًا ليتم نقله إلى HIGH. وبسبب صعود SDA، سيتم إيقاف عملية الإرسال.
تشير بتات R / W إلى اتجاه إرسال البايتات، إذا كانت HIGH تعني أن العبد من سينقل البيانات، وإذا كانت منخفضة يعني أن السيد من سيقوم بنقل البيانات.
يتم إرسال كل بت في كل دورة ساعة، لذلك يستغرق 8 دورات على مدار الساعة لنقل بايت واحد فقط. بعد كل بايت يتم إرسالها أو استلامها، يتم عقد دورة الساعة التاسعة لـ ACK / NACK (المعترف بها / غير معترف بها). يتم إنشاء بت ACK بواسطة السيد أو العبي حسب الحالة. بالنسبة إلى بت ACK ، يتم تعيين SDA إلى منخفض بواسطة السيد أو العبيد في دورة الساعة التاسعة. لذلك ان كانت منخفضة تعتبر ACK، بينما ان كانت عالية تعتبر NACK.
أين يتم استخدام اتصالات I2C؟
يتم استخدام اتصالات I2C فقط للاتصال عن بعد. ومن المؤكد أنه يمكن الاعتماد عليه إلى حد ما لأنه يحتوي على نبضة ساعة متزامنة لجعلها ذكية. يتم استخدام هذا النظام بشكل أساسي للتواصل مع أجهزة الاستشعار أو الأجهزة الأخرى التي تضطر لإرسال المعلومات إلى المتحكم. إنه سهل للغاية عندما يتصل المتحكم(microcontroller) مع العديد من وحدات العبيد الأخرى باستخدام الحد الأدنى من الأسلاك فقط. إذا كنت تبحث عن اتصال بعيد المدى فيجب عليك تجربة RS232 وإذا كنت تبحث عن اتصالات أكثر موثوقية، فيجب عليك تجربة نظام SPI.
I2C في الأردوينو:
توضح الصورة أدناه دبابيس I2C الموجودة في Arduino UNO.
- الدبوس SDA :A4
- الدبوس SCL : A5
مثال تطبيقي: