اطلاعیه

Collapse
No announcement yet.

چگونه از slave به master در پروتکل spi میتوان دیتا ارسال نمود

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

    چگونه از slave به master در پروتکل spi میتوان دیتا ارسال نمود

    سلام عرض میشه خدمت اساتید عزیز
    مشکل من در ارتباط spi این هستش که میشود از master اطلاعات را به slave فرستاد،ولی به صورت برعکس یعنی از slave به master نمیتوانم جواب بگیرم.
    ممنون میشوم اگر کمک نمایید.در ضمن من با نرم افزار bascom کار میکنم.

    #2
    پاسخ : چگونه از slave به master در پروتکل spi میتوان دیتا ارسال نمود

    فرق master با slave همینه دیگه!!!
    تنها در صورتیکه slave, master رو انتخاب کرده(ss) باشه,slave می تونه چیزی رو بفرسته.
    من با c کار می کنم وگرنه یه نمونه کد بهت می دادم.
    اگه تو همین سایت هم بگردی آموزش کامل بسکام رو پیدا می کنی.
    موفق باشی
    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

    دیدگاه


      #3
      پاسخ : چگونه از slave به master در پروتکل spi میتوان دیتا ارسال نمود

      سلام
      با اجازه slh
      جناب shahinbahari
      من می خواهم دیتا زیر را از داخل پالس بیرون بیاورم با استفاده از spi البته در CodeVision (مربوط به کالر ای دی است)



      که در شکل بالا data به mosi میکرو که به عنوان salve است متصل می شود
      و پایه DCLK به SCK میکرو وصل می شود
      و DR به SS میکرو متصل می شود

      چند تا سوال دارم لطفا" جواب بدهید
      1-حالا این های که در بالا گفتم درسته؟؟؟
      2- فکر کنم پایه DR به SS میکرو که وصل است موقع دیتا باید صفر باشد و در پایان یک شود اگر این حرف درست است DR بر عکس عمل می کند برای رفع این مشکل می شود از یک NOT استفاده کرد؟؟
      3- در salve مهم است که فرکانس چقدر باشد یا مهعم نیست؟(البته منظورم برای رجیستر SPCR است)
      4-در شکل بالا مد را باید چگونه انتخاب کنم؟؟(منظورم CPOL و CPHA می باشد)
      5-برای گرفتن اطلاعات میشه از CODE WIZARD و دستور مثلا ( data=spi(0 که در این مثال دیتا را داخل data بفرستیم ان صفر هم همین جوری بفرسته (الکی است :biggrin

      کلا" اگر نکته ای بنظرتون میرسه لطف کنید بگویید
      ممنون

      دیدگاه


        #4
        پاسخ : چگونه از slave به master در پروتکل spi میتوان دیتا ارسال نمود

        کسی نیست کمک کنـــــــــــــــــــــــــــــــه :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry:
        :cry2: :cry2: :cry2: :cry2: :cry2: :cry2: :cry2:

        دیدگاه


          #5
          پاسخ : چگونه از slave به master در پروتکل spi میتوان دیتا ارسال نمود

          سلام آقای shahinbahari
          ممنونم.ولی منظور شما یعنی این هست که تنها فقط وقتی میشود از slave به master دیتا فرستاد که در همان زمان master دارد دیتا میفرستد؟یعنی نمیشود هر موقعی که خواستیم از slave به master دیتا بفرستیم؟

          دیدگاه


            #6
            پاسخ : چگونه از slave به master در پروتکل spi میتوان دیتا ارسال نمود

            منظور اینه که master هر وقت دوست داشت یه سری اطلاعات میده به slave.حالا اگه اسلو نخواد بافر ارتباط سنکرونش رو بخونه به خودش مربوطه. اما slave نمیتونه به هیچ عنوان سر خود به master دستور دریافت بده .باید منتظر باشه تا master به slave اجازه بده تا اطلاعاتشو انتقال بده به master.

            مثلا اینجوری(مثال بسکام)
            Spiinit
            B = 5
            Spiout A(1) , B
            Spiin A(1) , B
            A(1) = Spimove(a(2))
            End
            Gracias A La Vida
            [glow=red,2,300]ساخت فرز CNC[/glow]
            http://www.eca.ir/forum2/index.php?topic=56308.0
            http://up9.iranblog.com/images/4xd21f8vemt8g46011fx.jpg
            زمین سفت است و آب شلست و هوا نرم است و همه چیز عالیست در این حوالی...

            دیدگاه


              #7
              پاسخ : چگونه از slave به master در پروتکل spi میتوان دیتا ارسال نمود

              نوشته اصلی توسط 001nafar
              1-حالا این های که در بالا گفتم درسته؟؟؟
              2- فکر کنم پایه DR به SS میکرو که وصل است موقع دیتا باید صفر باشد و در پایان یک شود اگر این حرف درست است DR بر عکس عمل می کند برای رفع این مشکل می شود از یک NOT استفاده کرد؟؟
              3- در salve مهم است که فرکانس چقدر باشد یا مهعم نیست؟(البته منظورم برای رجیستر SPCR است)
              4-در شکل بالا مد را باید چگونه انتخاب کنم؟؟(منظورم CPOL و CPHA می باشد)
              5-برای گرفتن اطلاعات میشه از CODE WIZARD و دستور مثلا ( data=spi(0 که در این مثال دیتا را داخل data بفرستیم ان صفر هم همین جوری بفرسته (الکی است :biggrin

              کلا" اگر نکته ای بنظرتون میرسه لطف کنید بگویید
              ممنون
              سلام
              ببخشید که چند روزی نبودم.
              1-بله
              2-اینکه slave با منطق معکوس فعال میشه که ایراد نیست.چرا الکی می خوای نات کنی؟
              3-slave پالس کاری رو از پایه ی sck می گیره .پس اصلا تنظیم فرکانس لازم نیست.
              4- مهم نیست از چه مدی استفاده می کنی .فقط مد فرستنده و گیرنده باید یکسان باشه.
              5-spi رابط خیلی پیچیده ای نیست.همین یه تابع رو هم داره.در اصل نوشتن و خوندن از SPDR هست.اگه می خوای بخونی بهتره بنویسی data=spi(0xff(; .البته فقط بهتره.فکر نمی کنم فرق زیادی بکنه(نویز کمتر می گیره)
              نوشته اصلی توسط pajuhaan
              منظور اینه که master هر وقت دوست داشت یه سری اطلاعات میده به slave.حالا اگه اسلو نخواد بافر ارتباط سنکرونش رو بخونه به خودش مربوطه. اما slave نمیتونه به هیچ عنوان سر خود به master دستور دریافت بده .باید منتظر باشه تا master به slave اجازه بده تا اطلاعاتشو انتقال بده به master.

              مثلا اینجوری(مثال بسکام)
              Spiinit
              B = 5
              Spiout A(1) , B
              Spiin A(1) , B
              A(1) = Spimove(a(2))
              End
              درست فهمیدید.master اگه دیتایی رو لازم داشته باشه می تونه از slave بخونه یا بنویسه.
              ولی slave فقط زمانی که از طرف master فعال باشه می تونه بنویسه یابخونه.
              من دستورات بیسیک رو نمی دونم.واسه همین متوجه برنامه شما نشدم.
              --------------------------------------------------------------------------------
              در کل spi از دو شیفت ریجستر 8 بیتی تشکیل شده اند که یه رجیستر توی master و دومی تو slave هست.(همون SPDR )وقتی هرکدوم دیتایی رو بخواد به دیگری بفرسته .اونو تو ای رجیستر می زاره و بعد با پالس مستر چرخش شروع میشه.اون دیتا به میکرو دیگه می ره و دیتای دومی برمی گرده.
              چون پالس رو مستر تولید می کنه پس فقط اون می تونه این چرخشو هدایت کنه.ss هم بیشتر زمانی به کار می یاد که یه master و n تا slave داشته باشیم.(انتخاب کردن).
              این رو هم ببینید:
              http://en.wikipedia.org/wiki/Serial_..._Interface_Bus
              مشکلی بود در خدمتم.
              [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

              دیدگاه


                #8
                پاسخ : چگونه از slave به master در پروتکل spi میتوان دیتا ارسال نمود

                پس میتونم این کارو بکنم که هر وقت خواستم از slave به master دیتایی بفرستم،اول پالس master رو بوسیله ی یک چیزی مثلا وقفه خارجی از جانب slave تحریک کنم،بعد که پالس تولید شد،دیتا رو هم از slave بفرستم؟

                دیدگاه


                  #9
                  پاسخ : چگونه از slave به master در پروتکل spi میتوان دیتا ارسال نمود

                  نوشته اصلی توسط slh
                  پس میتونم این کارو بکنم که هر وقت خواستم از slave به master دیتایی بفرستم،اول پالس master رو بوسیله ی یک چیزی مثلا وقفه خارجی از جانب slave تحریک کنم،بعد که پالس تولید شد،دیتا رو هم از slave بفرستم؟
                  این جوری هم میشه ولی اصلا جالب نیست
                  این نمونه برنامه رو که نوشتم عدد 0X55 رو به slave می فرسته و در عوض slave عدد 0xaaرو به مستر می فرسته.
                  کد:
                  ////////////master
                  #inclued <mega32.h>
                  #include <spi.h>
                  #include <delay.h>
                  main(){
                  unsigned char get_data,send _data;
                  PORTB=......;
                  DDRB=......;
                  SPCR=.......;
                  send_data=0x55;
                  while(1){
                  get_data=spi(send_data);
                  delay_ms(5);
                  }
                  }
                  
                  
                  //////////////////slave
                  #inclued <mega32.h>
                  #include <spi.h>
                  main(){
                  unsigned char get_data,send _data;
                  PORTB=......;
                  DDRB=......;
                  SPCR=.......;
                  send_data=0xAA;
                  while(1){
                  get_data=spi(send_data);
                  delay_ms(5);
                  }
                  }
                  اگر فقط slave بخواد چیزی بفرسته .توی مستر می نویسی: get_data=spi(0xff);
                  تو slave هم می نویسی : spi(send_data);
                  این رابط خیلی سادس.الکی خودتو در گیر جزئیاتش نکن. مدارو توی پروتیوس ببند و امتحان کن .
                  اگر به یه برنامه ی کامل تر نیاز داشتی بگو تا برات بزارم :agree:
                  [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                  دیدگاه


                    #10
                    پاسخ : چگونه از slave به master در پروتکل spi میتوان دیتا ارسال نمود

                    این تاپیک رو یه نگاه بنداز شاید کمکت کنه
                    http://www.eca.ir/forum2/index.php?topic=37349.0

                    دیدگاه


                      #11
                      پاسخ : چگونه از slave به master در پروتکل spi میتوان دیتا ارسال نمود

                      بسیار ممنمونم ازتون.
                      باز هم امتحان میکنم.
                      ولی برنامه من به زبان basic هست.

                      دیدگاه

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