اطلاعیه

Collapse
No announcement yet.

تبدیل توابع I2C به SPI

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

    تبدیل توابع I2C به SPI

    سلام دوستان
    این صفحه رو باز کردم تا کسایی که با تبدیل توابع پرتوکل I2C به SPI مشکل دارن بتونن مشکلشونو حل کنن (از جمله خودم) :angry: :angry: :cry:
    اگه ما همچین تابعی داشته باشیم و بخواییم به صورت SPI بنویسیمش چه جوری میشه ؟؟؟
    کد:
    unsigned char read_i2c(unsigned char BusAddres , unsigned char Reg , unsigned char Ack )
    {
    unsigned char Data;
    i2c_start();
    i2c_write(BusAddres);
    i2c_write(Reg);
    i2c_start();
    i2c_write(BusAddres + 1);
    delay_us(10);
    Data=spi_read(Ack);
    i2c_stop();
    return Data;
    }
    همچینین اگه همچین کدی داشته باشیم SPIیش چی میشه ؟؟؟
    کد:
    void write_i2c(unsigned char BusAddres , unsigned char Reg , unsigned char Data)
    {
    i2c_start();
    i2c_write(BusAddres);
    i2c_write(Reg);
    i2c_write(Data);
    i2c_stop();
    }
    ممنون میشم اگه دوستان ما رو هم تو علم خودشون شریک کنن :smile:

    #2
    پاسخ : تبدیل توابع I2C به SPI

    یعنی کسی نیست بهم کمک کنه ؟؟؟ :sad: :sad:

    دیدگاه


      #3
      پاسخ : تبدیل توابع I2C به SPI

      من در تعجب هستم که چرا شما دیتاشیت میکرو رو نمی خونید!؟ در حالی که دیتاشیت میکروهای سری AVR اتمل یکی از بهترین ها هستش واسه کار! مثلا دیتاشیت مگا16 رو بگیر و صفحه 135 که مربوط به Serial Peripheral Interface – SPI هستش رو ببین. کلی تابع هم براتون نوشته.

      من فکر میکنم که شما واسه نوشتن کافیه از این استفاده کنید:


      کد:
      void SPI_MasterTransmit(char cData)
      {
      /* Start transmission */
      SPDR = cData;
      /* Wait for transmission complete */
      while(!(SPSR & (1<<SPIF)))
      ;
      }
      واسه دریافت هم از این:

      کد:
      char SPI_SlaveReceive(void)
      {
      /* Wait for reception complete */
      while(!(SPSR & (1<<SPIF)))
      ;
      /* Return data register */
      return SPDR;
      }
      این دو تابع دقیقا شبیه اون بالایی میشن فقط یکی دو مورد کم و کسری توی آرگومان ها دارن که علتش اینه که توی I2C همه دستگاه ها رو یه باس هستن و صدا زده میشن و بهشون مقدار داده میشه ولی SPI یه پین به اسم SS داره که کارش اینه که باهاش دستگاه مورد نظر رو انتخاب میکنی. SPI از I2C خیلی بهتره در بیشتر موراد. یه مقدار جستجو کنید و همچنین یه مقدار مطالعه شما می تونید خیلی راحت کارتون رو راه بندازید. نگران نباشید. شما می تونید.

      دیدگاه

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