ارتباط سریال SPI
ارتباط SPI ارتباطی که مانند Uart در دو حالت سخت افزاری یا نرم افزاری قابل دسترسی است. ارتباط با پروتکل سریال – پرسرعت – سه سیمه که برای عملیات هایی همچون پروگرام و برنامه ریزی کردن حافظه های Flash و Eeprom و یا ارتباط با یک میکرو کنترلر دیگر به صورت Master – Slave مورد استفاده قرار می گیرد. پین های مورد استفاده برای این ارتباط به صورت زیر است:
Master در حقیقت سیم اصلی بئده و slave سیستم پیرو در صورتی که از چند سیستم پیرو استفاده شود. با استفاده از پایه ss سیستم مورد نظر را انتخاب می کنند.
پیکربندی spi سخت افزاری در زبان بیسیک BASIC
1 2 3 |
Config Spi = Hard,Interrupt= On|Off , Data Order = Lsb|Msb ,_ Master – Yes|No , Polarity = High|Low , Phase = 0|1 , _ Clockrate = 4|16|64|128 , Noss = 1|0 |
این ارتباط سخت افزاری بوده و پایه های نام برده مورد نیاز هستند.
Interrupt : همانطور که از نامش پیداست برای استفاده از وقفه SPI فعال می شود.
Data order : برای فرستادن یک دیتا, شما می توانید انتخاب کنید که اول LSB فرستاده شود یا MSB.
Master : نوع میکرو را انتخاب می کند. Yes برای Master و گزینه No برای Slave .
Polarity : در زمان استفاده از مد Sleep مانند Idle , می توان پایه کلاک ( Sck ) را یک یا صفر در نظر گرفت.
Phase : گزینه صفر زمان استفاده دیتا در فاز مثبت و صحیح و گزینه 1 فاز ارسال را معکوس می کند.
Clockrate : فرکانس کلاک Spi را مشخص می کند و گزینه ها در حقیقت ضریب فرکانس کار میکرو می باشد.
Noss : تعیین کننده پایه SS بوده و در صورت استفاده از یک سیستم Slave دیگر نیازی به این پایه نیست و می توان پایه SS سیستم Slave را صفر کرد.
نکته : در حالت پیش فرض دیتا به صورت MSB فرستاده شده و کلاک در مد Idle یک است و سیستم Master و با فاز مثبت و فرکانس کار میکرو تقسیم بر 4 شده و کلاک SPI تعیید می شود. پس این سیستم را می توان به صورت زیر نوشت:
1 |
Config Spi = Hard |
پیکربندی spi نرم افزاری در زبان بیسیک BASIC
1 |
Config Spi = Soft , Din = Pin , Dout = pin , SS = pin|None , Clock = Pin |
در این نوع پیکربندی در هنگام برنامه نویسی تنها پایه های ارتباط تعیین می شود. تنها گزینه پایه SS را می توان در دو حالت تعیین پایه و یا غیر فعال (None) انتخاب کرد.
نکته : در صورت غیر فعال کردن پایه SS در سیستم Slave باید پایه SS را زمین کنید.
دریافت دیتا از پورت سریال SPI در زبان بیسیک BASIC
1 |
Spin var , n |
با این دستور شما می توانید از پورت سریال به تعداد n بایت داده دریافت و در متغیر var قرار دهید.
ارسال دیتا به پورت سریال SPI در زبان بیسیک BASIC
1 |
Spiout var , n |
با این دستور شما می توانید به پورت سریال به تعداد n بایت داده قرار گرفته در var را ارسال کنید.
ارسال و دریافت همزمان دیتا در پورت سریال spi
1 |
Var1 = Spimove(var 2) |
با این دستور شما می توانید به طور همزمان به پورت سریال متغیر var2 را فرستاده و داده گرفته شده را در متغیر var1 قرار داد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$regfile = "m48def.dat" $crystal = 8000000 Config spi = soft , din = pinb.0, dout = portb.1,ss = portb.2,_ Clock = portb.3 Dim var as byte Dim b as byte Dim a (10 ) as byte B = 5 A (2) = 40 Spiout a (1) , b Spin a (a) , b A (1) = spimove (a(2)) End |
سلام دوستان من برای اولین بار از مد SPI دارم کار می کنم . همه چی رو هم خوندم
ارتباط رو هم برقرار کردم . مشکل من اینجاست که master عدد یک رو به slave
میفرسته و اون بعد از دریافت اگه شرط برابر یک بود کاری رو انجام بده .
ولی کار نکرد . بعد اون متغییری رو که master داره میفرسته رو روی lcd
نمایش دادم دیدم عدد 128 رو میفرسته !!!
الان خواستم بدونم که چرا عدد 128 فرستاده میشه به جای یک؟؟؟؟
سلام دوست عزیز، لطفا برنامه ای که استفاده می کنید را در انجمن سایت درج کنید و مشکل خودتان رو هم در اونجا مطرح کنید تا به کمک هم به جواب برسیم.
سلام وقت بخیر
من اولین بار هست که میخوام از spi استفاده کنم ممنون میشم راهنماییم کنید چطور برنامه master و slave رو در بسکام بنویسم