اطلاعیه

Collapse
No announcement yet.

مشکل در ارتباط spi در codvision

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

    مشکل در ارتباط spi در codvision

    سلام
    من برنامه زیاد نوشتم ولی این اولین مرتبه است که با spi کار میکنم.میخواستم دوستان یه نگاهی به این برنامه ساده بکنن و بگن مشکلش کجاست؟ خیلی ممنون :redface:



    برای MASTER

    #include <mega32.h>
    #include <delay.h>
    #include <spi.h>
    void init (void);
    void main (void)
    {
    unsigned char data_in,data_out;
    init();
    while(1)
    {
    data_out=PINA;
    data_in=spi(data_out);
    PORTD=data_in;
    delay_ms(10);
    }
    }
    void init (void)
    {
    DDRA=0x00,PORTA=0xff;
    DDRD=0xff,PORTD=0x00;
    DDRB=0b10110000,PORTB=0;
    SPCR=0x71;
    }




    و برای SLAVE:
    #include <mega32.h>
    #include <spi.h>
    void init (void);
    void main (void)
    {
    unsigned char data_in,data_out;
    init();
    while(1)
    {
    data_out=PINA;
    data_in=spi(data_out);
    PORTD=data_in;
    }
    }
    void init (void)
    {
    DDRA=0x00,PORTA=0xff;
    DDRD=0xff,PORTD=0x00;
    DDRB=0x40;
    SPCR=0x61;
    }
    فرزندم در راه است

    #2
    پاسخ : مشکل در ارتباط spi در codvision

    سلام
    1- شما بگو چه انتظاری از برنامه داری
    2- بجای انتظاره شما برنامه چه رفتاری داره یا چه اتفاقی می افته

    دیدگاه


      #3
      پاسخ : مشکل در ارتباط spi در codvision

      سلام من این یکی برنامه را نوشتم جواب هم داد انتظار من این است که فقط اطلاعات از روی پین a گرفته شده و روی پورت d نمایش داده شود (از slave به master و برعکس) میخواهم طرز کار با تابع spi.h و اینکه اصلا بیت های CPOL و CPHA در ثبات SPCR چه کاری انجام میدن.چون من وقتی هردو را صفر میکنم(هم در MASTER و هم در SLAVE) اصلا برنامه کار نمیده ولی وقتی هر دو را یک(هم در MASTER و هم در SLAVE) میکنم جواب میده میخوام بدونم مگه بیت CPOL مال این نیست که مقدار Clock Pulse در لحظه اول چند باشه و بیت CHPA هم مال اینکه دیتا تو کدوم لبه نمونه برداری بشه؟ پس نباید فرقی بکنه!!!در ضمن آیا میشه به روش polling با spi کار کرد ؟

      MASTER:
      #include <mega32.h>
      #include <delay.h>
      volatile unsigned char get_data;
      void main (void)
      {
      unsigned char send_data;
      DDRD=0x00;PORTD=255;
      DDRA=0xff;
      DDRB=0xb0;
      PORTB=0x40;
      SPCR=0xff;
      #asm("sei"
      while(1)
      {
      send_data=PIND;
      SPDR=send_data;
      PORTA=get_data;
      delay_ms(10);
      }
      }
      interrupt [13] void spi_receive(void)
      {
      get_data=SPDR;
      }



      SLAVE:
      #include <mega32.h>
      #include <delay.h>
      volatile unsigned char get_data;
      void main (void)
      {
      unsigned char send_data;
      DDRA=0xff;DDRD=0,PORTD=255;
      DDRB=0x40;
      PORTB=0x40;
      SPCR=0xef;
      #asm("sei"
      while(1)
      {
      send_data=PIND;
      SPDR=send_data;
      PORTA=get_data;
      delay_ms(10);
      }
      }
      interrupt [13] void spi_send (void)
      {
      get_data=SPDR;
      }
      فرزندم در راه است

      دیدگاه

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