Aduino Tutorial آموزش آردوینو

آردوینو (قسمت هفتم) – I2C & Processing

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

            I2C یک پروتکل (موافقت نامه) سریال برای ارسال و دریافت داده با دو سیم بین دستگاه هایی با سرعت پایین می باشد. یک پین ساعت یا Clock  می باشد(SCL). و یک پین هم برای ارسال و دریافت “داده” می باشد(SDA). I2C به صورت Master و Slave می باشد. با لبه ی بالا رونده ی کلاک بیت ها ارسال می شود. اولین بیت ها برای آدرس است. و یک تک بیت برای تعیین نوشتن یا خواندن می باشد. در ادامه اطلاعات ارسال یا دریافت می شود. در آخر ارسال هر سری بیت یک تک بیت به عنوان تایید (knowledge) فرستاده می شود. داده ها به صورت بایت ارسال می شود.

            وقتی که چند عدد Master و Slave داریم، دو سیم مربوط به I2C را Pullup می کنیم. که اگر دو Slave با هم اطلاعات فرستادن اتصال کوتاه نشود.

طریقه کار I2C هنگام نوشتن:

  1. آدرس Slave را ارسال می کنیم با تک بیت نوشتن.
  2. آدرس خانه ای از حافظه ی Slave را که می خواهیم در آن بنویسیم را می فرستیم.
  3. داده ای که قرار است ذخیره شود را می فرستیم.
Write byte I2C

Write byte I2C

طریقه کار I2C هنگام خواندن:

طریقه ی خواندن کمی پیچیده است.

  1. آدرس Slave را ارسال می کنیم با تک بیت نوشتن.
  2. آدرس حافظه ای که می خواهیم بخوانیم را ارسال می کنیم.
  3. آدرس Slave را دوباره ارسال می کنیم، این دفعه با تک بیت خواندن.
  4. داده ای را که از Slave ارسال می شود را می خوانیم.
Read Byte I2C

Read Byte I2C

            در آردوینو لازم نیست که تک بیت های خواندن و نوشتن را دستی وارد کنیم. ولی طریقه ی کلی خواندن و نوشتن با I2C را توضیح دادیم تا ترتیب نوشتن برنامه را بدانیم.

پین های SDA و SCL در برهای آردوینو:

Board I2C pins
Uno, Ethernet A4 (SDA), A5 (SCL)
Mega2560 20 (SDA), 21 (SCL)
Leonardo 2 (SDA), 3 (SCL)
Due 20 (SDA), 21 (SCL), SDA1, SCL1

شروع کار با I2C:

          برای استفاده از I2C ابتدا باید کتابخانه ی آن را فراخوانی کنیم.

#include <Wire.h>

            بعد برای شروع اتصال به گذرگاه I2C به عنوان Master در قسمت Void برنامه ()Wire.begin را وارد می کنیم.

;Wire.beginTransmission(address)

            با این دستور آدرس Slave ی که قرار است با آن اطلاعات ردوبدل شود را مشخص می کنیم. این آدرس 7 بیتی می باشد.

;()Wire.endTransmission

در فیلم از دستور Wire.send استفاده می کند که در ورژن های جدید نرم افزار آردوینو این دستور با دستور Write جایگزین شده است.

این دستور برای نوشتن یک داده در Slave می باشد.

;()Wire.endTransmission

این دستور به انتقال داده به Slave پایان میدهد و بایت هایی را که توسط دستور Write در صف بودن را انتقال می دهد.

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

;Wire.requestFrom(address,num)

این دستور توسط Master استفاده می شود برای گرفتن “داده” از Slave .

آدرس Slave را وارد می کنیم و تعداد بایت از داده ای که می خواهیم.

;()Wire.available

تعداد بایتهایی که قابل خواندن هستن را بر می گرداند.

;()Wire.read

بایتی که توسط دستور requestFrom توسط Master از Slave در خواست شده بود و انتقال داده شده، را می خواند.

I2C Read

I2C Read

در ادامه می توانید فیلم آموزشی را مشاهده کنید:

 

 

 

دیدگاه ها :

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد.