امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
ارتباط دو میکرو از طریق spi
نویسنده پیام
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #5
RE: ارتباط دو میکرو از طریق spi

ارتباط سريال SPI


ويژگي هاي اين ارتباط را در زير مشاهده ميکنيد:

1- ارتباط سريال سنکرون با سرعت بالا

2- از اين ارتباط ميتوان براي اتصال ميکرو هاي avr به يکديگر يا اتصال ميکرو به هر وسيله اي که اين ارتباط را پشتيباني مي کند استفاده کرد

3- ارسال و دريافت داده هم زمان

4- استفاده از 4 سيم براي انتقال اطلاعات

5- قابليت تنظيم سرعت انتقال ديتا

6- داراي منبع وقفه پايان ارسال

7- حداکثر طول کابل ارتباطي بدون سيم شيلد در يک منطقه با نويز متوسط پنجاه سانتي متر است

8- ارتباط به صورت هاي مستر يا اسليو

9- نياز به سيم گراند براي ارتباط

در اين ارتباط از چهار پايه mosi و miso و sck و ss استفاده مي شود که در ميکرو مگا 16 به ترتيب پايه 5 تا 8 ميباشد (از portb.4 تا portb.7 ).

در زير نحوه پيکر بندي spi در بسکام امده است:

دستورپيکره بندي SPI :

کد php:
Config Spi Hard,Interrupt=On/Off,Data Order Lsb/Msb,Master Yes/No,Polarity=High/Low,Phase=0/1,Clock Rate=4/16/64/128,Noss=0/

INTERRUPT=ON/OFF : در صورت استفاده از وقفه در ارتباط سريال از گزينه ON استفاده مي شود ، در اين حالت تنها زماني که داده اي ميخواهد منتقل شود ميکرو کار ميکند .

DATA ORDER = LSB/MSB: در صورت انتخاب LSB ، ابتدا LSB (بيت کم ارزش ) و سپس MSB(بيت پرارزش) داده ارسال مي شود و بالعکس.

MASTER = YES/NO: اين گزينه مشخص ميکن ميکرو master ( فرمانده) است يا slave (فرمانبردار) گه گزينه yes مشخص کننده ميکرو مستر و گزينه no مشخص کننده ميکرو اسليو است.

POLARITY=HIGH/LOW : اين گزينه و ضعيت پايه کلاک را در زمان بيکاري ميکرو مشخص ميکن که ميتواند صفر (low ) يا يک ( high) باشد .

CLOCK RATE=4/16/64/128: مشخص کننده فرکانس کلاک SPIاست .

NOSS=0/1: زماني که در حالتMASTER نمي خواهيد سيگنال /SS ايجاد شود، يک انتخاب مي شود ودر اين حالت کاربر به صورت نرم افزاري بايد پايه SLAVE مورد نظر را پايين نگه دارد.

در حالت بالا از پايه هاي پيشفرض براي انتقال ديتا استفاده مي شود ، در صورتي که ميخ.اهيد آنها را به پيه هاي ديگر تغيير دهيد بايد از دستور زير استفاده کنيد:

کد php:
CONFIG SPI=SOFTDIN=PINDOUT PIN SS PIN|NONECLOCK PIN 

DIN=PIN :نشانگر پايه MISO است و پين نام پايه دل خواه ميباشد.

DOUT = PIN : نشانگر پايه MOSI است و پين نام پايه دل خواه ميباشد.

