اطلاعیه

Collapse
No announcement yet.

مشکل با ADS7843

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

    مشکل با ADS7843

    من با این آی سی دو تا مشکل دارم.
    اول اینکه بعضی وقتا خطا زیاد داره یعنی وقتی یک نقطه از تاچ رو لمس میکنم ، موقعیت رو اشتباه برمیگرداند.
    دوم اینکه وقتی صفحه لمس میشود و کشیده شود و در نقطه ای دیگر از صفحه برداشته شود ، اگر مجددا موقعیت خوانده شود همان موقعیت اول را میدهد.
    اینم شماتیک مدار ، میکرو هم ATXMega128A1 هست.


    #2
    پاسخ : مشکل با ADS7843

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

    دیدگاه


      #3
      پاسخ : مشکل با ADS7843

      جناب طراح عزیز ممنون ، میشه سوال دوم رو هم یه توضیحی بدید. من در حقیقت میخوام Mouse_Up رو تو ویندوز شبیه سازی کنم. ، اما وقتی تاچ رو ول میکنم همون موقعیت قبل رو میده با اینکه مجددا موقعیت رو خوندم.

      دیدگاه


        #4
        پاسخ : مشکل با ADS7843

        این مطلب را امتحان کنید که آیا با افزایش فاصله زمانی قرائت دوم به میزان کافی، مختصات تغییر می کند؟
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #5
          پاسخ : مشکل با ADS7843

          من نزدیک 3 ثانیه هم صبر کردم و بعد چک کردم . اما باز هم نشد و همان موقعیت قبلی را میدهد.
          این هم کد ، شاید مشکل از کدم باشه.

          کد:
          #define TC_CR_Y			0x90 //DFR = 0, PD = 00
          #define TC_CR_X			0xD0 //DFR = 0, PD = 00
          
          //------------------------------------------------------------------------------
          byte SPIE_TxRx(byte d)
          {
          	SPIE_DATA = d;
            while(!(SPIE_STATUS & _BV(7)));
          	return SPIE_DATA;
          }
          //------------------------------------------------------------------------------
          void TuouchValueRead(void)
          {
          	static float Xf,Yf;	
          	static uint tc_x,tc_y;
          	static byte spi_buf[10];
          	PORTE.INT0MASK=0x00;
          	PORTE.DIRSET = _BV(4);
          	
          	spi_buf[0] = TC_CR_Y;
          	spi_buf[1] = 0;
          	spi_buf[2] = TC_CR_X;
          	spi_buf[3] = 0;
          	spi_buf[4] = 0;
          	//Chip Select Enalble
          	PORTE_OUTCLR = _BV(4);
          	spi_buf[0] = SPIE_TxRx(spi_buf[0]);
          	spi_buf[1] = SPIE_TxRx(spi_buf[1]);
          	spi_buf[2] = SPIE_TxRx(spi_buf[2]);
          	spi_buf[3] = SPIE_TxRx(spi_buf[3]);
          	spi_buf[4] = SPIE_TxRx(spi_buf[4]);
          	//Chip Select Disable	
          	PORTE_OUTSET = _BV(4);
          	
          	
          	tc_y = (spi_buf[1] << 5); //arrange received data
          	tc_y |= (spi_buf[2] >> 3); //arrange received data
          	tc_x = (spi_buf[3] << 5); //arrange received data
          	tc_y |= (spi_buf[4] >> 3); //arrange received data
          	//??????????????????????????????????????????????????????????????????????????
          	PORTE.INT0MASK=0x02;
          	if (tc_y>4000)
          		return;
          	if (tc_x<288)
          		tc_x=288;
          	if (tc_y<383)
          		tc_y=383;
          	if (tc_x>3712)
          		tc_x=3712;
          	if (tc_y>3833)
          		tc_y=3833;
          	Xf = (float)(tc_x-288)*(0.07);
          	Yf = (float)(tc_y-383)*(0.093);	
          #ifdef __240x320
          	TouchData.X = (uint)Xf;
          	TouchData.Y = 320 - (uint)Yf;
          #else
          #ifdef __320x240
          	TouchData.Y = (uint)Xf;
          	TouchData.X = (uint)Yf;
          #endif
          #endif
          }

          دیدگاه


            #6
            پاسخ : مشکل با ADS7843

            کد شما را بررسی می کنم. اما در این فاصله قرار دادن مقاومت های Pullup با مقدار بالا (مثلا 1 مگا اهم) روی خط های X- و Y- را آزمایش و نتیجه را مشاهده کنید.
            اوژن: به معنای افکننده و شکست دهنده است
            دانایی، توانایی است-Knowledge is POWER
            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

            دیدگاه

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