اطلاعیه

Collapse
No announcement yet.

تبدیل یک متغیر 16 بیتی به دو تا 8 بیتی برای ارسال با SPI

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

    #16
    پاسخ : تبدیل یک متغیر 16 بیتی به دو تا 8 بیتی برای ارسال با SPI

    دوستان به نظرتون اگه در فرستنده اعداد 0 تا 9 رو به ترتیب از طریق دستور SPI ارسال کنم آیا در گیرنده هم به همان ترتیب اعداد دریافت میشه؟؟؟
    یعنی تا عدد 5 رو نگیرم نمیتونم عدد 6 رو دریافت کنم
    :question: :question: :question:

    دیدگاه


      #17
      پاسخ : پاسخ : تبدیل یک متغیر 16 بیتی به دو تا 8 بیتی برای

      نوشته اصلی توسط >>::M#A#F#H::<<
      اینم فایل c و پروتئوس
      فایل S برای گیرنده و SR برای گیرنده
      http://uploadkon.ir/?file=825b9a78d67bec15afeb984ca25957cc.rar
      سلام
      بفرمایید، اینم فایل اصلاح شده:
      http://uploadkon.ir/?file=7ff87e02b2a33b0b6ae6849ddd92a4bb.rar
      نکته مهمی که در ارتباط SPI باید رعایت بفرمایید اینه که:
      در این ارتباط MASTER اطلاعات رو ارسال می کنه، خواه SLAVE اون رو بگیره، خواه نگیره! بنابراین تاخیرها و عملیات طوری باید تنظیم بشن که slave موقع ارسال اطلاعات مشغول نباشه و اطلاعات رو دریافت کنه وگرنه هدر میرن

      اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !!

      دیدگاه


        #18
        پاسخ : تبدیل یک متغیر 16 بیتی به دو تا 8 بیتی برای ارسال با SPI

        نوشته اصلی توسط >>::M#A#F#H::<<
        دوستان به نظرتون اگه در فرستنده اعداد 0 تا 9 رو به ترتیب از طریق دستور SPI ارسال کنم آیا در گیرنده هم به همان ترتیب اعداد دریافت میشه؟؟؟
        یعنی تا عدد 5 رو نگیرم نمیتونم عدد 6 رو دریافت کنم
        :question: :question: :question:
        بله، البته اگه اون وسطا وقفه ای پیش نیاد!
        شما میتونید فقط تعدادی از اعداد رو دریافت کنید، به این نکته دوباره توجه بفرمایید:

        در این ارتباط MASTER اطلاعات رو ارسال می کنه، خواه SLAVE اون رو بگیره، خواه نگیره! بنابراین تاخیرها و عملیات طوری باید تنظیم بشن که slave موقع ارسال اطلاعات مشغول نباشه و اطلاعات رو دریافت کنه وگرنه هدر میرن

        البته برای پست قبل هم این نکته رو یادم رفت بگم که اعتماد چندانی به پروتئوس نیست، ممکنه تو شبیه سازی این نرم افزار اطلاعات درستی دریافت نشه، اما شما با دو تا میکروی ساده در عمل تست کنید تا مطمئن بشید

        اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !!

        دیدگاه


          #19
          پاسخ : پاسخ : تبدیل یک متغیر 16 بیتی به دو تا 8 بیتی برای

          نوشته اصلی توسط ☺بابابرقی☺
          سلام
          بفرمایید، اینم فایل اصلاح شده:
          http://uploadkon.ir/?file=7ff87e02b2a33b0b6ae6849ddd92a4bb.rar
          نکته مهمی که در ارتباط SPI باید رعایت بفرمایید اینه که:
          در این ارتباط MASTER اطلاعات رو ارسال می کنه، خواه SLAVE اون رو بگیره، خواه نگیره! بنابراین تاخیرها و عملیات طوری باید تنظیم بشن که slave موقع ارسال اطلاعات مشغول نباشه و اطلاعات رو دریافت کنه وگرنه هدر میرن


          خیلی ممنون دوست عزیز
          حالا نمیشه توضیح بدی که با توجه به چه چیزی باید این تاخیر هارو بدیم تا دیتا از دست نره
          چون من میخوام این بخش رو به پروژه اصلی اضافه کنم
          ممنون

          دیدگاه


            #20
            پاسخ : پاسخ : تبدیل یک متغیر 16 بیتی به دو تا 8 بیتی برای

            نوشته اصلی توسط >>::M#A#F#H::<<

            خیلی ممنون دوست عزیز
            حالا نمیشه توضیح بدی که با توجه به چه چیزی باید این تاخیر هارو بدیم تا دیتا از دست نره
            چون من میخوام این بخش رو به پروژه اصلی اضافه کنم
            ممنون
            خواهش می کنم
            کلا برنامه باید طوری باشه که هر وقت اطلاعات به slave رسید، slave مشغول نباشه
            خوشبختانه برنامه نویسا فکر اینجا رو هم کردن و چیزی ساختن به نام "وقفه ارسال و دریافت spi"، کد زیر رو که در اون از وقفه دریافت spi برای بهینه کردن کد استفاده شده رو ببینید: SPI_MASTER_WITH_INTERRUPT
            http://uploadkon.ir/?file=cbee80a7be5acb75ec3030be90f90f71.rar
            اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !!

            دیدگاه


              #21
              پاسخ : تبدیل یک متغیر 16 بیتی به دو تا 8 بیتی برای ارسال با SPI

              با سلام،

              ببخشید که میپرم وسط بحث! مثل اینکه موضوع بحث با تیتر تاپیک تغییر کرده! :mrgreen:

              در هر صورت یک پیشنهاد در مورد تبدیل 32 بیت به 16 بیت و 8 بیت در سی دارم ( یا هر شکل دیگه ای که شما مد نظر دارید! ) و اون هم استفاده از UNION هستش، بطور مثال :

              کد:
              //------------------------------------------------------------------------------------------//
              //		MEM_ADDR :																																						//
              //			MEM_ADDR.Addr :																																			//
              //				MEM_ADDR.Ashrhi + MEM_ADDR.Ashrlo :																								//
              //					MEM_ADDR.Abyte[3] + MEM_ADDR.Abyte[2] + MEM_ADDR.Abyte[1] + MEM_ADDR.Abyte[0]		//
              //------------------------------------------------------------------------------------------//
              typedef struct _mem_addr {
              	 	union	{				
              				unsigned long 					Addr;
               				//-----------------------------
               			struct {
                					unsigned short 			Ashrlo;
                					unsigned short 			Ashrhi;
                				};
               				//-----------------------------
              				unsigned char 					Abyte[4];
              		};
              } MEM_ADDR;
              
              
              //------------------------------------------
              MEM_ADDR		addrs;

              برای نمونه، با مقدار دهی به شکل زیر :
              addrs.Addr = 0x12345678

              خواهیم داشت :

              addrs.Ashrhi = 0x1234
              addrs.Ashrlo = 0x5678

              addrs.Abyte[0] = 0x78
              addrs.Abyte[1] = 0x56
              addrs.Abyte[2] = 0x34
              addrs.Abyte[3] = 0x12
              مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

              Sh_Nourbakhsh@Yahoo.com

              http://s2.picofile.com/file/7170362468/_Wall_e_.jp

              دیدگاه


                #22
                پاسخ : تبدیل یک متغیر 16 بیتی به دو تا 8 بیتی برای ارسال با SPI

                سلام دوستان من میخوام ماژول MCP6S21/2/6/8 را که یک تقویت کننده با بهره قابل برنامه ریزی هست را راه اندازی کنم.مشکل اینه که باید توی هر بار ارسال 16 بیت را ارسال کنم در حالی که با spi فقط میشه 8 بیت را ارسال کرد.8 بیت اول بیت های دستور و 8 بیت دوم بیت های بهره هستند.لطفا اگه کسی با این ماژول کار کرده یا کدی در رابطه باهاش داره راهنمایی کنه

                دیدگاه


                  #23
                  پاسخ : تبدیل یک متغیر 16 بیتی به دو تا 8 بیتی برای ارسال با SPI

                  دوست خوبم سلام
                  میشه لطفا راجع به این دستور یه کم توضیح بدین
                  و بفرمایید اسم این دستور چی هست ؟
                  و چطور می تونم این دستور را یاد بگیرم:
                  Cmd>>8;

                  دیدگاه

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