اطلاعیه

Collapse
No announcement yet.

ADS7843 پشت سر هم اینتراپت میدهد...

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

    ADS7843 پشت سر هم اینتراپت میدهد...

    با سلام. من با ATXMega128a1 و ای سی ADS7843 میخوام یه تاچ 128x64 رو راه اندازی کنم.
    یه مشکل بزرگ پیش اومده که با یک بار لمس تاچ پایه اینتراپت بجای اینکه یک بار تحریک شود ، پشت سر هم اینتراپت میدهد.
    این هم کد :
    کد:
    //------------------------------------------------------------------------------
    void Init_SPIF()
    {
    	PORTF_DIRSET = _BV(5) | _BV(7) | _BV(4)| _BV(2)| _BV(1);
    	PORTF.PIN6CTRL = PORT_OPC_WIREDANDPULL_gc;
    	PORTF_OUTSET = _BV(5) | _BV(4) | _BV(2)| _BV(1);
    	PORTF_OUTCLR = _BV(7) | _BV(6);
    	SPIF.CTRL = 0x53;
    }
    //------------------------------------------------------------------------------
    void InitTouchInterrupt()
    {
    	PORTF.OUTCLR=_BV(0);
    	PORTF.DIRCLR=_BV(0);
    	PORTF.PIN0CTRL=0;
    	PORTF.INTCTRL=(PORTF.INTCTRL & (~(PORT_INT1LVL_gm | PORT_INT1LVL_gm))) |PORT_INT1LVL_OFF_gc | PORT_INT0LVL_HI_gc;
    	PORTF.INT0MASK=0x01;
    	PORTF.INT1MASK=0x00;
    }
    //------------------------------------------------------------------------------
    byte SPIF_TxRx(byte d)
    {
    	SPIF_DATA = d;
      while(!(SPIF_STATUS & _BV(7)));
    	return SPIF_DATA;
    }
    //------------------------------------------------------------------------------
    bool Read_XY(uint *x,uint *y)
    {
    	byte spi_buf[10];
    	
    	PORTF_OUTCLR = _BV(2);
    	spi_buf[0] = SPIF_TxRx(0x90);
    	spi_buf[1] = SPIF_TxRx(0);
    	spi_buf[2] = SPIF_TxRx(0xD0);
    	spi_buf[3] = SPIF_TxRx(0);
    	spi_buf[4] = SPIF_TxRx(0);
    	PORTF_OUTSET = _BV(2);
    	
    	*y = (spi_buf[1] << 5);
    	*y |= (spi_buf[2] >> 3);
    	*x = (spi_buf[3] << 5);
    	*x |= (spi_buf[4] >> 3);
    }

    #2
    پاسخ : ADS7843 پشت سر هم اینتراپت میدهد...

    سلام دوست عزیز
    من در فشردن کلید این مشکل رو داشتم که در پست زیر به نتیجه رسید . مشاهده نمائید شاید مشکل شما نیز حل شود .

    http://www.eca.ir/forum2/index.php?topic=90706.0

    - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

    دیدگاه


      #3
      پاسخ : ADS7843 پشت سر هم اینتراپت میدهد...

      ممنون. اما مشکل من مثل شما نیست. پشت سر هم و مثلا با فرکانس 1 کیلو اینتراپت از طرف ADS7843 ارسال میشه.

      دیدگاه


        #4
        پاسخ : ADS7843 پشت سر هم اینتراپت میدهد...

        سلام
        تازه فهمیدم مثل این میمونه که یه جای تاچ بهم چسبیده باشه ؟ درسته ؟
        - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

        دیدگاه


          #5
          پاسخ : ADS7843 پشت سر هم اینتراپت میدهد...

          درست یادم نیست چطوری این مشکل رو حل کردم. یه چیزایی یادمه که چیکار کردم ولی دلیلشو یادم نمیاد. خیلی وقت پیش بود.

          وقفه که میاد با لبه بالارونده نگیر. وقتی رو لبه بالا رونده دیتا رو بخونی پایه مقفه صفر میشه و دوباره وقفه میده. یعنی وقفه میاد شما دیتا رو میخونی. (پایه وقفه هنوز 1 هستش) پایه وقفه صفر میشه دوباره وقفه میده. انقدر این کارو میکنه که .......
          وقفه رو تو لبه پایین رونده بخون. من خودم نمیدونم چرا تو برنامه م تو لبه پایین رونده هم نخوندم. حساس کردم به هر دو لبه بعد شرط گزاشتم که اگر پایه صفر بود تاچ رو بخون. :|
          با این کار مشکل من حل شده.
          حیف از من خسته- حیف از همین چن خط
          به اصل و به ذات و- به باعثت لعنت

          K.Show

          دیدگاه

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