به مشکل عجیبی بر خوردم ، به کد پایین توجه کنید:
این کد در عمل باید روی پایه mosi از پورت C دوتا گروه مجموعه پالس مختلف اعمال کنه ولی در عمل هردوتا یکی هستن ینی فقط در عمل روی پایه MOSI داده 0x54 رو میفرسته .
این مشکلو با قرار دادن یک delay بین دوتا ارسال حل کردم ولی میخواستم دلیل این مشکلو بدونم :
اما سوال دومم در مورد خروجی کردن بیت 4 تا 7 از پورت B هست . کد پایین برای اینکار نوشته شده :
اما در عمل هیچ تغییری روی پایه ها نمیبینم . درضمن ADC این پورت فعال هست و از چهار بیت 0 تا 3 این پورت برای خوندن ADC استفاده شده .
ولی وقتی که این عمل رو برعکس میکنم درست کار میکنه ، یعنی بیت های 0 تا 3 رو خروجی تعریف میکنم و بیت های 4 تا 7 رو برای خوندن ADC استفاده میکنم مشکلی ندارم . علت این مشکل چی هست؟ در ضمن بنده حتی در حالت بدون فعال کردن ADC هم این رو امتحان کردم حتی روی سه تا میکروی مختلف ولی باز هم همین مشکل وجود داشت .
کد:
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
این مشکلو با قرار دادن یک 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
کد:
PORTB.OUT=0x00; PORTB.DIR=0xF0; void main(){ while(1){ PORTB.OUTTGL = 0xF0; delay_us(100); } }
ولی وقتی که این عمل رو برعکس میکنم درست کار میکنه ، یعنی بیت های 0 تا 3 رو خروجی تعریف میکنم و بیت های 4 تا 7 رو برای خوندن ADC استفاده میکنم مشکلی ندارم . علت این مشکل چی هست؟ در ضمن بنده حتی در حالت بدون فعال کردن ADC هم این رو امتحان کردم حتی روی سه تا میکروی مختلف ولی باز هم همین مشکل وجود داشت .
دیدگاه