SS = PIN|NONE نشانگر پايه SS است و پين نام پايه دلخواه ميباشد. ( در صورتي از گزينه NONE استفاده کنيد پايه تغيير نميکند

CLOCK = PIN : نشانگر پايه SCK است و پين نام پايه دلخواه ميباشد.

مانند:

کد php:
CONFIG SPI=SOFTDIN=PIND.0DOUT PIND.1 SS PIND.2CLOCK PIND.3 

ديگر دستورات مربوط به SPI :

کد php:
SPIINIT 

SPIINIT توسط اين دستور پايه هاي که براي SPI (mosi و miso و sck و ss (در ميکرو مگا 16 به ترتيب پايه 5 تا 8 ميباشد (ازportb.4 تا portb.7 ))).استفاده ميشوند ، براي اين مد فعال مي گردند و ديگر نميتوان از آنها به عنوان ورودي يا خروجي استفاده کرد.

کد php:
SPIIN VAR,BAYT 

توسط اين دستور به تعداد BAYT از درگاه SPI اطلاعات دريافت مي شود و در متغيير VAR قرار ميگيرد ، در صورتي که متغير شما از جنس WORD يا ديگر متغيير ها است ، شما بايد تعداد بايت متغيير را به جاي BAYT بنويسيد .

مانند:

کد php:
'MASTER
$regfile = "m16def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Pind.2 , Db5 = Pind.3 , Db6 = Pind.4 , Db7 = Pind.5 , Rs = Pind.0 , E = Pind.1
Config Lcd = 16 * 2
Dim A As Byte
Config Spi = Hard , Interrupt = On , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 128
Spiinit
Do
Spiin A , 1
Locate 1 , 1
Lcd A
Loop
End 


کد php:
SPIOUT VAR , BAYT 

توسط اين دستور به تعداد BAYT، داده VAR به درگاه SPI اطلاعات ارسال مي شود ، در صورتي که متغير شما از جنس WORD يا ديگر متغيير ها است ، شما بايد تعداد بايت متغيير را به جاي BAYT بنويسيد.

مانند:

کد php:
'SLAVE
$regfile = "m16def.dat"
$crystal = 8000000
Dim A As Word
Config Spi = Hard , Interrupt = On , Data Order = Lsb , Master = No , Polarity = High , Phase = 0 , Clockrate = 128
Spiinit
Do
Incr A
Waitms 300
Spiout A , 1
Loop
End 

هر دو مثال بالا مربوط به ارتباط SPI بين دو ميگرو مگا 16 است که مدار آن را در زير مشاهده ميفرماييد:

[تصویر:  6bccb8d54ebf46bc85b1.PNG]


کد php:
VAR=SPIMOVE(BAYT

از اين دستور در زمان ارتباط دوطرفه استفاده مي شود ، توسط اين دستور متغيير BAYT به باس SPI ارسال شده و همزمان داده دريافت شده از باس در متغير VAR قرار ميگيرد.
مثال:

برنامه SLAVE:

کد php:
$regfile "m16def.dat"$crystal 8000000
Dim A 
As Byte,As Byte
Config Lcdpin 
Pin Db4 Pind.2 Db5 Pind.3 Db6 Pind.4 Db7 Pind.5 Rs Pind.0 Pind.1
Config Lcd 
16 2
Config Spi 
Hard Interrupt On Data Order Lsb Master No Polarity High Phase Clockrate 128
Spiinit
Do
Spimove(a)
2
Locate 1 
:Lcd "Spiout:"A
Locate 2 
1Lcd "SPIIN:" B
Waitms 300
Loop
End 

برنامه MASTER :

کد php:
$regfile "m16def.dat"$crystal 8000000
Dim A 
As Byte,As Byte
Config Lcdpin 
Pin Db4 Pind.2 Db5 Pind.3 Db6 Pind.4 Db7 Pind.5 Rs Pind.0 Pind.1
Config Lcd 
16 2
Config Spi 
Hard Interrupt On Data Order Lsb Master Yes Polarity High Phase Clockrate 128
Spiinit
Do
Spimove(a)
Incr A
Locate 1 
1Lcd "Spiout:"A
Locate 2 
:Lcd "SPIIN:" B
Waitms 300
Loop
End 

[تصویر:  ac978aa2c4f6462ebe1f.PNG]


مثال:
در اين مثال پايه هاي مربوط به ارتباط SPI تغيير کرده اند ، شما ميتوانيد آنها را به حالت پيش فرض برگردانيد:

برنامه SLAVE :

کد php:
$regfile "m16def.dat":$crystal 8000000
Dim A 
As Byte,As Byte
Config Lcdpin 
Pin Db4 Pind.2 Db5 Pind.3 Db6 Pind.4 Db7 Pind.5 Rs Pind.0 Pind.1
Config Lcd 
16 2
Config Spi 
Soft Din Pina.0 Dout Pina.1 Ss Pina.2 Clock Pina.3
Spiinit
Do
Spimove(a)
2
Locate 1 
1Lcd "Spiout:"A
Locate 2 
1Lcd "SPIIN:" B
Waitms 300
Loop
End
[/quote]

برنامه  MASTER :

[
quote]
$regfile "m16def.dat":$crystal 8000000
Dim A 
As Byte,As Byte
Config Lcdpin 
Pin Db4 Pind.2 Db5 Pind.3 Db6 Pind.4 Db7 Pind.5 Rs Pind.0 Pind.1
Config Lcd 
16 2
Config Spi 
Soft Din Pina.0 Dout Pina.1 Ss Pina.2 Clock Pina.3
Spiinit
Do
Spimove(a)
Incr A
Locate 1 
1Lcd "Spiout:"A
Locate 2 
1Lcd "SPIIN:" B
Waitms 300
Loop
End 

مدار مورد استفاده:

[تصویر:  7ca6be419c8c44e4b707.PNG]

منبع : http://www.iranled.com/forum/showthread.php?tid=10869

۰۲-مهر-۱۳۸۹, ۰۱:۳۸:۳۹
ارسال‌ها
پاسخ
تشکر شده توسط : رسول, reza555, sharin, ali173


پیام‌های داخل این موضوع
ارتباط دو میکرو از طریق spi - توسط belanko - ۲۳-شهریور-۱۳۸۹, ۱۷:۵۹:۵۵,
RE: ارتباط دو میکرو از طریق spi - توسط WhiteNoise - ۲۴-شهریور-۱۳۸۹, ۲۰:۱۶:۲۵,
RE: ارتباط دو میکرو از طریق spi - توسط belanko - ۲۵-شهریور-۱۳۸۹, ۱۸:۱۳:۰۴,
RE: ارتباط دو میکرو از طریق spi - توسط belanko - ۲۶-شهریور-۱۳۸۹, ۱۱:۲۸:۲۴,
RE: ارتباط دو میکرو از طریق spi - توسط t3r!p3000 - ۰۲-مهر-۱۳۸۹, ۰۱:۳۸:۳۹
RE: ارتباط دو میکرو از طریق spi - توسط WhiteNoise - ۱۸-مهر-۱۳۸۹, ۱۵:۱۷:۰۳,
RE: ارتباط دو میکرو از طریق spi - توسط t3r!p3000 - ۱۸-مهر-۱۳۸۹, ۱۶:۴۱:۵۹,
RE: ارتباط دو میکرو از طریق spi - توسط WhiteNoise - ۱۸-مهر-۱۳۸۹, ۱۶:۴۴:۲۵,
RE: ارتباط دو میکرو از طریق spi - توسط mahdi20 - ۱۸-مهر-۱۳۸۹, ۲۲:۵۷:۵۵,

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  ارتباط میکرو با plc از طریق شبکه profibus nex2004 11 14,656 ۰۱-بهمن-۱۳۹۸, ۱۱:۰۰:۱۹
آخرین ارسال: d.hamidi2535
  استفاده از SIM900 برای انتقال دیتا از طریق GPRS amirtebyan 12 12,379 ۳۰-آذر-۱۳۹۸, ۱۰:۵۶:۳۷
آخرین ارسال: hadikh73
  برنامه راه اندازی رله از طریق پورت شبکه (enc28j60) haisam 15 14,252 ۲۰-آبان-۱۳۹۷, ۰۹:۵۲:۵۹
آخرین ارسال: ali3000aab
Exclamation ارتباط سريال بين دو ميكرو و نمايش روي lcd با codevision ali313 13 28,959 ۰۱-شهریور-۱۳۹۷, ۱۱:۰۸:۴۳
آخرین ارسال: farhadtavakkol
  انتقال داده از طریق اترنت (Network) iman-63 36 33,755 ۲۰-آذر-۱۳۹۶, ۲۰:۲۹:۳۱
آخرین ارسال: اکبرو
  مشکل در ارتباط بیسیم با پروتکل USART cortex-m3 5 6,012 ۰۷-آبان-۱۳۹۵, ۰۰:۱۷:۳۶
آخرین ارسال: milad15m
  هنگ کردن میکرو در ارتباط سریال nex 1 2,890 ۰۴-آبان-۱۳۹۵, ۲۰:۵۶:۵۹
آخرین ارسال: علی محد شریفی
  ارتباط avr با plc از طریق profibus nex2004 5 7,429 ۰۳-مهر-۱۳۹۵, ۰۳:۱۶:۰۸
آخرین ارسال: jalil2008
  ارتباط دو طرفه با فرستنده nrf24 sniper-70 0 2,426 ۰۹-شهریور-۱۳۹۵, ۲۲:۱۶:۴۸
آخرین ارسال: sniper-70
  تست میکرو saber.k 10 14,048 ۰۹-شهریور-۱۳۹۵, ۰۲:۰۹:۲۷
آخرین ارسال: yadulla fazel

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع:

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS