توضیح : مبحث SPI هم کارش تقریبا مثل USART هستش فقط یه کم باهاش تفاومت داره>>>هر کدوم از این روش ها کاربرد خاص خودشون رو دارند>>>مثلا برا اتصال SD CARD به میکرو باید از روش SPI استفاده کنید و برا بیشتر ماژول ها از USART >>>در کل هر کدوم جای خودشون کاربرد هایی دارند.
منم اصلا نمیخواستم این مطلب رو بزارم>>>ولی مجبور شدم>>>چون برا کار با LCD گرافیکی های بزرگ >>اگه بخوای توشون تصویر نشون بدی>>>با توجه به این که میکروکنترلر حافظش کم و محدود هستش ما میایم و به میکرو یه SD CARD وصل میکنیم و تصاویر رو در SD CARD ذخیره میکنیم و از این طریق تصاویر رو تو LCD نشون میدیم.
و به احتمال زیاد مطلب بعدی در مورد “آموزش اتصال SD CARD به میکرو” هستش.>>>و مطلب بعدی در مورد LCD گرافیکی های سری توشیا >>> انشاالله.
پایه های ارتباط سریال SPI در AVR
این عکسی که مشاهده میکنید مربوطه به mega16 و اون 4 تا پایه که تو شکل مشخص کردم مربوطه به بحث ارتباط سریال SPI ، در زیر پایه ها رو مختصرا توضیح میدم.
SS : انتخاب SLAVE مورد نظر (با صفر فعال میشه.>>یعنی اگه پایه SS یه SLAVE رو صفر کنی>>به حالت انتخاب در میاد)
MOSI : پایه انتقال اطلاعات از MASTER به SLAVE
MISO : پایه انتقال اطلاعات از SLAVE به MASTER
SCK : خط کلاکی که توسط MASTER ایجاد میشه
توجه : در کد نویسی باید ورودی خروجی بودن این پایه ها رو (مثل بقیه پایه ها) تعیین کنیم.
ورودی خروجی بودن پایه ها باید بر طبق جدول زیر باشد. (اگه 4-5 خط بالا رو بخونید و تصویر زیر رو نگاه کنید و نیم ثانیه فکر کنید >>کار جدول زیر رو میفهمید.)
مقدمه ای در مورد مبحث SPI
مبحث SPI هم زیاد با USART فرق نداره (اه اه اه دماغم چرا داره بزرگ میشه؟؟؟) >>> هر کدوم جای خودشون کار برد هایی دارند.
تو مبحث USART میگفتیم فرستنده گیرنده اما در SPI میگیم Master_slave یعنی :
دستگاهی که فرستنده هستش رو میگن Master و دستگاهی که گیرنده هست رو میگن Slave (نامردا اسم فرستنده گیرنده رو عوض کردن…^_^)
توجه : ما میتونیم با یک master شونصد تا (تعداد زیادی) slave رو کنترل کنیم و بهشون اطلاعات بدیم.
ریجستر های SPI
توجه : اونایی که با رنگ سبز مشخص کردم ، مهم هستن و با بقیه فعلا کاری نداریم.
ریجستر SPCR
بیت0 و 1 : تعیین تقسیم فرکانسی(تعیین فرکانس کاری SPI)>>>در جدول زیر بیت 0 ریجستر SPSR رو هم ابردم(اگه یک بشه>>فکانس دوبرابر میشه)
بیت2 : نمونه برداری از پایه های MOSI و MISO >>>صفر : لبه بالا رونده ___ یک : لبه پایین رونده
بیت3 : وضعیت اولیه پایه ی SCK >>> صفر : پایه SCK صفر میشه ___ یک : پایه SCK یک میشه (البته اینا در صورتی هستن که پالسی ارسال نمیشه)
بیت4 : صفر : انتخاب مد SLAVE __ یک : انتخاب مد MASTER
بیت5 : یک : ابتدا بیت LSB ارسال میشه ___ صفر : ابتدا بیت MSB ارسال میشه
بیت6 : یک : فعال کردن SPI ___ صفر : غیر فعال کردن SPI
بیت7 : فعال شدن وقفه SPI (البته به شرط فعال بودن وقفه همگانی) >>> با یک شدن بیت SPIF واقع در ریجستر SPSR
ریجستر SPSR
بیت 0 : با یک کردن این بیت>>فرکانس SCK در MASTER دو برابر میشه.
بیت 1تا5 : رزرو شده(یعنی شما نمیتونید از این بیت ها استفاده کنید و باید بجاشون صفر قرار بدید.)
بیت 6 : اگه در حین انقال دیتا در ریجستر SPDR ، دیتای جدیدی نوشته بشه>>این بیت یک میشه.
بیت 7 : زمانی که دیتا به طور کامل ارسال شود >> این بیت یک میشه.
ریجستر SPDR
خواندن و نوشتن دیتا توسط این ریجستر انجام میشود.
توجه توجه : عمل دریافت فرستادن اطلاعات(تو کد نویسی منظورمه)با تابع زیر صورت میگیره :
1 |
spi();
|