SPI یک پروتکل ارتباطی سریال است که برای ارسال و دریافت داده بین میکروکنترلر و دستگاههای جانبی مانند سنسورها، نمایشگرها، کارتهای حافظه، مبدلهای آنالوگ به دیجیتال (ADC) و فلش مموریها استفاده میشود. این پروتکل به دلیل سرعت بالا، سادگی و کارایی در بسیاری از سیستمهای الکترونیکی استفاده میشود.
SPI از چهار سیم اصلی برای تبادل داده استفاده میکند:
در SPI، دادهها بهصورت همزمان ارسال و دریافت میشوند. یعنی هر بار که یک بیت ارسال میشود، یک بیت هم دریافت میشود، که این ویژگی را ارتباط Full-Duplex مینامند.
در ارتباط SPI، یک دستگاه نقش Master (کنترلکننده اصلی) و یک یا چند دستگاه دیگر نقش Slave (دستگاه جانبی) را دارند.
Master:
Slave:
فرض کنید میکروکنترلر (Master) بخواهد دمای یک سنسور دما (Slave) را بخواند:
اگر یک Master بخواهد به چندین دستگاه Slave متصل شود، برای هر Slave یک SS جداگانه در نظر گرفته میشود. میکروکنترلر هر بار فقط یک دستگاه را فعال میکند، در حالی که بقیه غیرفعال هستند.
مثلاً اگر سه سنسور دما داریم، سه پایه SS1، SS2 و SS3 خواهیم داشت.
digitalWrite(SS1, LOW);
digitalWrite(SS2, LOW);
digitalWrite(SS3, LOW);
در این مثال، یک میکروکنترلر دادهای را از یک سنسور دریافت میکند و نمایش میدهد:
#include <SPI.h>
void setup() {
SPI.begin(); // فعالسازی SPI
pinMode(10, OUTPUT); // پایه SS را خروجی تنظیم میکنیم
}
void loop() {
digitalWrite(10, LOW); // فعال کردن سنسور
byte temperature = SPI.transfer(0x00); // درخواست داده و دریافت مقدار دما
digitalWrite(10, HIGH); // غیرفعال کردن سنسور
Serial.println(temperature); // نمایش مقدار دما
delay(1000);
}
مزایای SPI:
معایب SPI:
SPI یک پروتکل سریع و ساده برای ارتباط بین میکروکنترلر و دستگاههای جانبی است. Master کلاک را تولید میکند و Slaveها منتظر فرمان Master میمانند. با استفاده از چهار سیم SCLK، MOSI، MISO و SS، دادهها بین Master و Slave رد و بدل میشوند. برای مدیریت چندین دستگاه Slave، باید از پایههای SS مجزا استفاده شود.
حق با شماست! پایه ۲۲ در این میکروکنترلر PLMB نیست. اجازه بدهید مجدداً بررسی کنم.
در تصویر دادهشده، پایه ۲۲ با نام TCAP1 مشخص شده است.
پایه TCAP1 معمولاً به عنوان یک ورودی برای واحد تایمر و شمارنده (Timer Capture Input) استفاده میشود. این پایه به میکروکنترلر امکان میدهد تا رویدادهای خارجی را ثبت کند، مثلاً برای اندازهگیری مدتزمان یک پالس ورودی.
✅ در شرایط عادی، این پایه نباید مستقیماً به زمین متصل شود. اگر آن را به زمین متصل کنید، ممکن است عملکرد تایمر را مختل کنید یا مانع از دریافت سیگنالهای خارجی شوید.
پایه ۲۲ (TCAP1) را نباید بدون بررسی مستقیماً به زمین متصل کرد. اگر از آن استفاده نمیکنید، بهتر است با یک مقاومت پولداون (۱۰kΩ) آن را به GND متصل کنید تا نویز کاهش یابد.
بله، پایه ۲۲ (TCAP1) در میکروکنترلر MC68HC705B32 میتواند بهعنوان ورودی استفاده شود، زیرا این پایه مربوط به واحد تایمر/کپچر (Timer Capture Input) است. این واحد برای ثبت لحظه وقوع یک رویداد خارجی روی این پایه بهکار میرود.
✅ بله، میتوان یک کلید را به این پایه متصل کرد، اما باید نکات زیر رعایت شود:
استفاده از مقاومت پولآپ یا پولداون:
حفاظت در برابر نویز:
تنظیم پایه در نرمافزار:
اگر بخواهید وقتی کلید فشرده شد مقدار LOW خوانده شود، مدار زیر را ببندید:
VCC (5V)
|
| (10kΩ Pull-up Resistor)
|
TCAP1 -----> کلید -----> GND
void setup() {
pinMode(22, INPUT_PULLUP); // تنظیم پایه 22 بهعنوان ورودی با مقاومت داخلی پولآپ
}
void loop() {
if (digitalRead(22) == LOW) { // اگر کلید فشرده شد
Serial.println("Button Pressed!");
}
delay(100);
}
بله، میتوان از پایه ۲۲ (TCAP1) بهعنوان ورودی برای اتصال یک کلید استفاده کرد. اما باید از یک مقاومت پولآپ یا پولداون برای عملکرد صحیح و جلوگیری از نویز استفاده شود.
✅ دقیقاً! هنگامی که پایه ۲۲ (TCAP1) در مد تایمر کپچر استفاده میشود، نباید مستقیماً به زمین (GND) یا تغذیه (VCC) متصل شود. بلکه همیشه یک مقاومت بین این پایه و زمین یا تغذیه قرار میگیرد.
هنگامی که پایه ۲۲ (TCAP1) در مد تایمر کپچر استفاده میشود: