ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

نمایش نتیجه های نظرسنجی ها: در ارتباط spi بین دو میکرو فرقی داره که دو میکرو متفاوت باشند؟(کدویژن)

رأی دهندگان
7. شما نمی توانید در این نظرسنجی رای دهید.
  • خیر

    5 71.43%
  • بلی

    2 28.57%
نظرسنجی با انتخاب چندگانه
نمایش نتایج: از 1 به 3 از 3

موضوع: SPI in Codevision

  1. #1
    2013/05/20
    112
    2

    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 اجرا نمیشه
    تصویر شبیه سازی هم در زیر قرار داده شده
    ممنون میشم کمک کنین.
  2. #2
    2014/05/29
    قدس
    1,229
    122

    پاسخ : SPI in Codevision

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

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

    پاسخ : SPI in Codevision

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

موضوعات مشابه

  1. DAC در CODEVISION
    توسط hofakiiran در انجمن XMEGA
    پاسخ: 3
    آخرين نوشته: 2015/04/19, 11:17
  2. دقت ADC در codevision
    توسط alidehghan288 در انجمن میکروکنترلرهای AVR
    پاسخ: 6
    آخرين نوشته: 2015/01/19, 16:13
  3. codevision avr v3.07
    توسط pesare shoja در انجمن میکروکنترلرهای AVR
    پاسخ: 17
    آخرين نوشته: 2014/08/05, 11:37
  4. spi در COdevision
    توسط arash13 در انجمن میکروکنترلرهای AVR
    پاسخ: 4
    آخرين نوشته: 2012/06/29, 22:27
  5. usb + codevision
    توسط black-scorpion در انجمن میکروکنترلرهای AVR
    پاسخ: 3
    آخرين نوشته: 2011/06/14, 14:31

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •