اطلاعیه

Collapse
No announcement yet.

ارسال یک فریم از طریق SPI ؟ کمک

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

    ارسال یک فریم از طریق SPI ؟ کمک

    سلام.

    یکی از دوستام می خواد با spi کار کنه همه چی رو براش گفتم و هیچ مشکلی نداشت و مدار هم کار میکنه بجز اینکه چطوری از یک بایت بیشتر بفرستم! :angry: زبان سی. محیط کد ویژن . دریافت از طریق اینترابت. اگه لطف کنید و بفرمایید چطور باید این کار رو بکنم ممنون میشم. اگه یه کد ساده برام بنویسید که دیگه عالییی!

    #2
    پاسخ : ارسال یک فریم از طریق SPI ؟ کمک

    ساده ترین حالت
    برای master:
    #include <mega16.h>
    #include <delay.h>
    #include <spi.h>
    unsigned char send_data;
    void main(){
    PORTB=0x00;
    DDRB=0xB0;
    PORTD=0xFF;
    DDRD=0x00;
    SPCR=0x53;
    SPSR=0x00;
    while (1){
    send_data=PIND;
    spi(send_data);
    delay_ms(250);}
    }

    و برای slave:
    //--------------slave---------
    #include <mega16.h>
    #include <delay.h>
    #include <spi.h>
    #include <stdio.h>
    #include <lcd.h>
    #asm
    .equ __lcd_port=0x1B;
    #endasm

    unsigned char get_data;
    void main(){
    char lcd_buffer[16];
    PORTB=0x00;
    DDRB=0x40;
    SPCR=0x43;

    SPSR=0x00;
    lcd_init(16);
    while (1){
    get_data=spi (0);
    sprintf(lcd_buffer,"data is=%u",get_data);
    lcd_clear();
    lcd_puts(lcd_buffer);
    delay_ms(250);
    }}
    اینم فایل پروتئوس.


    دیدگاه


      #3
      پاسخ : ارسال یک فریم از طریق SPI ؟ کمک

      سلام .

      ممنون از جوابت.

      * من گفتم از طریق اینترابت باشه !

      * شما فقط یه بایت رو برای اسلیو میفرستید. من عرض کردم با یک بایت مشکلی ندارم من می خوام یک فریم مثلاً 3 بایت رو با هم بفرستم و اسلیو دریافت کنه !

      * از لحاظ شماتیک و ... هم مشکلی ندارم زحمت نکشید./


      بازم ممنون

      دیدگاه


        #4
        پاسخ : ارسال یک فریم از طریق SPI ؟ کمک

        با سلام،

        من از کدویژن خبر ندارم ( که روتین خاصی برای این کار داره یانه! )، ولی میدونم که باید از یه روتین مثل این استفاده کنید :

        کد:
        void SPIMasterTransfer(int len, unsigned char *buf)
        {
        	spi_status 	= SPI_BUSY;
        	spi_cnt 		= len;
        	spi_wi			= 0;
        	spi_ri 			= 0;
        	
        	while (spi_wi != spi_cnt)
        	{
        		SPDR = buf[spi_ri];
        		spi_ri++;
        		
        		while (!(SPSR & 0x80)); 	//wait until SPIF is set
        
        		buf[spi_wi] = SPDR;
        		spi_wi++;
        	}
        	
        	spi_status = SPI_IDLE;
        } //SPIMasterTransfer

        خلاصه کلام اینه که باید در یک روتین ضمن رعایت هند شیک های مورد نیاز، بایت به بایت اطلاعات رو بفرستید.
        مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

        Sh_Nourbakhsh@Yahoo.com

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

        دیدگاه


          #5
          پاسخ : ارسال یک فریم از طریق SPI ؟ کمک

          نوشته اصلی توسط babak_9051
          سلام.

          یکی از دوستام می خواد با spi کار کنه همه چی رو براش گفتم و هیچ مشکلی نداشت و مدار هم کار میکنه بجز اینکه چطوری از یک بایت بیشتر بفرستم! :angry: زبان سی. محیط کد ویژن . دریافت از طریق اینترابت. اگه لطف کنید و بفرمایید چطور باید این کار رو بکنم ممنون میشم. اگه یه کد ساده برام بنویسید که دیگه عالییی!
          از اساتید کسی هست spi رو حرفه ایی کار کرده باشه و این سوالمو جواب بده؟ /

          دیدگاه


            #6
            پاسخ : ارسال یک فریم از طریق SPI ؟ کمک

            سلام .

            آقا کس به سوالمون جواب نمیده؟

            حالا که اینطوره منم یه سوال دیگه میپرسم :biggrin:

            میکرو مستر پس از انتخاب اسلیو مورد نظرش یه داده رو به اسلیو انتقال میده فرضاً spi(send_code) با اینکار اینتراپت فرستادن فعال میشه و مستر خودش به زیر برنامه اینتراپت spi میره و چرا دیگه از زیر برنامه خارج نمیشه؟؟؟
            باید کاری کنم؟

            ممنون

            دیدگاه


              #7
              پاسخ : ارسال یک فریم از طریق SPI ؟ کمک

              سلام. آقا کسی نیست واقعاً با spi کار کرده باشه؟ من یه سوال ساده کردم !!! :eek:

              چطور یه بایت رو از مستر به اسلیو بفرستم ، اسلیو اونو دریافت کنه اگه درست بود جوابشو به مستر برگردونه؟؟؟

              مثال : مستر 0x55 رو به اسلیو بفرسته و اسلیو اگه درست دریافت کرد عدد 0xaa رو به مست بفرسته .

              با اینترابت Spi باشه.

              ممنون اگه جواب بدین. خیلی گیرم بخدا.

              دیدگاه


                #8
                پاسخ : ارسال یک فریم از طریق SPI ؟ کمک

                نوشته اصلی توسط babak_9051
                سلام. آقا کسی نیست واقعاً با spi کار کرده باشه؟ من یه سوال ساده کردم !!! :eek:

                چطور یه بایت رو از مستر به اسلیو بفرستم ، اسلیو اونو دریافت کنه اگه درست بود جوابشو به مستر برگردونه؟؟؟

                مثال : مستر 0x55 رو به اسلیو بفرسته و اسلیو اگه درست دریافت کرد عدد 0xaa رو به مست بفرسته .

                با اینترابت Spi باشه.

                ممنون اگه جواب بدین. خیلی گیرم بخدا.
                در این ارتباط چون با دوتا شیفت رجیستر سروکار داریم برای ارسال از مستر به اسلیو باید مستر بایت رو ارسال و کلاک برای آن بایت تولید میشود همزمان هم مستر اطلاعاتی را که اسلیو آماده کرده بود دریافت میکنه، برای ارسال از اسلیو به مستر شما باید از این قابلیت استفاده کنید یعنی یک اطلاعت الکی به اسلیو بفرستید و در اسلیو هم قبلا اطلاعات ارسالی رو آماده کرده باشید و به محض اینکه اطلاعات از مستر دریافت بشه اطلاعات اسلیو به سمت مستر میره.
                بگذارعشق خاصیت تو باشد نه رابطه خاص تو باکسی
                موفقیت پیش رفتن است نه به نقطه ی پایان رسیدن
                نلسون ماندلا

                دیدگاه


                  #9
                  پاسخ : ارسال یک فریم از طریق SPI ؟ کمک

                  نوشته اصلی توسط رضا بابایی
                  در این ارتباط چون با دوتا شیفت رجیستر سروکار داریم برای ارسال از مستر به اسلیو باید مستر بایت رو ارسال و کلاک برای آن بایت تولید میشود همزمان هم مستر اطلاعاتی را که اسلیو آماده کرده بود دریافت میکنه، برای ارسال از اسلیو به مستر شما باید از این قابلیت استفاده کنید یعنی یک اطلاعت الکی به اسلیو بفرستید و در اسلیو هم قبلا اطلاعات ارسالی رو آماده کرده باشید و به محض اینکه اطلاعات از مستر دریافت بشه اطلاعات اسلیو به سمت مستر میره.

                  سلام . خوبی آقا رضا؟

                  ممنون از پاسختون.
                  ببینید من درست متوجه شدم:

                  اگه مثلاً من 2 تا اسلیو داشتم مرتب باید اسلیو ها رو توسط مستر انتخاب کنم و یه بار دستور های مستر رو برای اسلیو بفرستم و بار دیگه دوباره باید یه بایت الکی به اسلیو بفرستم تا جواب اسلیو رو دریافت کنم. تا اینجا درست؟ فاصله بین دو تا درخواست به اسلیو چند میلی ثانیه باشه ؟ باید زمان پاسخ از طرف اسلیو رو محاسبه کنم ؟

                  بازم ممنون

                  دیدگاه


                    #10
                    پاسخ : ارسال یک فریم از طریق SPI ؟ کمک

                    از اساتید کسی هست spi رو حرفه ایی کار کرده باشه و این سوالمو جواب بده؟ / :angry:

                    دیدگاه


                      #11
                      پاسخ : ارسال یک فریم از طریق SPI ؟ کمک

                      نوشته اصلی توسط babak_9051

                      اگه مثلاً من 2 تا اسلیو داشتم مرتب باید اسلیو ها رو توسط مستر انتخاب کنم و یه بار دستور های مستر رو برای اسلیو بفرستم و بار دیگه دوباره باید یه بایت الکی به اسلیو بفرستم تا جواب اسلیو رو دریافت کنم. تا اینجا درست؟ فاصله بین دو تا درخواست به اسلیو چند میلی ثانیه باشه ؟

                      بازم ممنون
                      زمان بین 2درخواست بستگی به فرکانس کاری spi داره. اگر شما به این تایم نیاز داری باید حساب کنی دیگه.
                      اگر منظورت این هست که این تاخیر رو توی برنامه بزاری باید بگم نیازی نیست.تابع ارسال spi تا پایان یافتن ارسال صبر میکنه و وقتی از این خط میگزره که ارسال یا دریافت کامل شده باشه.پس شما تو خط بعد با خیال راحت اسلیو رو عوض کنید و چیز دیگه ای رو بفرستید.
                      باید زمان پاسخ از طرف اسلیو رو محاسبه کنم ؟
                      زمان پاسخ اسلیو همون زمان ارسال مستر هست.این دو همزمان انجام میشند.همون طور که بالا گفتم اگه چک بشه که ارسال تموم شده میشه مطمئن بود دریافت هم تموم شده.این چک کردن تو تابع های spi بررسی میشه و نیازی نیست دوباره برسی بشه.
                      [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                      دیدگاه

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