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

آردوینو (قسمت هشتم) – SPI

            SPI و دستورات آن از مواری است که در قسمت به آن پرداخته می شود. همچنین یک پروژه را با هم انجام می دهیم تا بهتر با این دستورات آشنا شویم.

            SPI (Serial Peripheral Interface) یک پروتکل همزمان برای ارتباط به صورت سریال است که معمولا بین میکروکنترلرها و لوازم جانبی کوچک مانند سنسور ها و کارتهای SD استفاده می شود. این روش برای مسافت های کوتاه کار آمد می باشد. در ارتباط SPI همیشه یک Master وجود دارد. این نوع ارتباط برای ارسال و دریافت اطلاعات هر کدام یک خط استفاده می کند.همچنین برای ساعت و انتخاب دستگاهی که می خواهد با آن تبادل داده کند نیز، هر کدام یک خط را استفاده می کند.

SPI Protocol

  • MISO (Master In Slave Out) – خط ارسال داده از Slave به Master .     
  • MOSI (Master Out Slave In) – خط ارسال داده از Master به Slave ها.
  • SCK (Serial Clock) – دستگاه Master روی این خط پالس ساعتی ایجاد می کند برای اینکه داده ها با نظم این پالس ها ارسال شوند.
  • SS (Slave Select) – این پین رو هر دستگاهی که به عنوان Slave به کار گرفته شده است می باشد. Master از طریق این پین Slave  مورد نظرش را فعال یا غیر فعال می کند.

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

چند نکته را باید در ارتباط از طریق SPI مد نظر داشت:

  1. سرعت انتقال داده چقدر باید باشد؟ آردوینو خود به طور اتوماتیک سرعت را تنظیم می کند. ما هر سرعتی را بدهیم آردوینو مساوی یا کمتر از آن سرعت را در نظر می گیرد.
  2. دومین چیزی که می توان تنظیم کرد این که بیتهای با ارزش(MSB) اول فرستاده بشوند یا کم ارزش(LSB). بیشتر دستگاه های دارای SPI اول بیت با ارزش را می فرستند.
  3. تنظیم هماهنگی ارسال داده با کلاک. در این تنظیم شما تعیین می کنید که با لبه ی پایین رونده داده ها ارسال شوند یا بالا رونده. در کل چهار روش داریم که در جدول زیر آمده است:
Mode Clock Polarity (CPOL) Clock Phase (CPHA) Output Edge Data Capture
SPI_MODE0 0 0 Falling Rising
SPI_MODE1 0 1 Rising Falling
SPI_MODE2 1 0 Rising Falling
SPI_MODE3 1 1 Falling Rising

SPISetting

            برای تنظیم این سه موردی که گفته شد از SPISetting استفاده می شود. این گزینه به این صورت مورد استفاده قرار می گیرد.

SPI.beginTransaction(SPISetting(14000000,MSBFIRST,SPI_MODE0))

یا

SPISetting mySetting(speedMaximum, dataOrder,dataMode)

که mySetting را می توان در دل SPI.beginTransaction استفاده کرد.

پین های مربوط به SPI  در بردهای مختلف آردوینو:

Arduino / Genuino Board MOSI MISO SCK SS (slave) SS (master) Level
Uno or Duemilanove 11 or ICSP-4 12 or ICSP-1 13 or ICSP-3 10 5V
Mega1280 or Mega2560 51 or ICSP-4 50 or ICSP-1 52 or ICSP-3 53 5V
Leonardo ICSP-4 ICSP-1 ICSP-3 5V
Due ICSP-4 ICSP-1 ICSP-3 4, 10, 52 3,3V
Zero ICSP-4 ICSP-1 ICSP-3 3,3V
101 11 or ICSP-4 12 or ICSP-1 13 or ICSP-3 10 10 3,3V
MKR1000 8 10 9 3,3V

 

()SPI.begin

برای شروع کار در اول برنامه از این دستور استفاده می کنیم. تا پین های مربوط به SPI به وضعیت مورد نظر در بیایند.

()SPI.end

برای پایان دادن به ارتباط SPI  از این دستور استفاده می شود.

()beginTransaction

برای اعمال تنظیمات ما از این دستور استفاده می شود.

()SPI.trasfer

این دستور هم برای ارسال و هم برای دریافت داده بکار می رود.

 

SPI.trasfer(Value)

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

 

Value=SPI.transfer(val)

برای دریافت به این شکل نوسته می شود. val شماره ی بایتی است که می خواهیم. اگر صفر بگذاریم یعنی اولین بایت را لازم داریم.

 

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

 

 

دیدگاه ها :

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

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