اطلاعیه

Collapse
No announcement yet.

مشکل ساده در SPI

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

    مشکل ساده در SPI

    سلام به دوستان انجمن ؛ کلا دیوانه شدم من هر چی به این SPI کد ویژن ور میرم یک دستور ساده رو هم تو پروتئوس اجرا نمی کنه :angry:

    د وستان برنامه تو لینک زیر هست لطفا ببینید اشکال کجا میشه ؛ تو این برناهم من از مستر میخوام وقتی که کلید رو فشار دادم یک ال ای دی تو اسلیو روشن بشه همین اما گویا کلا من و میکرو رو یک دنده نیستیم !
    http://Trainbit.com/files/3987141884/SPI.rar
    لینک برنامه در پروتئوس :
    http://Trainbit.com/files/5987141884/proteus.rar

    برنامه مستر :
    کد:
    while (1)
       {
       // Place your code here
        if(a==0) {
        if(PINC.0==0) {
        b=1;
        spi(b);
        a=1;
        }
        }
       }
    برنامه اسلیو

    کد:
    while (1)
       {
       b=spi(1);
       if(b==1) {
       PORTD.0=1;
       }
    
       }
    آخه از این برنامه ساده تر چی بگم والا !
    برای تغییر دادن در زندگی اول باید خودم تغییر کنم نه دیگران!
    یک اشتباه جدید در زندگی بهتر از تکرار اشتباه قبلی است .

    #2
    پاسخ : مشکل ساده در SPI

    نوشته اصلی توسط Fanoudi
    سلام به دوستان انجمن ؛ کلا دیوانه شدم من هر چی به این SPI کد ویژن ور میرم یک دستور ساده رو هم تو پروتئوس اجرا نمی کنه :angry:

    د وستان برنامه تو لینک زیر هست لطفا ببینید اشکال کجا میشه ؛ تو این برناهم من از مستر میخوام وقتی که کلید رو فشار دادم یک ال ای دی تو اسلیو روشن بشه همین اما گویا کلا من و میکرو رو یک دنده نیستیم !
    http://Trainbit.com/files/3987141884/SPI.rar
    لینک برنامه در پروتئوس :
    http://Trainbit.com/files/5987141884/proteus.rar

    برنامه مستر :
    کد:
    while (1)
       {
       // Place your code here
        if(a==0) {
        if(PINC.0==0) {
        b=1;
        spi(b);
        a=1;
        }
        }
       }
    برنامه اسلیو

    کد:
    while (1)
       {
       b=spi(1);
       if(b==1) {
       PORTD.0=1;
       }
    
       }
    آخه از این برنامه ساده تر چی بگم والا !
    هر موقع تو انجمن میام به سوالم پاسخ داده نمیشه در صورتی که پست های دیگه حداقل یک پاسخ داره مثل اینکه حال ما رو هم میگیرن
    برای تغییر دادن در زندگی اول باید خودم تغییر کنم نه دیگران!
    یک اشتباه جدید در زندگی بهتر از تکرار اشتباه قبلی است .

    دیدگاه


      #3
      پاسخ : مشکل ساده در SPI

      با سلام
      اینم یه مثال همراه با فایل پروتئوس

      http://uplod.ir/zsy5558k5vul/spi.rar.htm

      دیدگاه


        #4
        پاسخ : مشکل ساده در SPI

        نوشته اصلی توسط 1morteza
        با سلام
        اینم یه مثال همراه با فایل پروتئوس

        http://uplod.ir/zsy5558k5vul/spi.rar.htm
        متشکرم
        باور کن این فایل شما رو دارم و نگاه کردم قبلا اما خودم مینویسم جواب نمیگیره میخوام عیب برنامه رو بدونم کجاست ؟
        اگه کسی هست برنامم رو نگاه کنه
        برای تغییر دادن در زندگی اول باید خودم تغییر کنم نه دیگران!
        یک اشتباه جدید در زندگی بهتر از تکرار اشتباه قبلی است .

        دیدگاه


          #5
          پاسخ : مشکل ساده در SPI

          نوشته اصلی توسط 1morteza
          با سلام
          اینم یه مثال همراه با فایل پروتئوس

          http://uplod.ir/zsy5558k5vul/spi.rar.htm
          سلام
          عالی بود
          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
          معرفی نرم افزار Codewizard PWM
          با من بیشتر آشنا شوید

          دیدگاه


            #6
            پاسخ : مشکل ساده در SPI

            ببین دوست من برای مستر کدی که نوشتی درسته
            این هم یک نمونه که تا عدد 255 را توی SPI خروجی میده:
            کد:
            #include <mega16.h>
            #include <delay.h>
            // SPI functions
            #include <spi.h>
            
            unsigned char b=0;
            
            void main(void)
            {
            // Port B initialization
            // Func7=Out Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In 
            // State7=0 State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T 
            PORTB=0x00;
            DDRB=0xB0;
            // SPI initialization
            // SPI Type: Master
            // SPI Clock Rate: 2000.000 kHz
            // SPI Clock Phase: Cycle Start
            // SPI Clock Polarity: High
            // SPI Data Order: MSB First
            SPCR=0x58;
            SPSR=0x00;
              
            while (b<255)
               {
                delay_ms(100);
                spi(b++);
               } 
               
               
                while(1);
            }
            تا اینجا درست.
            --------------------------------------
            ولی برای دریافت از وقفه استفاده کنی بهتره:
            کد:
            #include <mega16.h>
            
            bit SPI_Flag =0;
            unsigned char data;
            interrupt [SPI_STC] void spi_isr(void)
            {
            data=SPDR;
            SPI_Flag = 1;
            }
            
            void main(void)
            {
            DDRA = 0xFF;
            
            // Port B initialization
            // Func7=In Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
            // State7=T State6=0 State5=T State4=T State3=T State2=T State1=T State0=T 
            PORTB=0x00;
            DDRB=0x40;
            
            // SPI initialization
            // SPI Type: Slave
            // SPI Clock Phase: Cycle Start
            // SPI Clock Polarity: Low
            // SPI Data Order: MSB First
            SPCR=0xC0;
            SPSR=0x00;
            
            // Clear the SPI interrupt flag
            #asm
              in  r30,spsr
              in  r30,spdr
            #endasm
            
            #asm("sei")
            
            while (1)
               {
                if(SPI_Flag)
                {
                PORTA=data;  
                SPI_Flag =0;
                }
               }
            }
            خیلی راحته
            نمیدونم توی چی مشکل داری
            کد بالا را در proteus تست کردم کار میکنه
            امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

            دیدگاه


              #7
              پاسخ : مشکل ساده در SPI

              دوستان ممنون پس رو تصحیح کردم کار کرد و بهتره از وقفه استفاده شود متشکرم مهندسان عزیز :applause: :applause: :wow: :wow:
              برای تغییر دادن در زندگی اول باید خودم تغییر کنم نه دیگران!
              یک اشتباه جدید در زندگی بهتر از تکرار اشتباه قبلی است .

              دیدگاه


                #8
                پاسخ : پاسخ : مشکل ساده در SPI

                نوشته اصلی توسط Abbas Sarami
                ببین دوست من برای مستر کدی که نوشتی درسته
                این هم یک نمونه که تا عدد 255 را توی SPI خروجی میده:
                کد:
                #include <mega16.h>
                #include <delay.h>
                // SPI functions
                #include <spi.h>
                
                unsigned char b=0;
                
                void main(void)
                {
                // Port B initialization
                // Func7=Out Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In 
                // State7=0 State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T 
                PORTB=0x00;
                DDRB=0xB0;
                // SPI initialization
                // SPI Type: Master
                // SPI Clock Rate: 2000.000 kHz
                // SPI Clock Phase: Cycle Start
                // SPI Clock Polarity: High
                // SPI Data Order: MSB First
                SPCR=0x58;
                SPSR=0x00;
                  
                while (b<255)
                   {
                    delay_ms(100);
                    spi(b++);
                   } 
                   
                   
                    while(1);
                }
                تا اینجا درست.
                --------------------------------------
                ولی برای دریافت از وقفه استفاده کنی بهتره:
                کد:
                #include <mega16.h>
                
                bit SPI_Flag =0;
                unsigned char data;
                interrupt [SPI_STC] void spi_isr(void)
                {
                data=SPDR;
                SPI_Flag = 1;
                }
                
                void main(void)
                {
                DDRA = 0xFF;
                
                // Port B initialization
                // Func7=In Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                // State7=T State6=0 State5=T State4=T State3=T State2=T State1=T State0=T 
                PORTB=0x00;
                DDRB=0x40;
                
                // SPI initialization
                // SPI Type: Slave
                // SPI Clock Phase: Cycle Start
                // SPI Clock Polarity: Low
                // SPI Data Order: MSB First
                SPCR=0xC0;
                SPSR=0x00;
                
                // Clear the SPI interrupt flag
                #asm
                  in  r30,spsr
                  in  r30,spdr
                #endasm
                
                #asm("sei")
                
                while (1)
                   {
                    if(SPI_Flag)
                    {
                    PORTA=data;  
                    SPI_Flag =0;
                    }
                   }
                }
                خیلی راحته
                نمیدونم توی چی مشکل داری
                کد بالا را در proteus تست کردم کار میکنه
                مهندسان دقت کنید به کد ویژن اعتماد نکنید میدونید برای چی؟! کد های SPI من رو بد تولید میکرد من کد های مربوط به تنظیم SPI این مهندس عزیز رو گذاشتم کار کرد معلو نیست نسخه کد ویژن من چه جوریه ؟ اما کد های تولیدی کد ویزارد کار نمیداد
                برای تغییر دادن در زندگی اول باید خودم تغییر کنم نه دیگران!
                یک اشتباه جدید در زندگی بهتر از تکرار اشتباه قبلی است .

                دیدگاه


                  #9
                  پاسخ : مشکل ساده در SPI

                  این نسخه رو دارم عالی جواب داده ...
                  با SPI کار نکردم ... ولی ببین این نسخه چطوره ...
                  http://s5.picofile.com/file/8119398126/CodeVisionAVR_V2_05_3_Std_Techno_Electro_COM_.zip. html
                  [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                  معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                  معرفی نرم افزار Codewizard PWM
                  با من بیشتر آشنا شوید

                  دیدگاه

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