اطلاعیه

Collapse
No announcement yet.

SPI in Codevision

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

    SPI in Codevision

    من بین آی سی اتمگا 16 بعنوان master و یک اتمگا 128 بعنوان slave میخوام ارتباط برقرار کنم
    برنامه هم طبق زیر است(البته تست)
    master:
    کد:
    #include <mega16.h>
    #include <delay.h>
    #include <spi.h>
    
    int m=0;
    
    void main(void)
    {
    
    PORTA=0x00;
    DDRA=0x00;
    
    
    PORTB=0x00;
    DDRB=0xB0;
    
    PORTC=0x00;
    DDRC=0x00;
    
    PORTD=0x00;
    DDRD=0x01;
    
    
    SPCR=0x53;
    SPSR=0X00;
    
    
    while (1)
       {
        if(PINC.0==1)m=1;
        if(PINC.1==1)m=2;
        if(PINC.2==1)m=3;
        if(PINC.3==1)m=4;
        if(PINC.4==1)m=5;
        if(PINC.5==1)m=6;
        if(PINC.6==1)m=7;
        if(PINC.7==1)m=8;
        if(PINA.7==1)m=9;
        if(PINA.6==1)m=10;
        if(PINA.5==1)m=11;
        if(PINA.4==1)m=12;
        if(PINA.3==1)m=13;
        if(PINA.2==1)m=14;
        if(PINA.1==1)m=15;
        if(PINA.0==1)m=16;
    
        spi(m);
        delay_ms(200);
    
       }
    }
    و slave :
    کد:
    #include <mega128a.h>
    #include <delay.h>
    #include <spi.h>
    
    void main(void)
    {
    
    int get=0;
    int g=0;
    
    PORTA=0x00;
    DDRA=0x00;
    
    PORTB=0x00;
    DDRB=0x68;
    
    PORTC=0x00;
    DDRC=0x03;
    
    PORTD=0x00;
    DDRD=0x01;
    
    PORTE=0x00;
    DDRE=0x00;
    
    PORTF=0x00;
    DDRF=0x00;
    
    PORTG=0x00;
    DDRG=0x00;
    
    SPCR=0x43;
    SPSR=0X00;
    
    
    while (1)
       {
        get=spi(g);
        delay_ms(10);
    
        if(get==1)
        {
        PORTB.5=0;
        PORTC.0=1;
    
        PORTD.0=0;
    
        PORTB.6=1;
        PORTC.1=0;
        }
    
        if(get==0)
        {
        PORTB.5=1;
        PORTC.0=0;
    
        PORTD.0=1;
    
        PORTB.6=1;
        PORTC.1=0;
        }
    
    
        if(get==2)
        {
        PORTB.5=0;
        PORTC.0=0;
    
        PORTB.6=0;
        PORTC.1=1;
        }
       }
    }
    ولی فقط شرط g=0 اجرا میشه و مابقی دستورات از سمت master در slave اجرا نمیشه
    تصویر شبیه سازی هم در زیر قرار داده شده
    ممنون میشم کمک کنین.
    969
    خیر
    0%
    560
    بلی
    0%
    409

    #2
    پاسخ : SPI in Codevision

    سلام
    1) ارسال مقدار 16 یعنی ارسال 2 بایت....در حالی که یه بیت میگیری تو دریافت کننده-----1 بیت = 0-15
    2) از وقفه های spi استفاده کن
    3) به پروتئوس زیاد من اعتماد ندارم مدار رو تو عمد ببند....
    4) مدار رو تا حد امکان ساده کن و امکانات رو کم کم بهش اضاف کن و ببین تو هر مرحله کار میکنه یا نه...اگه کار نکرد یعنی مشکل رو پیدا کردی >>>> بعد اگه نتونستی بیا تو انجمن مطرح کن که هم پروژه ساده تره و هم میدونی مشکل دفقیقا کجاس و فقط روش حلش رو نمیدونی.....این جور سوالا رو کسی جواب نمیده...دلیلش هم معلومه
    5) ببین فرکانس های دو میکرو برابره
    6) ریجستر ها رو بررسی کن
    اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

    اگه دوس دارید سریع به جواب برسید :
    1) قبل از پرسیدن سوال، بسرچید.
    2) سوالاتون رو با جزئیات کامل مطرح کنید.

    دیدگاه


      #3
      پاسخ : SPI in Codevision

      نوشته اصلی توسط md3848
      سلام
      1) ارسال مقدار 16 یعنی ارسال 2 بایت....در حالی که یه بیت میگیری تو دریافت کننده-----1 بیت = 0-15
      2) از وقفه های spi استفاده کن
      3) به پروتئوس زیاد من اعتماد ندارم مدار رو تو عمد ببند....
      4) مدار رو تا حد امکان ساده کن و امکانات رو کم کم بهش اضاف کن و ببین تو هر مرحله کار میکنه یا نه...اگه کار نکرد یعنی مشکل رو پیدا کردی >>>> بعد اگه نتونستی بیا تو انجمن مطرح کن که هم پروژه ساده تره و هم میدونی مشکل دفقیقا کجاس و فقط روش حلش رو نمیدونی.....این جور سوالا رو کسی جواب نمیده...دلیلش هم معلومه
      5) ببین فرکانس های دو میکرو برابره
      6) ریجستر ها رو بررسی کن
      ممنون مهندس
      حل شد
      مشکل از clock rate دوتا میکرو بود که تنظیم نکرده بودم
      بابت 16 هم
      ممنون،یا علی

      دیدگاه

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