ماسح بروتوكول I2C

حول المشروع:

 بروتوكول I2C  او كما يسمى I sqaure C وهو عبارة عن وسيلة تواصل تسلسلية قصيرة المدى وبسرعات بطيئة نسبيا.

     بما يتميز البروتوكول:

         – يحتاج فقط الى سلكين للتواصل وهما سلك البيانات SDA وسلك الساعة .SCL

         – يمكن توصيل 128 جهاز نفس خط الاتصال – bus – عند استخدام عناوين اتصال من نوع 7 بت.

         – يمكن أيضا توصيل الى حد 1024 جهاز عند استخدام عناوين اتصال 10 بت.

         – يمكن توصيل عدة اجهزة كـ master وعدة اجهزة كـ slave على نفس خط الاتصال.

         – كل جهاز يحتوي على عنوان اتصال خاص فيه يكتب بالنظام الست عشري 0xXX.

         – سرعة نقل البيانات تتراوح بين 100 الى 400 كيلوبايت في الثانية.

ماسح I2C (scanner)

يستخدم بروتوكول I2C  في التواصل بين المتحكمات، او بين المتحكمات والحساسات والملحقات الأخرى. فمثلا عند استخدام اثنين اردوينو  للتواصل عن طريق I2C يجب تحديد أيا منهم يستخدم كـ master وايا منهم يستخدم كـ slave ويتم تحديد عنوان تواصل لجهاز ال slave في الكود البرمجي. لكن في حالة استخدام على سبيل المثال شاشتين LCD I2C مع متحكم اردوينو وحيد يجب معرفة عنوان كل شاشة حتى يتم ارسال البيانات وعرضها حسب الكود البرمجي. يمكن تحديد عنوان أي جهاز I2C عن طريق الكود البرمجي I2C scanner. 

توصيل حساس I2C وشاشة LCD with I2C

كما يظهر في الصورة قمنا بتوصيل حساس حرارة عن بعد (I2C) بالاضافة الى شاشة LCD متصلة بشريحة I2C مع الاردوينو اونو.

يجب الانتباه ان لكل لوحة تطوير منافذ خاصة بالـ  I2C حيث في الاردوينو اونو (SDA = A4 و SCL = A5).

 

سوف نقوم برفع الكود الظاهر بالاسفل وتشغيل شاشة السيريال لمعرفة عناوين I2C الخاصة بالشاشة والحساس.

 

 

 

الكود

				
					#include <Wire.h>

void setup()
{
  Wire.begin();

  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}

void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknow error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}
				
			

النتائج على شاشة السيريال

عند توصيل الشاشة من دون الحساس ، سوف يظهر عنوان الاتصال للشاشة بالنظام الست عشري، وكما يظهر في الصورة العنوان هو 0x27

عند توصيل الشاشة والحساس سوف يظهر عنوانين اتصال وهما للشاشة والحساس. حيث 0x27 خاص بالشاشة و 0x39 خاص بالحساس.

عند عدم توصيل اي جهاز او وجود سوء في توصيل الاسلاك سوف تظهر الرسالة التالية “عدم إيجاد اي جهاز”

للمعلومية: لا يمكن اخذ قراءات عدة حساسات I2C او تشغيل اجهزة I2C تحمل نفس عنوان الاتصال فـ يوجد حلين غالبا:

1. تغيير عنوان التواصل للجهاز عن طريق وصلة jumper او لحام

2. استخدام I2C multiplexer للاجهزة الغير قابلة لتغيير عنوانها والذي يمكننا من ربط 8 اجهزة تحمل نفس عنوان الاتصال

انتقل إلى المتجر

انتقال إلى الأعلى