كل شيء عن حافلة Arduino I2C

اردوينو I2C حافلة

مع يمكن لـ Arduino إنشاء عدد كبير من المشاريع كما رأيت إذا قرأت Hwlibre ، برمجة الميكروكونترولر بطريقة بسيطة. ولكن بين الاتصالات التناظرية والرقمية لهذه اللوحة hardware libre، هناك بعضها لا يزال غير معروف إلى حد ما للعديد من المبتدئين، مثل الإمكانات الحقيقية لاتصالات PWM، أو SPI، أو دبابيس RX وTX للمنفذ التسلسلي، أو ناقل I2C نفسه. لذلك، مع هذا الإدخال ستتمكن على الأقل من معرفة كل ما تحتاجه حول I2C.

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

ما هو I2C؟

تشير I2C إلى الدائرة المتكاملة، وهذا هو ، دائرة متكاملة. وهي عبارة عن ناقل اتصالات بيانات تسلسلي تم تطويره في عام 1982 من قبل شركة Philips Semiconductors ، والتي هي اليوم NXP Semiconductors بعد التخلص من هذا القسم. في البداية تم إنشاؤه لتلفزيونات هذه العلامة التجارية ، لتوصيل العديد من الرقائق الداخلية بطريقة بسيطة. ولكن منذ عام 1990 انتشر I2C ويستخدمه العديد من الشركات المصنعة.

تستخدم حاليا من قبل العشرات من صانعي الرقائق لوظائف متعددة. قدم Atmel ، مبتكر الميكروكونترولر للوحات Arduino ، تعيين TWI (بواجهة سلكية) لأغراض الترخيص ، على الرغم من أنه مطابق لـ I2C. ولكن في عام 2006 ، انتهت صلاحية براءة الاختراع الأصلية ولم تعد خاضعة لحقوق الطبع والنشر ، لذلك تمت إعادة استخدام المصطلح I2C (لا يزال الشعار محميًا فقط ، ولكن تنفيذه أو استخدامه للمصطلح غير مقيد).

التفاصيل الفنية للحافلة I2C

حافلة I2C

El أصبحت حافلة I2C معيارًا صناعيًا ، وقد طبقتها Arduino للتواصل مع الأجهزة الطرفية التي تحتاجها. تحتاج فقط إلى سطرين أو كبلين لتشغيلها ، أحدهما لإشارة الساعة (CLK) والآخر لإرسال البيانات التسلسلية (SDA). يعد هذا مفيدًا مقارنةً بالاتصالات الأخرى مقارنةً بناقل SPI ، على الرغم من أن تشغيله أكثر تعقيدًا إلى حد ما بسبب الدوائر الإضافية المطلوبة.

في هذه الحافلة كل جهاز متصل به له عنوان تستخدم للوصول إلى هذه الأجهزة بشكل فردي. يتم إصلاح هذا العنوان عن طريق الأجهزة ، وتعديل آخر 3 بتات من خلال وصلات العبور أو تبديل DIP ، على الرغم من أنه يمكن القيام به أيضًا بواسطة البرنامج. سيكون لكل جهاز عنوان فريد ، على الرغم من أن العديد منها قد يكون لها نفس العنوان وقد يكون من الضروري استخدام ناقل ثانوي لتجنب التعارضات أو تغييره إن أمكن.

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

إذا كنت العديد من المعلمين في الحافلة، يمكن لشخص واحد فقط أن يعمل كمدرس في نفس الوقت. لكن الأمر لا يستحق ذلك ، لأن تغيير المعلم يتطلب درجة عالية من التعقيد ، لذلك فهو غير متكرر.

ضع في اعتبارك أن ملف يوفر Master إشارة الساعة لمزامنة جميع الأجهزة الموجودة على الحافلة. هذا يلغي الحاجة إلى أن يكون لكل عبد ساعته الخاصة.

يتوقع بروتوكول ناقل I2C أيضًا استخدام مقاومات السحب في خطوط جهد الإمداد (Vcc) ، على الرغم من أن هذه المقاومات لا تُستخدم عادةً مع Arduino سحب لأن مكتبات البرمجة حيث يقوم السلك بتنشيط العناصر الداخلية بقيم 20-30 ك. قد يكون هذا ضعيفًا جدًا بالنسبة لبعض المشاريع ، وبالتالي ستكون الحواف الصاعدة للإشارة أبطأ ، لذلك يمكن استخدام سرعات أقل ومسافات اتصال أقصر. لتصحيح ذلك ، قد تحتاج إلى ضبط مقاومات سحب خارجية من 1 كيلو إلى 4k7.

