اطلاعیه

Collapse
No announcement yet.

دریافت کاراکتر از وقفه usart و ارسال ش با وقفه spi

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

    دریافت کاراکتر از وقفه usart و ارسال ش با وقفه spi

    سلام دوستان
    آیا کسی هست که بتونه کمکم کنه
    من میخام از طریق وقفه ی یوزارت کاراکتر به کاراکتر دریافت کنم
    و اون رو با وقفه ی spi ارسال کنم
    .
    خیلی ساده س ولی انقدر بالاپایین ش گردم گیج شدم
    الان دارم تو وقفه ی یوزارت با کتابخانه spi.h ارسال ش میکنم اما غلطه چون در سمت گیرنده دارم تو وقفه spi میگیرمش
    لطفا کمک کنید
    :rolleyes:
    یا اینکه تو گیرنده هم با spi.h بگیرمش
    .
    این طوری درسته آیا ؟

    [code=cpp]
    #include <mega8.h>
    #include <delay.h>
    #include <stdio.h>
    #include <spi.h>

    /*
    /// global vars
    */

    unsigned char buffer_usart , buffer_spi ;

    /*
    //// usart rx isr
    */

    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    buffer_usart = UDR ;
    }

    /*
    //// spi isr
    */

    interrupt [SPI_STC] void spi_isr(void)
    {
    buffer_spi = SPDR ;
    spi(buffer_usart) ;
    }
    [/code]

    در حال حاظر این طوری ارسال میکنم ( تو گیرنده در وقفه اس پی آی میگیرم ) :

    [code=cpp]
    #include <mega8.h>
    #include <delay.h>
    #include <stdio.h>
    #include <spi.h>

    /*
    /// global vars
    */

    unsigned char buffer_usart , buffer_spi ;

    /*
    //// usart rx isr
    */

    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    buffer_usart = UDR ;
    spi(buffer_usart) ;
    }

    [/code]

    #2
    پاسخ : دریافت کاراکتر از وقفه usart و ارسال ش با وقفه spi

    دوست عزیز ، ارتباط SPI در AVR وقفه دریافت نداره، بلکه وقفه اتمام ارسال داره.
    ---------
    .
    .
    ...........

    دیدگاه


      #3
      پاسخ : دریافت کاراکتر از وقفه usart و ارسال ش با وقفه spi

      ممنون
      ولی من الان دارم در سمت گیرنده این طوری دریافت میکنم
      [code=cpp]
      interrupt [SPI_STC] void spi_isr(void)
      {
      buffer_spi = SPDR ;
      switch(buffer_spi)
      {
      case 0x01 : k='a' ; break ;
      case 0x02 : k='b' ; break ;
      case 0x03 : k='c' ; break ;
      case 0x04 : k='d' ; break ;
      .
      .
      .
      }
      lcd_gotoxy(0,0) ;
      lcd_putchar(k) ;
      }
      [/code]l
      حالا سوالم در واقع اینه در سمت ارسال چطوری باید بنویسم ؟
      همون spi(buffer_usart) در روتین وقفه یوزارت درسته یا نه ؟

      دیدگاه


        #4
        پاسخ : دریافت کاراکتر از وقفه usart و ارسال ش با وقفه spi

        الان چون در سمت ارسال با دستور spi(x) ارسال میکنم
        گاراکترها درست دریافت نمیشن

        دیدگاه


          #5
          پاسخ : دریافت کاراکتر از وقفه usart و ارسال ش با وقفه spi

          من برنامه ات نمی رسم کامل بخونم با دقت اما حدس می زنم در دریافت مشکل داری توصیه می کنم تو شبیه سازی مثلا پروتوس بیای با ابزار ها دیباگ ای که داره خروجی میکرو اول ات رو چک کنی ترجیحا اول فقط uart بعد spi رو چک کن بعد به هم متصل کن اگه مشکلی وجود داشت در اتصال اول به همین صورت در خروجی

          در مورد دریافت از spi هم الان دقیقا در خاطرم نیست که اینتراپت واسه درسافت می تونه بده توابع اش یا نه اما چون بسیار بسیار پروتکل ساده ای هست می تونید پایه دریافت رو به اینتراپت بدید و خودتون بخونین اطلاعات رو اینجوری اینتراپت هم می ده

          موفق باشید
          التماس دعا

          دیدگاه


            #6
            پاسخ : دریافت کاراکتر از وقفه usart و ارسال ش با وقفه spi

            ممنون
            با یک تست متوجه شدم که ارسال با دستور spi(x) هم درسته
            تنها ایراد پروژه م خوندن کد کیبرد با یوزارت میکروست
            همین
            .
            الان در سمت دریافت دارم :
            [code=cpp] interrupt [SPI_STC] void spi_isr(void)
            {
            buffer_spi = SPDR ;
            switch(buffer_spi)
            {
            case 0x01 : k='a' ; break ;
            case 0x02 : k='b' ; break ;
            case 0x03 : k='c' ; break ;
            case 0x04 : k='d' ; break ;
            .
            .
            .
            }
            lcd_gotoxy(0,0) ;
            lcd_putchar(k) ;
            }
            [/code]
            در سمت ارسال هم بصورت زیر :
            interrupt [USART_RXC] void usart_rx_isr(void)
            {
            buffer_usart = UDR ;
            spi(buffer_usart) ;
            }

            دیدگاه

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