ايران ويج

نسخه‌ی کامل: ارتباط دو میکرو از طریق spi
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام
لطفا یکی با یک مثال بگه چطوری بین دومیکرو از طریقspi باید ارتباط برقرار کرد؟مطالب فروم رو خوندم ولی زیاد متوجه نشدمConfused
مثلا من میخام یک کلید رو به masterوصل کنم که با زدن اون،یک ledدرslave روشن بشه!دستوراتش چطوریه؟
اول sck ,mosi , miso رو وصل میکنیم (ُssمال استفاده از چند slave هست)
بعد از دستور زیر استفاده میکنیم
کد:
config spi=hard, interrupt=on\off,dataorder=lsb/msb,master =yes/no,polarity=high/low,phase=0/1,clockratr=4/16/64/128,noss=1/0
interrupt:همون طور که از اسمش معلومه برای استفادهاز وقفه spiفعال میشه
data order:برای فرستادن یه دیتا شما میتونی انتخواب کنی که اول lsbرو بفرسته یا msb
master:انتخواب میکنیم میکرو masterهست یا slave
polarity:در ضمان استفاده از مد sleepمثل idleمیتونید پایه کلاک (sck)رو صفر یا یک کنید
phase:گزینه صفر زمان استفاده دیتا تو فاز مثبت وصحیح و گزینه 1فاز ارسال رو معکوس میکنه
clock rate:فرکانس کلاک spiرو مشخص میکنه و گزینه ها در حقیقت ضریب فرکانس کار میکرو هستن
noss :اگر slave یکیه لازم به این گزینه نیست
خوب دستور بالا دستور کامل و مرجع هست ولی اگر میخوای ساده کار کنین میتونین فقط بنویسین
کد:
config spi=hard
برای دریافت دیتا از پروت سریال از دستور
کد:
spiin var , n
تو این دستور میایم میگیم به تعداد n بایت از متغیر varرو دریافت کن کن که مثلا تو متغیرای بایت اگه بخوایم کل متغیرو بفرسته از 8 استفاده میکنیم
برای ارسال هم دستور اینه:
کد:
spiout var,n
اینم دقیقا مثل قبلیه فقط متغیرو ارسال میکنه
حالا اینم یه مدار و برنامه ساده برای spi
[تصویر:  8916e906edd848c3b9fb.bmp]
فرستنده:
کد:
$regfile = "m32def.dat"
$crystal = 1000000
Config Portd = Input
Config Spi = Hard
Dim S1 As Byte
Dim Mehrdad As Bit
Mehrdad = 1
S1 = Pind.2
Do
If S1 = 1 Then
Spiout S1 , 1
End If
Loop
End                                                         'end program
گیرنده:
کد:
$regfile = "m32def.dat"
$crystal = 1000000
Config Portd = Output
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = No , Polarity = High , Phase = 0 , Clockrate = 4 , Noss = 0
Dim Mehrdad As Bit
Do
Spiin Mehrdad , 1
If Mehrdad = 1 Then
Set Portd.2
End If
Loop
End                                                         'end
موفق باشید



مهندس من برنامتو شبیه سازی کردم ولی جواب نمیده!!!!!!!
پورت های مربوطه برای اتصال دو میکرو موقع شبیه سازی خاموشن ووقتی کلید رو میزنی هیچ کاری انجام نمیشه ExclamationWhistle!!!!!!!!!
یعنی هیچ کس دیگه نظری نداره!!!!005044005

ارتباط سريال 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

من چند وقت پیش یه سوال برام پیش اومد فرق spi , ispچیه
عزیزم سرچ کن تا بفهمی هر کدوم مخفف چی هستن !!!
فرقشا بگو
هی نگو سرچ کن
جان هرکی دوست میداری
این پست مارم پاک کن
آی اس پی یه نوع مرکز مخابراتی واسه ارسال و دریافت دیتا هستش.

اس پی آی یه نوع پورتکل واسه ارسال و دریافت دیتا.


مهرداد جون واسه توضیح بیشتر و مفصل، همین کلمه SPI و ISP را توی گوگل همراه با یه کلمه فارسی، سرچ کن، کلی مطلب فارسی با جزییات کامله تخصصی برات میاره.

موفق باشی