همه چیز درباره اتوبوس Arduino I2C

اتوبوس آردوینو I2C

با آردوینو می تواند تعداد زیادی پروژه ایجاد کند همانطور که دیدید اگر Hwlibre را بخوانید ، برنامه نویسی میکروکنترلر به روشی ساده. اما در میان اتصالات آنالوگ و دیجیتال این برد سخت افزاری رایگان ، مواردی وجود دارد که هنوز برای بسیاری از مبتدیان تا حدودی ناشناخته است ، مانند پتانسیل واقعی اتصالات PWM ، SPI ، پین های RX و TX پورت سریال یا اتوبوس I2C خود را داشته باشید. بنابراین ، با این ورودی می توانید حداقل هر آنچه را که از I2C نیاز دارید بدانید.

با اتوبوس I2C می توانید بسیاری از دستگاه های شخص ثالث را که دارای این نوع پروتکل هستند ، برای برقراری ارتباط با برد آردوینو متصل و استفاده کنید. بین آنها ، به لطف این اختراع فیلیپس می توانید شتاب سنج ها ، نمایشگرها ، شمارنده ، قطب نما ها و مدارهای مجتمع دیگر را بهم متصل کنید.

I2C چیست؟

I2C به مدار بین مجتمع اشاره دارد، یعنی مدار بین مجتمع. این یک اتوبوس ارتباط داده ای سریالی است که در سال 1982 توسط شرکت Philips Semiconductors ساخته شده است و امروز پس از خلاص شدن از این بخش ، نیمه هادی های NXP است. در ابتدا برای تلویزیون های این برند ایجاد شده بود تا چندین تراشه داخلی را به روشی ساده برقرار کند. اما از سال 1990 I2C گسترش یافته و توسط بسیاری از تولید کنندگان مورد استفاده قرار می گیرد.

در حال حاضر توسط ده ها سازنده تراشه استفاده می شود برای چندین عملکرد Atmel ، خالق میکروکنترلرها برای تابلوهای آردوینو ، به دلایل صدور مجوز ، نام تجاری TWI (Two Wired Interface) را معرفی کرد ، اگرچه یکسان با I2C است. اما در سال 2006 ، حق ثبت اختراع اصلی منقضی شد و دیگر مشمول حق چاپ نیست ، بنابراین اصطلاح I2C دوباره مورد استفاده قرار گرفته است (فقط از آرم همچنان محافظت می شود ، اما اجرای آن یا استفاده از این واژه محدودیتی ندارد).

جزئیات فنی اتوبوس I2C

اتوبوس I2C

El گذرگاه I2C به یک استاندارد صنعتی تبدیل شده است و آردوینو آن را پیاده سازی کرده است برای برقراری ارتباط با وسایل جانبی مورد نیاز آن. برای کار خود فقط به دو خط یا کابل احتیاج دارد ، یکی برای سیگنال ساعت (CLK) و دیگری برای ارسال داده های سریال (SDA). این در مقایسه با سایر ارتباطات در مقایسه با گذرگاه SPI سودمند است ، اگرچه عملکرد آن به دلیل مدار اضافی مورد نیاز تا حدودی پیچیده تر است.

در این اتوبوس هر دستگاهی که به آن متصل است یک آدرس دارد برای دسترسی جداگانه به این دستگاهها استفاده می شود. این آدرس توسط سخت افزار ثابت می شود ، 3 بیت آخر را با استفاده از جامپر یا تغییر DIP تغییر می دهد ، اگرچه این کار توسط نرم افزار نیز انجام می شود. هر دستگاه آدرس منحصر به فردی خواهد داشت ، اگرچه ممکن است چندین آدرس از آنها آدرس یکسانی داشته باشد و برای جلوگیری از درگیری و یا تغییر آن در صورت امکان لازم است از گذرگاه ثانویه استفاده شود.

علاوه بر این ، گذرگاه I2C دارای یک معماری از نوع Master-Slave ، یعنی بنده ارباب. این بدان معناست که وقتی ارتباطات توسط یک دستگاه اصلی شروع می شود ، قادر به ارسال یا دریافت داده از برده های خود خواهد بود. بردگان قادر به برقراری ارتباط نخواهند بود ، فقط استاد می تواند این کار را انجام دهد و همچنین برده ها نمی توانند بدون دخالت استاد مستقیماً با یکدیگر صحبت کنند.

اگر شما دارید چندین معلم در اتوبوس، فقط یک نفر می تواند همزمان به عنوان معلم عمل کند. اما ارزش آن را ندارد ، زیرا تغییر معلم پیچیدگی زیادی را می طلبد ، بنابراین مکرر نیست.

به خاطر داشته باشید که master سیگنال ساعت را برای همگام سازی تمام دستگاه های موجود در گذرگاه فراهم می کند. این باعث می شود که نیازی نباشد که هر برده ساعت خود را داشته باشد.

پروتکل گذرگاه I2C همچنین استفاده از مقاومت های کششی در خطوط ولتاژ تغذیه (Vcc) را پیش بینی می کند ، اگرچه این مقاومت ها معمولاً با Arduino استفاده نمی شوند pull-up زیرا کتابخانه های برنامه نویسی همانطور که سیم موارد داخلی را با مقادیر 20-30 کیلوگرم فعال می کند. این ممکن است برای برخی از پروژه ها خیلی نرم باشد ، بنابراین لبه های افزایش یافته سیگنال کندتر خواهند بود ، بنابراین می توان از سرعت های پایین تر و فاصله های ارتباطی کوتاه تر استفاده کرد. برای تصحیح اینکه ممکن است لازم باشد مقاومت های کششی خارجی را از 1k به 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.

به یاد داشته باشید که برای استفاده از آن باید از کتابخانه استفاده کنید سیم. ساعت برای کدهای IDE Arduino شما ، اگرچه موارد دیگری نیز وجود دارد I2C y I2Cdevlib. می توانید اسناد این کتابخانه ها یا مقالات ما در مورد پروژه های مورد علاقه خود را بخوانید تا کدهای نحوه برنامه ریزی آن را بدست آورید.

چگونه آدرس دستگاه را بدانیم تا با I2C از آن استفاده کنیم؟

فقط آخرین اخطار ، و آن این است که وقتی IC را از تولیدکنندگان اروپایی ، ژاپنی یا آمریکایی خریداری می کنید ، شما نیز هستید جهت را نشان می دهد شما باید برای دستگاه استفاده کنید از طرف دیگر ، چینی ها بعضی اوقات جزئیات آن را نمی دهند یا درست نیست ، بنابراین کار نمی کند. با استفاده از یک اسکنر آدرس می توان به راحتی این مسئله را حل کرد تا بدانید در طرح خود به کدام سمت مراجعه کنید.

La جامعه arduino این را ایجاد کرده است برای اسکن آدرس و شناسایی آن کد بزنید به روشی ساده اگرچه من همین جا کد را به شما نشان می دهم:

#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 (EU)
  6. حقوق: در هر زمان می توانید اطلاعات خود را محدود ، بازیابی و حذف کنید.