ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





  1. #1
    تاریخ عضویت
    2019/02/13
    9
    0

    Lightbulb ارسال داده به slave دریافت پاسخ از slave در باس spi

    سلام دوستان
    این سئوالی که می پرسم خیلی دنبالش گشتم ولی به نتیجه درستی نرسیدم اگه ممکنه کمکم کنید
    من دو تا میکرو atmega64 و atmega8 رو با هم بوسیله spi متصل کردم که atmega 64 بعنوان master و میکرو atmega8 بعنوان slave هستند الان برای ارسال داده از master به slave بدینصورت هست که master دیتا رو ارسال میکنه و slave هم با استفاده از وقفه متوجه میشه و دیتا رو دریافت میکنه تا اینجا مشکلی ندارم و درست عمل میکنه مشکل زمانی ایجاد میشه که slave میخواد جواب master رو بده حالا من با spiout (date , lengh) برای اسلیو میفرستم و سپس جواب اسلیو هم با دستور spiout (date , lengh) ارسال میکنه و با destindata = spimove(orginaldate , lengh) سعی میکنم دیتا رو دریافت کنم ولی نمیشه حالا کسی میتونه کمکم کنه ایراد از کجاست؟
    ویرایش توسط moradikh1 : 2020/03/11 در ساعت 13:12
    • تبلیغات
      .

  2. #2
    تاریخ عضویت
    2017/06/13
    1,393
    874

    پاسخ : ارسال داده به slave دریافت پاسخ از slave در باس spi

    نقل قول نوشته اصلی توسط moradikh1

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام دوستان <br>این سئوالی که می پرسم خیلی دنبالش گشتم ولی به نتیجه درستی نرسیدم اگه ممکنه کمکم کنید<br>من دو تا میکرو atmega64 و atmega8 رو با هم بوسیله spi متصل کردم که atmega 64 بعنوان master&nbsp; و میکرو atmega8 بعنوان slave هستند الان برای ارسال داده از master به slave بدینصورت هست که master دیتا رو ارسال میکنه و slave هم با استفاده از وقفه متوجه میشه و دیتا رو دریافت میکنه تا اینجا مشکلی ندارم و درست عمل میکنه مشکل زمانی ایجاد میشه که slave میخواد جواب master رو بده حالا من با spiout (date , lengh) برای اسلیو میفرستم و سپس جواب اسلیو هم با دستور spiout (date , lengh)&nbsp; ارسال میکنه و با destindata = spimove(orginaldate , lengh)&nbsp; سعی میکنم دیتا رو دریافت کنم ولی نمیشه <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>&nbsp;If Stat_tst &lt;&gt; 0 Then<br>&nbsp;&nbsp;&nbsp; Call Replay_tst(stat_tst)<br>&nbsp;&nbsp;&nbsp; Stat_tst=0<br>&nbsp;End If<br>Loop<br>'*********************************************************************************************************************<br>Sub Replay_tst(byval Stat_tst As Byte)<br><span style="color:#ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Send_spi_to_8 = "Test string"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Spiout Send_spi_to_8 , 20<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; waitms 5<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Spiout Send_spi_to_8 , 20<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rs_spi_from_8=spimove(Send_spi_to_8,20)<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp; If Stat_tst = 2 Then<br>&nbsp;&nbsp;&nbsp;&nbsp; Call Replay_tst(stat_tst)<br>&nbsp;&nbsp;&nbsp;&nbsp; Stat_tst = 0<br>&nbsp;&nbsp; End If<br>Loop<br>'*********************************************************************************************************************<br>Spi_slave:<br><span style="color:#ff0000;">&nbsp;&nbsp; '&nbsp;&nbsp; Spiin Receive_string , 20</span><br>&nbsp;&nbsp; Stat_tst = 2<br>Return<br><br>'*********************************************************************************************************************<br>Sub Replay_tst(byval Stat_tst As Byte)<br>Replay = -1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stat_tst = 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a="Ok test"<span style="color:#ff0000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spiout a,20<br></span>Stat_tst = 0<span style="color:#ff0000;"></span><br>Receive_string = ""<br>End Sub<br>
    <br></p></div>نکته: این کد خیلی از قسمتهاش حذف شده و فقط بخشهای مربوط به این مسئله مونده اگه یه جایی کم و زیاد داشت و کدها منطقی به نظر نرسید ببخشید<br>
    سلام
    یکم متنی که نوشتید ناجوره و سخت میشه متوجه شد منظورتون چیه.
    ببینید توی SPI کنترل انتقال به دست مستر هستش؛ یعنی مستر با قرار دادن داده روی خط و ایجاد کلاک همزمان هم داده میفرسته و هم دریافت میکنه. حالا اگر اسلیو بخواد داده بفرسته ولی مستر نخواد دریافت کنه، عملا داده ای منتقل نمیشه. برای رفع این مشکل باید از وقفه خارجی توی مستر استفاده کنید؛ به شکلی که وقتی اسلیو بخواد داده ای بفرسته با تحریک وقفه خارجیِ مستر اونو آگاه کنه.
  3. #3
    تاریخ عضویت
    2019/02/13
    9
    0

    پاسخ : ارسال داده به slave دریافت پاسخ از slave در باس spi

    ببخشید من موقع تایپ کردن نمیدونم چی شد که به ریخت
    سلام دوستان
    این سئوالی که می پرسم خیلی دنبالش گشتم ولی به نتیجه درستی نرسیدم اگه ممکنه کمکم کنید
    من دو تا میکرو atmega64 و atmega8 رو با هم بوسیله spi متصل کردم که atmega 64 بعنوان master و میکرو atmega8 بعنوان slave هستند الان برای ارسال داده از master به slave بدینصورت هست که master دیتا رو ارسال میکنه و slave هم با استفاده از وقفه متوجه میشه و دیتا رو دریافت میکنه تا اینجا مشکلی ندارم و درست عمل میکنه مشکل زمانی ایجاد میشه که slave میخواد جواب master رو بده حالا من با spiout (date , lengh) برای اسلیو میفرستم و سپس جواب اسلیو هم با دستور spiout (date , lengh) ارسال میکنه و با destindata = spimove(orginaldate , lengh) سعی میکنم دیتا رو دریافت کنم ولی نمیشه
    حالا کسی میتونه کمکم کنه ایراد از کجاست؟


    بله درست متوجه شدید بحث همزمانی و یا تحریک مستر برای ارسال مشکلی ندارم فقط مشکل من اینه که باید چطوری این کار رو انجام بدم یعنی به ترتیب چکار کنم؟ مثلا باید اینجوری باشه؟
    1) ارسال دیتا از مستر به اسلیو با spiout
    2) ارسال دیتا از طرف اسلیو به مستر به محض وقفه spi در اسلیو
    3) اجرای spimove طرف مستر و دریافت داده ارسال شده

    من این سه مرحله رو پیش میرم اما دیتا درست نیست

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    اگر کسی نمونه برنامه با بسکام داره که این کار رو عملی کرده باشه ممنون میشم کامل بذاره ببینم اشکالم کجاست
    ویرایش توسط moradikh1 : 2020/03/11 در ساعت 13:44
  4. #4
    تاریخ عضویت
    2017/06/13
    1,393
    874

    پاسخ : ارسال داده به slave دریافت پاسخ از slave در باس spi

    نقل قول نوشته اصلی توسط moradikh1

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ببخشید من موقع تایپ کردن نمیدونم چی شد که به ریخت
    بله متوجه منظورتون شدم بحث همزمانی و یا تحریک مستر برای ارسال مشکلی ندارم فقط مشکل من اینه که باید چطوری این کار رو انجام بدم یعنی به ترتیب چکار کنم؟ مثلا باید اینجوری باشه؟
    1) ارسال دیتا از مستر به اسلیو با spiout
    2) ارسال دیتا از طرف اسلیو به مستر به محض وقفه spi در اسلیو
    3) اجرای spimove طرف مستر و دریافت داده ارسال شده

    من این سه مرحله رو پیش میرم اما دیتا درست نیست
    این توابعی که میگید رو من باهاشون کار نکردم. اما به صورت کلی اسلیو داده رو میذاره تو رجیستر داده SPI و وقفه خارجی مستر رو تحریک میکنه. مستر هم توی سرویس وقفه خارجی اش با گذاشتن یک داده بی معنی مثل 0 توی رجیستر داده خودش ارتباط رو شروع میکنه و داده اسلیو رو دریافت میکنه.
  5. #5
    تاریخ عضویت
    2019/02/13
    9
    0

    پاسخ : ارسال داده به slave دریافت پاسخ از slave در باس spi

    ممنون از وقتی که گذاشتید لطف کردید
    این که میفرمایید درست تئی تئوری همینه توی c هم این کار سخت نیست ولی الان مجبورم با بسکام بنویسم (حالا به دلایلی) با دستوراتش و ... مشکل دارم نمیشه بیشتر دنبال اینم که یکی راهنماییم کنه توی بسکام چکار کنم؟
  6. #6
    تاریخ عضویت
    2017/06/13
    1,393
    874

    پاسخ : ارسال داده به slave دریافت پاسخ از slave در باس spi

    نقل قول نوشته اصلی توسط moradikh1

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ممنون از وقتی که گذاشتید لطف کردید
    این که میفرمایید درست تئی تئوری همینه توی c هم این کار سخت نیست ولی الان مجبورم با بسکام بنویسم (حالا به دلایلی) با دستوراتش و ... مشکل دارم نمیشه بیشتر دنبال اینم که یکی راهنماییم کنه توی بسکام چکار کنم؟
    من بسکام کار نکردم متاسفانه وگرنه کمکتون میکردم حتما.
نمایش نتایج: از 1 به 6 از 6

موضوعات مشابه

  1. مشکل در ارسال دیتا در حالت spi slave
    توسط abolfazramimi1359l در انجمن میکروکنترلرهای PIC
    پاسخ: 1
    آخرين نوشته: 2016/06/06, 13:48
  2. پاسخ: 2
    آخرين نوشته: 2014/11/12, 09:42
  3. مدیریت MISO توسط Slave در حالتی که چند Slave داریم
    توسط valajeyhani در انجمن میکروکنترلرهای AVR
    پاسخ: 6
    آخرين نوشته: 2014/07/05, 15:57
  4. جلوگیری از ارسال دو slave در شبکه rs485
    توسط par3eh در انجمن میکروکنترلرهای AVR
    پاسخ: 5
    آخرين نوشته: 2013/08/22, 22:09
  5. پاسخ: 10
    آخرين نوشته: 2010/08/06, 19:10

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •