اطلاعیه

Collapse
No announcement yet.

ارتباط spi بین چند میکرو و ادوات دیگر

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : ارتباط spi بین چند میکرو و ادوات دیگر

    خب فکر کنم برای دریافت داده بهتره از وقفه خارجی استفاده کنی. فکر کنم میکرو مگا همشون بیشتر از 3 تا پایه واسه وقفه خارجی ندارن. پس فکر کنم اگه خود SPI یه سلکت اسو داشته باشه میشه 4تا رو با هم وصل کرد. اگه هم نداره بیشتر از 3 تا فکر نکنم بشه. واسه خواندن هم فکر کنم می تونی توی رویه وقفه(روتین سرویس وقفه) برنامه خوندن رو قرار بدی و مثلا توی یه آرایه قرار بدی.
    Ok?
    راستش منظورتو نفهمیدم :sad:. یعنی من ss میکرو رو به یک وقفه مثلا int0 متصل کنم که هر وقت این اسلو انتخاب شد اسلو بره تو حالت دریافت دیگه ؟ این که یک وقفه خارجی میخواد ... پایه های spi که 4 تا هستن و معلومن دیگه ..تو atmega8 16 17 18 19 هسن دیگه.... من اگه ss رو به int0 وصل کنم انتخاب میشه .... بعدش چی؟ چطور توس اسلو دریافت کنم ؟
    مثلا توی سریال وقفه هست وقتی اجرا میشه دیتا رو میگیری....
    تو اون پست واسه مستر نوشته :
    کد:
    while(1)
    {
    incoming=spi(0x33);
    delay_ms(50);
    }
    الان این برنامه از اول که ران میشه incoming=spi(0x33 رو اجرا میکنه ....

    واسه اسلو هم :
    کد:
    incoming=spi(0x77);
    یعنی چی؟

    دیدگاه


      #17
      پاسخ : ارتباط spi بین چند میکرو و ادوات دیگر

      نوشته اصلی توسط کیوان قاسمی
      راستش منظورتو نفهمیدم :sad:. یعنی من ss میکرو رو به یک وقفه مثلا int0 متصل کنم که هر وقت این اسلو انتخاب شد اسلو بره تو حالت دریافت دیگه ؟ این که یک وقفه خارجی میخواد ... پایه های spi که 4 تا هستن و معلومن دیگه ..تو atmega8 16 17 18 19 هسن دیگه.... من اگه ss رو به int0 وصل کنم انتخاب میشه .... بعدش چی؟ چطور توس اسلو دریافت کنم ؟
      مثلا توی سریال وقفه هست وقتی اجرا میشه دیتا رو میگیری....
      تو اون پست واسه مستر نوشته :
      کد:
      while(1)
      {
      incoming=spi(0x33);
      delay_ms(50);
      }
      الان این برنامه از اول که ران میشه incoming=spi(0x33 رو اجرا میکنه ....

      واسه اسلو هم :
      کد:
      incoming=spi(0x77);
      یعنی چی؟
      بله، دقیقا
      یعنی توی همون تابع وقفه برنامه دریافت رو بنویسی. این به نظر من بهترین راهه.
      در مورد توابع استفاده از واحد های سریال من هیچی نمی دونم چون تا حالا ازشون استفاده نکردم. شما باید یا به مثال ها یا به خود کتابخونه مراجعه کنید و ببینید این توابع چی هستن.

      دیدگاه


        #18
        پاسخ : پاسخ : ارتباط spi بین چند میکرو و ادوات دیگر

        نوشته اصلی توسط سوران آراسته
        کیوان جان من همون 74595 رو با spi راه اندازی کردم!!!
        اون پایه هم بله تو میکرو نوشته ss و همون cs هستش. اما پایه ss در ارتباط به صورت سخت افزاری خودش تغییر وضیعیت میده. مثلا موقع اتصال دوتا میکرو به هم.
        بقیه مطالب هم می سپارم دست rozeh عزیز.
        موفق باشید
        جدی؟ امکانش حس سورسه اون قسمتی که 74595 رو spi کردی واسم بزاری؟ چون سرعتش از سریال بیشتره دیگه ؟ مگه نه؟

        دیدگاه


          #19
          پاسخ : ارتباط spi بین چند میکرو و ادوات دیگر

          نوشته اصلی توسط rozeh
          بله، دقیقا
          یعنی توی همون تابع وقفه برنامه دریافت رو بنویسی. این به نظر من بهترین راهه.
          در مورد توابع استفاده از واحد های سریال من هیچی نمی دونم چون تا حالا ازشون استفاده نکردم. شما باید یا به مثال ها یا به خود کتابخونه مراجعه کنید و ببینید این توابع چی هستن.
          تابع spi بازگشت unsigned char داره ... از این تابع هم واسه ارسال استفاده میکنن هم واسه دریافت.... حالا من وقتی انتخاب شدن slave رو تشخیص دادم با وقفه . چطور دریافت کنم ؟
          دوستان دیگه کمک نمیکنن ؟
          rozeh جان خیلی ممنون خیلی خوبه که کمک میکنی. مرسی :redface:

          دیدگاه


            #20
            پاسخ : ارتباط spi بین چند میکرو و ادوات دیگر

            برای ارتباط میکرو با 74595 از طریق spi باید میکرو توی مد master باشه و بعد mosi به ورودی شیفت رجیستر و sck به کلاک شیفت رجیستر متصل بشن ،یکی از پین های میکرو خروجی تعریف بشه و به کلاک لچ 74595 وصل بشه و پایه ss میکرو هم به vcc(چون این پایه برای انتخاب slave هستش و اگر از بیرون low بشه میکرو به مد slave میره)
            توی برنامه باید به پایه ای که به کلاک لچ متصل شده بعد از ارسال دیتا یه پالس بفرستیم و دیتا هم از طریق تابع spi() ارسال بشه

            دیدگاه


              #21
              پاسخ : ارتباط spi بین چند میکرو و ادوات دیگر

              نوشته اصلی توسط کیوان قاسمی
              تابع spi بازگشت unsigned char داره ... از این تابع هم واسه ارسال استفاده میکنن هم واسه دریافت.... حالا من وقتی انتخاب شدن slave رو تشخیص دادم با وقفه . چطور دریافت کنم ؟
              دوستان دیگه کمک نمیکنن ؟
              rozeh جان خیلی ممنون خیلی خوبه که کمک میکنی. مرسی :redface:
              توی روتین وقفه می تونی با خوندن رجیستر SPDR دیتا رو دریافت کنی

              دیدگاه


                #22
                ارتباط چند ماژول به میکرو از طریق SPI

                با سلام خدمت دوستان
                شاید سوالم پیش پا افتاده باشه ولی من به مشکل برخوردم
                چند تا ماژول دارم باید به میکرو وصل کنم که پروتکل ارتباطیشون SPI هست و با NRF هم میخوام دیتارو انتقال بدم که اونم SPI هست آیا امکانپذیره؟
                چشم ظاهربین، بر آزار است وای ار بنگرد این گلستانـها که پنهان زیر خارستان ماست

                دیدگاه


                  #23
                  پاسخ : ارتباط چند ماژول به میکرو از طریق SPI

                  سلام

                  معمولا ماژول هایی که از SPI برای ارتباط استفاده میکنن براشون یک پایه در نظر گرفته شده به اسم (SS) یا همون Slave Select در NRF24L01 این پایه CSN یا همون Chip Select Not هست. اگر چند تا سنسور داری و فقط از یک باس SPI هم میخوای استفاده کنی، باید همه MSIO،MOSI،SCK های تمام Slave ها رو به Master وصل میکنی و باید پایه های SS سنسور ها رو به پین های GPIO در Master وصل میکنی. در هنگام برنامه نویسی هر وقت خواستی که با یک سنسور در ارتباط باشی باید اول پین SS اون سنسور رو فعال کنی وسپس دیتا رو رو باس SPI بفرستی. اگر تعداد سنسور هات خیلی زیاد هست، میتونی از یک Multiplexer برای انتخاب slave استفاده کنی. معمولا پایه SS پایین فعال هست و این رو میتونی در دیتا شیت قطعه پیدا کنی.

                  دیدگاه


                    #24
                    پاسخ : ارتباط spi بین چند میکرو و ادوات دیگر

                    با سلام
                    بنده درگیر ی کار ساخت شدم که مجبورم حداقل 16 میکرو را باهم به صورت SPI و MASTER/SLAVE شبکه کنم.
                    میتونستم شبکه RS485 کنم ولی به دلیل اینکه نرخ ارسال داده کم میشه این کار را انجام ندادم و از SPI که باس پرسرعتی هست تصمیم گرفتم استفاده کنم.
                    چندین تست را در حین کار شبیه سازی گرفتم و به مشکلاتی برخورد کردم که جایی توی هیچ سایتی حتی بهش اشاره هم نشده بود.
                    از دوستان تقاضامندم در صورتی که براشون مقدور هست بنده را راهنمایی کنن
                    1)برنامه نویسی تحت BASCOM
                    2)ارتباط یک MASTER و SLAVE به خوبی برقرار شد
                    3)ولی وقتی تعداد SLAVE ها را خواستم زیاد کنم دچار مشکل شدم.
                    البته به این نکته توجه داشتم که چون تعداد SLAVE ها داره زیاد میشه در تنظیمات SPI وضعیت NOSS=1 کنم.(یعنی SS به صورت نرم افزاری در سمت MASTER تنظیم میشه)
                    4)مشکلی که بیشتر درگیرش شدم اینه:
                    اگر ی زمانی یک یا چندین SLAVE ارتباطشون با MASTER قطع بشه ومجددا بیان داخل شبکه اوضاع به هم میریزه.
                    یعنی داده ها اصلا دیگه قابل اطمینان نیستن و جابه جا میشن و یک سری دریافت نمیشه و......
                    و کلا به شکست برخورد میکنیم.
                    دوستان عزیز اگر تا به حال به این مشکلات برخورد کردین و رفع شده بفرمایید بنده چجوری این مشکلات را حل کنم؟
                    ممنون
                    التماس دعا

                    دیدگاه


                      #25
                      پاسخ : ارتباط spi بین چند میکرو و ادوات دیگر

                      سلام دوستان
                      ببخشید اگر بخوام یک متغییر float یا یک رشته رو با پروتکلspi به چه صورته؟
                      باید کاراکتر به کاراکتر دستی تو حلقه بفرستم؟
                      ممنون میشم راهنمایی کنید

                      دیدگاه


                        #26
                        پاسخ : ارتباط spi بین چند میکرو و ادوات دیگر

                        نوشته اصلی توسط besa1998 نمایش پست ها
                        سلام دوستان
                        ببخشید اگر بخوام یک متغییر float یا یک رشته رو با پروتکلspi به چه صورته؟
                        باید کاراکتر به کاراکتر دستی تو حلقه بفرستم؟
                        ممنون میشم راهنمایی کنید
                        سلام
                        بله همونطوری که گفتید عمل کنید. فکر نمیکنم تابع اختصاصی برای این کاری که گفتید برای SPI نوشته شده باشه!

                        دیدگاه


                          #27
                          پاسخ : ارتباط spi بین چند میکرو و ادوات دیگر

                          با سلام خدمت دوستان عزیز

                          من یک دستگاه دارم که پردارنده اون یک ارم هست که بادرایور ال ای دی به نام mbi5026 از طریقه spi در ارتباط هست . اطلاعات رو ارم از طریق spi ارسال و درایور mbi5026 دریافت میکنه . و روش کار درایور mbi5026 به این صورت هست که سه عدد پایه کنترلی داره به نام های sdi - csk- le که پایه وردی سریال - فرکانس کلاک -و پایه کنترل کننده - در هر بار انتقال باید دوبایت داده یعنی 16 بیت دریافت میکنه چون 16 خروجی داره - که درحالت عادی ارم در ارتباط با این درایور mbi5026 هیچ مشکلی نیست مثلا برای اینکه هر 16 خروجی رو فعال کنیم کافیه دو بایت به مقدار 255 پشت سر هم ارسال کنیم- .من میخوام بجای ای سی درایورmbi5026 یک عدد avr بذارم تا بتونم کد های ارسالی ارم رو بخونم اما هیچ راه دسترسی به نحوه تنظیمات ارم ندارم مثل فرکانس کلاک- پولاریته- فاز- ؟ فقط میدونم که کریستال ارم 8 مگا هست - در حقیقت من میخوام avr نقشه slave رو برای ارم داشته باشه و اطلاعاتی که قبلا ارم برای درایور mbi5026 ارسال میکرده حالا برای avr ارسال کنه و من بتونم دریافت کنم و برروی lcd نمایش بدم -الان همزمان ارم رو به درایور mbi5026 و avr وصل میکنم و درایور mbi5026 به خوبی کار میکنه و اطلاعات رو دریافت و خروجی متناسب رو فعال میکنه اما اطلاعاتی که avr دریافت میکنه و نمایش میده قابل قبول نیست و با خروجی درایور mbi5026 از نظر فعال شدن خروجی ها همخونی نداره و با هم مطابق نیستند- مثلا زمانی که همه خروجی های درایور mbi5026 فعال هست من انتظار دارم avr دو بایت با مقدارهای 255و255 دریافت کنه که اینچنین چیزی اتفاق نمیفته .
                          ممنون میشم نظر یا پیشنهادی دارن اعلام کنند.
                          جدیدترین ویرایش توسط dj_arasham; ۱۴:۲۵ ۱۳۹۹/۰۴/۲۰.

                          دیدگاه

                          لطفا صبر کنید...
                          X