اطلاعیه

Collapse
No announcement yet.

مشکل در SPI و تعریف خروجی پورت B بیت 7

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

    مشکل در SPI و تعریف خروجی پورت B بیت 7

    به مشکل عجیبی بر خوردم ، به کد پایین توجه کنید:
    کد:
    SET_SPIC_SS_LOW
    
    SPIC.DATA=0x12;
    
    while ((SPIC.STATUS & SPI_IF_bm)==0);
    
    SPIC.DATA=0x54;
    
    while ((SPIC.STATUS & SPI_IF_bm)==0);
    
    SET_SPIC_SS_HIGH
    این کد در عمل باید روی پایه mosi از پورت C دوتا گروه مجموعه پالس مختلف اعمال کنه ولی در عمل هردوتا یکی هستن ینی فقط در عمل روی پایه MOSI داده 0x54 رو میفرسته .

    این مشکلو با قرار دادن یک delay بین دوتا ارسال حل کردم ولی میخواستم دلیل این مشکلو بدونم :
    کد:
    SET_SPIC_SS_LOW
    
    SPIC.DATA=0x12;
    
    while ((SPIC.STATUS & SPI_IF_bm)==0);
    
    delay_us(10);
    
    SPIC.DATA=0x54;
    
    while ((SPIC.STATUS & SPI_IF_bm)==0);
    
    SET_SPIC_SS_HIGH
    اما سوال دومم در مورد خروجی کردن بیت 4 تا 7 از پورت B هست . کد پایین برای اینکار نوشته شده :

    کد:
    PORTB.OUT=0x00;
    PORTB.DIR=0xF0;
    
    void main(){
    while(1){
    PORTB.OUTTGL = 0xF0;
    delay_us(100);
    }
    }
    اما در عمل هیچ تغییری روی پایه ها نمیبینم . درضمن ADC این پورت فعال هست و از چهار بیت 0 تا 3 این پورت برای خوندن ADC استفاده شده .
    ولی وقتی که این عمل رو برعکس میکنم درست کار میکنه ، یعنی بیت های 0 تا 3 رو خروجی تعریف میکنم و بیت های 4 تا 7 رو برای خوندن ADC استفاده میکنم مشکلی ندارم . علت این مشکل چی هست؟ در ضمن بنده حتی در حالت بدون فعال کردن ADC هم این رو امتحان کردم حتی روی سه تا میکروی مختلف ولی باز هم همین مشکل وجود داشت .
    يا حق

    #2
    پاسخ : مشکل در SPI و تعریف خروجی پورت B بیت 7

    در مورد سوال مطرح شده در ارتباط SPI، بعد از هر while یکبار مقدار SPIC.DATA را بخوانید (مثلا متغیری را برابر این رجیستر قرار دهید) و نتیجه را اعلام کنید.

    در مورد سوال بعدی، PB4 تا PB7 در سری های A1 و A3 بصورت پیش فرض در اختیار ارتباط JTAG هستند و باید فیوزبیت JTAGEN در FUSEBYTE4 را غیر فعال کنید.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #3
      پاسخ : پاسخ : مشکل در SPI و تعریف خروجی پورت B بیت 7

      نوشته اصلی توسط طراح
      در مورد سوال مطرح شده در ارتباط SPI، بعد از هر while یکبار مقدار SPIC.DATA را بخوانید (مثلا متغیری را برابر این رجیستر قرار دهید) و نتیجه را اعلام کنید.

      در مورد سوال بعدی، PB4 تا PB7 در سری های A1 و A3 بصورت پیش فرض در اختیار ارتباط JTAG هستند و باید فیوزبیت JTAGEN در FUSEBYTE4 را غیر فعال کنید.
      آقای مهندس واقعا ازتون ممنونم . مشکل دوم همونطور که فرمودید به خاطر فعال بودن JTAGEN بود . اما در مورد سوال اول ایده شما رو استفاده کردم ولی جواب نداد . به هر حال واقعا لطف کردین. یک دنیا ممنون.
      یه نکته جالب رو کشف کردم ، البته قطعا شما هم میدونستید ، اینکه برای اینکه SPI توی مد مستر کار کنه حتما باید اون پایه SS رو خروجی تعریف کنیم چه بخوایم ازش استفاده کنیم و چه نخوایم . یعنی حتی اگر بخواهیم از یک پایه دیگری برای این کار استفاده کنیم حتما بایید این پایه خروجی تعریف بشه.
      يا حق

      دیدگاه


        #4
        پاسخ : مشکل در SPI و تعریف خروجی پورت B بیت 7

        بعد از هربار یک شدن Interrupt flag، برای پاک شدن آن در صورت عدم وجود وقفه باید ابتدا رجیستر STATUS و بعد DATA خوانده شوند. اما در برنامه شما چنین روالی انجام نمی شود که به همین دلیل دسترسی به DATA بعد از while توصیه شد. در مورد پین SS هم لازم نیست حتما خروجی باشد. اما در صورت ورودی بودن در مد مستر باید به High متصل شود.
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه

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