الإشارة

إشارة I2C

La إطار الاتصال التي تتكون منها إشارة ناقل I2C من البتات أو الحالات (تلك المستخدمة في Arduino ، نظرًا لأن معيار I2C يسمح للآخرين):

  • 8 بتات ، 7 منها عنوان من الجهاز التابع الذي تريد الوصول إليه لإرسال أو استقبال البيانات منه. باستخدام 7 بتات ، يمكن إنشاء ما يصل إلى 128 عنوانًا مختلفًا ، بحيث يمكن نظريًا الوصول إلى 128 جهازًا ، ولكن يمكن الوصول إلى 112 جهازًا فقط ، حيث تم حجز 16 عنوانًا للاستخدامات الخاصة. والبت الإضافي الذي يشير إلى ما إذا كنت تريد إرسال أو استقبال معلومات جهاز الرقيق.
  • هناك أيضا بت التحقق من الصحة، إذا لم يكن نشطًا ، فلن يكون الاتصال صالحًا.
  • ثم بايت البيانات التي يريدون إرسالها أو استقبالها من قبل العبيد. كل بايت ، كما تعلم ، يتكون من 8 بتات. لاحظ أنه لكل 8 بت أو 1 بايت من البيانات المرسلة أو المستلمة ، يلزم وجود 18 بتًا إضافيًا من التحقق من الصحة والعنوان وما إلى ذلك ، مما يعني أن سرعة الناقل محدودة للغاية.
  • جزء أخير من التحقق من صحة التواصل.

بالإضافة إلى ذلك ، تردد الساعة لـ الإرسال هو 100 ميجا هرتز كمعيار ، على الرغم من وجود وضع أسرع عند 400 ميجا هرتز.

مزايا وعيوب الحافلة I2C

ال ميزة هي:

  • بساطة باستخدام سطرين فقط.
  • لديها آليات لمعرفة ما إذا كانت الإشارة قد وصلت مقارنة ببروتوكولات الاتصال الأخرى.

ال عيوب هي:

  • سرعة انتقال منخفض إلى حد ما.
  • انها ليست كاملة الازدواج، أي أنه لا يمكنك الإرسال والاستلام في وقت واحد.
  • لا تستخدم التكافؤ ولا أي نوع آخر من آليات التحقق لمعرفة ما إذا كانت بتات البيانات المستلمة صحيحة.

I2C على اردوينو

اردوينو I2C حافلة

En اردوينو ، حسب الموديل، تختلف الدبابيس التي يمكن تمكينها لاستخدام ناقل I2C هذا. على سبيل المثال:

  • Arduino UNO، نانو ، ميني برو: A4 يُستخدم لـ SDA (البيانات) و A5 لـ SCK (الساعة).
  • ميجا اردوينو: دبوس 20 لـ SDA و 21 لـ SCK.

تذكر أنه لاستخدامه يجب عليك الاستفادة من المكتبة سلك لرموز Arduino IDE الخاصة بك ، على الرغم من وجود آخرين مثل I2C y i2cdevlib. يمكنك قراءة وثائق هذه المكتبات أو مقالاتنا عن المشاريع التي تهمك للحصول على أكواد لكيفية برمجتها.

كيف تعرف عنوان الجهاز لاستخدامه مع I2C؟

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

La مجتمع اردوينو خلقت هذا رمز لمسح العنوان والتعرف عليه بطريقة بسيطة. على الرغم من أنني أريكم الرمز هنا:

#include "Wire.h"
 
extern "C" { 
    #include "utility/twi.h"
}
 
void scanI2CBus(byte from_addr, byte to_addr, void(*callback)(byte address, byte result) ) 
{
  byte rc;
  byte data = 0;
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1, 0);
    callback( addr, rc );
  }
}
 
void scanFunc( byte addr, byte result ) {
  Serial.print("addr: ");
  Serial.print(addr,DEC);
  Serial.print( (result==0) ? " Encontrado!":"       ");
  Serial.print( (addr%4) ? "\t":"\n");
}
 
 
const byte start_address = 8;
const byte end_address = 119;
 
void setup()
{
    Wire.begin();
 
    Serial.begin(9600);
    Serial.print("Escaneando bus I2C...");
    scanI2CBus( start_address, end_address, scanFunc );
    Serial.println("\nTerminado");
}
 
void loop() 
{
    delay(1000);
}


كن أول من يعلق

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.