راه اندازی spi در آردوینو – آموزش آردوینو جلسه یازدهم

در این جلسه قصد داریم با راه اندازی spi در آردوینو آشنا بشیم.

واسط برنامه ریزی سریال که به اختصار بهش میگن spi  .پروتکلی برای ارتباط داده ی سریال با سرعت زیاد برای مسافت های کمه . با این پروتکل میشه وسایل جانبی یا ارتباط با میکروی دیگه ای رو صورت داد .توی ارتباط سریال همیشه یک فرمانده وجود داره (master) و یک فرمانگیر (slave) که معمولا قطعه جانبی هستش.به طور معمول این ارتباط 4 سیمه هستش و با 4 پایه ی زیر میشه این ارتباط رو برقرار کرد.

پایه های : MISO , MOSI , SCK , SS

Master In Slave Out(miso)
این پایه برای ارسال داده ی فرمان گیر به فرمانده به کار میره.

Master Out Slave in(mosi)
این پایه هم برای ارسال داده از فرمانده به فرمان گیر به کار میره.

Serial clock(sck)
این پایه با پالس ساعتی ایجاد میکنه که ارسال داده از سمت فرمانده رو با فرمانگیر (اسلیو) همزمان میکنه.

Slave Select (ss)
این پایه روی هر فرمانگیری وجود داره و فرمانده هر فرمان گیری رو که انتخاب کنه ، این پایه رو پایین میکشه(صفر میکنه)،این پایه وقتی بالا باشه(یک منطقی باشه) فرمانگیر داده ای از فرمانده دریافت نمیکنه.یعنی اگر اطلاعاتی قراره به یک میکرو ارسال بشه باید پایه ی SS اون صفر بشه تا ارتباط برقرار بشه.

راه اندازی spi در آردوینو راه اندازی spi در آردوینو

تابع های spi در آردوینو

تابع SPI.begin

برای شروع و معرفی راه اندازی spi در آردوینو باید به میکرو بگیم میخوایم از SPI استفاده کنیم ، برای این کار باید  بعد از معرفی کتابخانه با کد

از SPI.begin توی حلقه setup استفاده کنیم.(مثل ارتباط سریال که معرفیش میکردیم)

این تابع باعث میشه سه پایه ی MISO , MOSI , SCK بعنوان spi تعریف بشن ، پایه ی SS رو هم خودمون باید برای هر قطعه یا سنسوری که به آردوینو وصل میشه خروجی تعریف کنیم.(مثلا 2 تا سنسور نیاز به تعریف کردن 2 پایه ی SS دارن که توی تصویر بالا هم مشخصه)

پایه ی ss رو باید بصورت خروجی تعریف کنید، در غیر اینصورت تابه های کتابخانه عمل نمیکنن! پس مهمه و فراموش نکنید .

برای نوشتن برنامه ی SPI ابتدا باید بدونیم که:

1- در راه اندازی spi در آردوینو میخوایم اول با ارزش ترین بیت (MSB) فرستاده بشه یا کم ارزش ترین (LSB) ؟

خب بعد اینکه تصممیم گرفتین باید از تابع زیر استفاده کنید تا میکرو هم از تصمیم شما باخبر بشه 😀

تابع SPI.setBitOrder

این تابع 2 نوع متغیر ورودی رو قبول میکنه :

LSBFIRST: کم ارزشترین بیت اول منتقل میشه
MSBFIRST: با ارزش ترین بیت اول منتقل میشه

2- دوم باید بدونیم که میخوایم در لبه ی بالا رونده  نمونه برداری بشه یا توی لبه پایین رونده؟ این ویژگی هم با تابع SPI.setDataMode تنظیم میشه.

تابع SPI.setDataMode

متغیرهای ورودی این تابع هم اینان:

3- آخر هم اینکه سرعت تبادل داده چقدر باشه؟ اینو هم میشه با تابع SPI.setClockDivider تعیین کنیم.

تابع SPI.setClockDivider

که ورودی اون یک مقسم فرکانسی از فرکانس cpu هستش و با نسبت های 2 و 4 و 8 و 16 و 32 و 64 و 128 تقسیم میشه.(فرکانس cpu میدونیم که 16مگاهرتزه در Uno و مدل های دارای میکروی AVR)
و کدهای ورودی های تابع هم برابر زیره:

تابع SPI.Settings

spi در آردوینو یک تابع هم داره که مجموعه ی 3 تابع های گفته شده ی بالاست ، به اسم Settings و به شکل زیر تعریف میشه:

خب حالا تنظیم کردن و روش ارتباط رو گفتیم در spi و نوبت به تابع های ارسال و دریافت دیتا میرسه.

تابع SPI.transfer

تابع های transfer ، 3 روش برای نوشتن داره :

 

مقدار val مقداریه که قراره ارسال بشه. این مقدار 8 بیتی یا یک بایتی باید باشه.
برای دریافت اطلاعات با این تابع ، باید متغیری که جهت ذخیره استفاده میشه ، متغیری 8 بیتی یا یک بایتی باشه.

تابع SPI.transfer16

 

مقدار val16 مقداریه که قراره از طرف آردوینو ارسال بشه. این مقدار 16 بیتی یا دو  بایتی باید باشه.
برای دریافت اطلاعات با این تابع ، باید متغیری که جهت ذخیره استفاده میشه ، متغیری 16 بیتی یا دو بایتی باشه.

تابع SPI.transfer

 

و در این تابع buffer یک مقدار آرایه ای هست که به اندازه size خانه های این آرایه رو ارسال میکنه.

برای دریافت اطلاعات هم باید ، یک آرایه ایجاد بشه و در اون اطلاعات ذخیره بشه.

برای استفاده از این تابع ها حتما حواستون جمه باشه که قبلش باید پایه ی SS تابع مورد نظرتون رو صفر کنید تا اطلاعاتی که فرستاده میشه به اون قطعه مورد نظرتون انتصاب پیدا کنه و بعد از ارسال دیتا هم باید پایه ی SS رو یک کنید تا ارسال/دریافت اطلاعات به اون قطعه خاتمه پیدا کنه.

تابع SPI.end

تابع SPI.end نیز تبادل داده ی SPI را پایان میدهد. یعنی اینکه اون 3 تا پایه ای که برای SPI تعریف شدن به حالت ورودی و خروجی که خاصیت قبلیشون بود برمیگردن.

پروژه ها:

راه اندازی شیلد شبکه Ethernet w5100 با آردوینو

گزینه های بیشتر به زودی اضافه میشه..

حمیدرضا مودت

یک مهندس الکترونیک ، علاقه مند به یاد دادن و یاد گرفتن پیرامون دانش برق و الکترونیک

شما ممکن است این را هم بپسندید

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *