
نوشته اصلی توسط
moradikh1 مهمان عزیز شما حق دیدن لینک ها را ندارید
عضویت
سلام دوستان <br>این سئوالی که می پرسم خیلی دنبالش گشتم ولی به نتیجه درستی نرسیدم اگه ممکنه کمکم کنید<br>من دو تا میکرو atmega64 و atmega8 رو با هم بوسیله spi متصل کردم که atmega 64 بعنوان master و میکرو atmega8 بعنوان slave هستند الان برای ارسال داده از master به slave بدینصورت هست که master دیتا رو ارسال میکنه و slave هم با استفاده از وقفه متوجه میشه و دیتا رو دریافت میکنه تا اینجا مشکلی ندارم و درست عمل میکنه مشکل زمانی ایجاد میشه که slave میخواد جواب master رو بده حالا من با spiout (date , lengh) برای اسلیو میفرستم و سپس جواب اسلیو هم با دستور spiout (date , lengh) ارسال میکنه و با destindata = spimove(orginaldate , lengh) سعی میکنم دیتا رو دریافت کنم ولی نمیشه <img src="https://www.eca.ir/forums/images/smilies/P-NEW/various_058.gif" alt="" title="Various 058" smilieid="245" class="inlineimg" border="0"><img src="https://www.eca.ir/forums/images/smilies/P-NEW/various_058.gif" alt="" title="Various 058" smilieid="245" class="inlineimg" border="0"><img src="https://www.eca.ir/forums/images/smilies/P-NEW/various_058.gif" alt="" title="Various 058" smilieid="245" class="inlineimg" border="0"> حالا کسی میتونه کمکم کنه ایراد از کجاست؟<br><br>کد مستر<br><div style="text-align: left;"><hr><p>
کد:
Enable Interrupts<br>Config Spi = Hard , Interrupt = Off , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 128 , Noss = 0<br>Spiinit<br>Dim Send_spi_to_8 As String * 20<br>Dim Rs_spi_from_8 As String * 20<br>dim Reply as string*20<br>Do<br> If Stat_tst <> 0 Then<br> Call Replay_tst(stat_tst)<br> Stat_tst=0<br> End If<br>Loop<br>'*********************************************************************************************************************<br>Sub Replay_tst(byval Stat_tst As Byte)<br><span style="color:#ff0000;"> Send_spi_to_8 = "Test string"<br> Spiout Send_spi_to_8 , 20<br> waitms 5<br> Spiout Send_spi_to_8 , 20<br> Rs_spi_from_8=spimove(Send_spi_to_8,20)<br></span> print Rs_spi_from_8<br>End Sub
<br></p><p style="text-align: right;">کد slave<br></p><hr><p>
کد:
<br>Enable Interrupts<br>Config Spi = Hard , Interrupt = On , Data Order = Lsb , Master = No , Polarity = High , Phase = 0 , Clockrate = 128 , Noss = 0<br>Spiinit<br>Enable Spi<br>On Spi Spi_slave<br>Dim A As string*20<br>Dim Send_str As String * 10<br>'*********************************************************************************************************************<br>Do<br> If Stat_tst = 2 Then<br> Call Replay_tst(stat_tst)<br> Stat_tst = 0<br> End If<br>Loop<br>'*********************************************************************************************************************<br>Spi_slave:<br><span style="color:#ff0000;"> ' Spiin Receive_string , 20</span><br> Stat_tst = 2<br>Return<br><br>'*********************************************************************************************************************<br>Sub Replay_tst(byval Stat_tst As Byte)<br>Replay = -1<br> Stat_tst = 0<br> a="Ok test"<span style="color:#ff0000;"><br> spiout a,20<br></span>Stat_tst = 0<span style="color:#ff0000;"></span><br>Receive_string = ""<br>End Sub<br>
<br></p></div>نکته: این کد خیلی از قسمتهاش حذف شده و فقط بخشهای مربوط به این مسئله مونده اگه یه جایی کم و زیاد داشت و کدها منطقی به نظر نرسید ببخشید<br>