69

帖子

0

TA的资源

一粒金砂(初级)

21
 
引用 18 楼 armeasy 的回复:
GOOGLE你这个问题需要软硬件一起来解决。
一:你说的应该是四线屏吧!
在XM,XP,YM,YP四个脚附近加一个1nF到100nf的电容,先拿 1nF试试,用于滤除屏的DCLK,背光CLK等对TP的干扰,这四个电容必不可少!
二:需要注意硬件的走线问题,TP的四根线,尤其是采样的两根线(四线屏三星架构中只用了两个ADC,另两个是配置的)不要受到干扰
三:如果能将你们板的屏的背光用外部直流……


嘿嘿,不错,看来要配合硬件来调试,我采用软件的办法无法搞定,甚至更糟糕。看看硬件怎么搞了。

回复

71

帖子

0

TA的资源

一粒金砂(初级)

22
 
谷歌男,能帮我推荐本wince5的书么?基于arm的,页数越多越好
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

23
 
觉得跟触摸屏有关系,我之前用的就不行,要加个滤波程序
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

24
 
引用 21 楼 tutugouzj 的回复:
谷歌男,能帮我推荐本wince5的书么?基于arm的,页数越多越好


去我的博客搜索“书籍”。

——刚才换了FL2440 的驱动,情况有一点好转,但是还是这样,我加入滤波算法还是不行。
这个跳点是大范围的,也是偶然的,所以滤波肯定是无效的。看来必须先弄硬件。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

25
 
    我也刚遇到过这样的问题,对软键盘,现在这种情况还暂能接受。你要是在这样的屏上想搞手写输入法,根本不可能实现!
    1、就像veabol所说的,和硬件有关。触摸屏和按键一样,也有抖动,本来:按下——>多次正确定时采样——>一次可能错误的采样——>抬起;但是经打印提示发现真实的情况是:按下——>多次正确的定时采样——>一次可能错误的采样——>抬起——>按下——>一次错误的定时采样——>抬起(抖动)。
     其中:一次可能错误的采样:触屏抬起时正在定时中断中进行采样而获得;
           一次错误的定时采样:因为抖动读到的无效值——原来出现的跳点就是这个原因。
    上面的论述楼主可通过DdsiTouchPanelGetPoint函数中打印输出验证;
   
     2、对上面的情况,在硬件不能修改的情况下,主要还得软件滤波,其中enumTouchPanelSampleFlags这个结构体很重要,通过它可将坐标值反馈给MDD无效;
     3、因为我是一直一个手写输入软件,主要是进行了下面修正:
        1)为使书写线条更平滑,提高定时采样频率,减少采样点数,每次采样SAMPLECOUNT = 8个点;
        2)优化算法:将每次定时中断采样得到的8个点,先进行排序,再分别扔掉最小和最大的两个点,取  均值得到坐标;
        3)滤除一次可能错误的采样:排序后相邻两个坐标值求差后和参考值(参考值:正常书写速度两次采样之间的坐标相差最大值)求差,相差大于参考值的滤除,但该算法还需经过大量实验验证,来获取最合适的参考值;
        4)滤除一次错误的定时采样:在正常抬起后设全局标志,而滤除后续的抖动采样,利用enumTouchPanelSampleFlags结构体返回给MDD层无效标志。
   

引用 8 楼 veabol 的回复:
记得你所说的这个情况。
硬件上的问题可能性最大,我们有在使用中发现某些不好的屏,放在那里,都不用调什么软键盘就能看到屏幕一直有响应,就像是有东西在按,实际上是和屏有关,触摸屏安装时边缘压得太紧也会导致这个问题,松松现象就会有很大改观。

要从软件上解决的话似乎只能是多采样过滤了。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

26
 
楼上我记得你是用友坚的6410 吧。
友坚的6410 和我现象不太一样,友坚的是抖动,他的容易解决
我的平时一点都不都抖动的,很准的,就是遭遇了这个软键盘偶尔大跳的问题,一般按下十几个字符出现一次。
估计是硬件干扰造成。继续追踪。多谢大家都建议,很有参考价值。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

27
 
mark
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

28
 
觉得这个问题真的要改硬件了。加分100,期待更好的见解。
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

29
 
引用 27 楼 gooogleman 的回复:
觉得这个问题真的要改硬件了。加分100,期待更好的见解。

加了200 ,哥有的是分数。
 
 
 

回复

97

帖子

0

TA的资源

一粒金砂(初级)

30
 
你这个问题不一定软件无法解决啊
当然跳点肯定与硬件有关,可以硬件解决,但是软件并非没有办法。
你把你提交到系统的点打出来,在TSP_GetXY函数中,直接转换成电压打出来都行,
然后打开小键盘,在那里敲,一直点一个点,当出现跳笔的时候,看看和前面的采集的值是不是一样的, 在什么情况下出现不一样。
通常点一下会采集很多次的,是否一直按下时是正常的,而把笔抬起来就会错,或者一直按下不放,值都在跳动,或是按下去,即采的第一个点错?
然后在程序中对症下药。
如果实在没有规律可找,那先找硬件。有规律,软件就有办法。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

31
 
引用 29 楼 armeasy 的回复:
你这个问题不一定软件无法解决啊
当然跳点肯定与硬件有关,可以硬件解决,但是软件并非没有办法。
你把你提交到系统的点打出来,在TSP_GetXY函数中,直接转换成电压打出来都行,
然后打开小键盘,在那里敲,一直点一个点,当出现跳笔的时候,看看和前面的采集的值是不是一样的, 在什么情况下出现不一样。
通常点一下会采集很多次的,是否一直按下时是正常的,而把笔抬起来就会错,或者一直按下不放,值都在……


放假了,世界杯了,三天后继续搞。嘿嘿。
你换工作了?可以随便上网?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

32
 
换了三个月了
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

33
 
上前天也开始学习wince定制和驱动这些,目前也正遇到这个问题,6410核心板在开发板上是不抖动的,换到我的板子就开始抖动,为了改好这个抖动,要反复改nk来测试,为了方便下载调试而不拔核心板,昨天花了半天写了一个从SD卡自动下载nk.bin的eboot,然后继续尝试,改getxy,抛弃异常点,有点效果了,但是仍然不合格。

现在开始改硬件,肯定是供电问题,我是用1117给核心板供电的,肯定小了,停电了现在,呆会来电就换一个LM317试试看,再不行,直接把稳压电源接到核心板上,
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

34
 
    我这有两个平台,友坚的6410没有出现这样的问题,而是另一个平台PXA270出的问题,PXA270采集触屏信号的方法是靠AC97总线读取的坐标值。
    楼主的问题,我还是建议楼主在采样时对处理的结果进行打印输出,仔细分析打印结果,先找到出现跳点的病根再说。
引用 25 楼 gooogleman 的回复:
楼上我记得你是用友坚的6410 吧。
友坚的6410 和我现象不太一样,友坚的是抖动,他的容易解决
我的平时一点都不都抖动的,很准的,就是遭遇了这个软键盘偶尔大跳的问题,一般按下十几个字符出现一次。
估计是硬件干扰造成。继续追踪。多谢大家都建议,很有参考价值。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

35
 
  1. 放假归来继续搞,以前打印太多信息了,现在屏蔽一些看看。慢慢找到规律。
  2. 我点击一下就打印了如下信息。
  3. touch :*px= 580
  4. touch :*py= 562
  5. bTSP_DownFlag = TRUE...PenDown!!!
  6. ::: TSP_SampleStart()
  7. !!!!!!!!!!!! BACKLIGHT ON !!!!!!!!!!!!
  8. touch :*px= 589
  9. touch :*py= 555
  10. bTSP_DownFlag = TRUE.PenDown!!!IRQ_Timer3 Interrupt
  11. ::: TSP_SampleStop()
  12. bTSP_DownFlag = FALSE...PenUP!!!
  13. 跟踪这些信息找到相关函数:



  14. /* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
  15. /* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */



  16. PUBLIC VOID
  17. DdsiTouchPanelGetPoint(TOUCH_PANEL_SAMPLE_FLAGS        * pTipStateFlags,
  18.                                            INT        * pUncalX,
  19.                                            INT        * pUncalY)
  20. {
  21.         static INT x, y;

  22.         if (v_pINTregs->SUBSRCPND & (1<
  23.         {
  24.                 *pTipStateFlags = TouchSampleValidFlag;

  25.                 if ( (v_pADCregs->ADCDAT0 & (1 << 15)) |
  26.                          (v_pADCregs->ADCDAT1 & (1 << 15)) )
  27.                 {
  28.                         bTSP_DownFlag = FALSE;

  29.                         DEBUGMSG(ZONE_TIPSTATE, (TEXT("up\r\n")));

  30.                         v_pADCregs->ADCTSC &= 0xff;

  31.                         *pUncalX = x;
  32.                         *pUncalY = y;

  33.                         TSP_SampleStop();
  34.                         // Test
  35.                        
  36.                         RETAILMSG(1,(TEXT("bTSP_DownFlag = FALSE...PenUP!!!\r\n")));
  37.                 }
  38.                 else
  39.                 {
  40.                         bTSP_DownFlag = TRUE;

  41.                         if (!TSP_GetXY(&x, &y))
  42.                                 {
  43.                                         RETAILMSG(1,(TEXT("bTSP_DownFlag = TRUE;*pTipStateFlags = TouchSampleIgnore;\r\n")));
  44.                                         *pTipStateFlags = TouchSampleIgnore;
  45.                                 }
  46.                                

  47.                         TSP_TransXY(&x, &y);

  48.                         *pUncalX = x;
  49.                         *pUncalY = y;

  50.                         *pTipStateFlags |= TouchSampleDownFlag;

  51.                         //Test                       
  52.                         RETAILMSG(1,(TEXT("bTSP_DownFlag = TRUE...PenDown!!!\r\n")));

  53.                         TSP_SampleStart();
  54.                 }

  55.                 v_pINTregs->SUBSRCPND  =  (1<
  56.                 v_pINTregs->INTSUBMSK &= ~(1<

  57.                 InterruptDone(gIntrTouch);
  58.         }
  59.         else                /* SYSINTR_TOUCH_CHANGED Interrupt Case                */
  60.         {
  61. //                TSP_SampleStart();
  62.                
  63.                 if (bTSP_DownFlag)
  64.                 {
  65.                         INT  tx, ty;
  66.                         INT  dx, dy;

  67.                         if (!TSP_GetXY(&tx, &ty))
  68.                                 {
  69.                                         *pTipStateFlags = TouchSampleIgnore;
  70.                                         RETAILMSG(1,(TEXT("SYSINTR_TOUCH_CHANGED ;*pTipStateFlags = TouchSampleIgnore;\r\n")));
  71.                                 }
  72.                         else
  73.                         {
  74.                                
  75.                                 RETAILMSG(1,(TEXT("bTSP_DownFlag = TRUE.PenDown!!!IRQ_Timer3 Interrupt\r\n")));
  76.                                 TSP_TransXY(&tx, &ty);
  77. // insert by mostek@dstcorp.com
  78. #define X_ERRV        0x3bf
  79. #define Y_ERRV        0x4ff

  80.                                 if ((tx == X_ERRV) && (ty == Y_ERRV))
  81.                                 {
  82.                                         tx = x;
  83.                                         ty = y;
  84.                                 }
  85. // =================== mostek
  86.                                 dx = (tx > x) ? (tx - x) : (x - tx);
  87.                                 dy = (ty > y) ? (ty - y) : (y - ty);

  88.                                 if (dx > TSP_CHANGE || dy > TSP_CHANGE)
  89.                                 {
  90.                                         *pUncalX = x = tx;
  91.                                         *pUncalY = y = ty;

  92.                                         //DEBUGMSG(ZONE_TIPSTATE, (TEXT("down-c-v %x %x\r\n"), x, y));
  93.                                         *pTipStateFlags = TouchSampleValidFlag | TouchSampleDownFlag;
  94.                                 }
  95.                                 else
  96.                                 {
  97.                                         *pUncalX = x;
  98.                                         *pUncalY = y;

  99.                                         DEBUGMSG(ZONE_TIPSTATE, (TEXT("down-c %x %x\r\n"), x, y));

  100.                                         *pTipStateFlags = TouchSampleIgnore;
  101.                                 }
  102.                         }
  103.                 }
  104.                 else
  105.                 {
  106.                         *pTipStateFlags = TouchSampleIgnore;

  107.                         TSP_SampleStop();
  108.                        
  109.                         RETAILMSG(1,(TEXT("bTSP_DownFlag = FALSE.PenDown!!!IRQ_Timer3 Interrupt\r\n")));
  110.                 }

  111.                 InterruptDone(gIntrTouchChanged);
  112.         }

  113.         // add by wogo at2009.03.23 why?
  114.         SetEvent(hEventTouchInput);
  115. }
复制代码

 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

36
 
touch :*px= 580
touch :*py= 562
bTSP_DownFlag = TRUE...PenDown!!!
::: TSP_SampleStart()
!!!!!!!!!!!! BACKLIGHT ON !!!!!!!!!!!!
touch :*px= 589
touch :*py= 555
bTSP_DownFlag = TRUE.PenDown!!!IRQ_Timer3 Interrupt
::: TSP_SampleStop()
bTSP_DownFlag = FALSE...PenUP!!!

从这个信息就可以反应按下触摸屏到抬起的过程,
按下——》产生触摸屏中断——》调用TSP_GetXY采样——》产生定时器10ms 中断——》调用TSP_GetXY采样——)弹起。

我发现触摸屏两次采样有时候会差距很大,但是我并没有在触摸屏上滑动。这就让系统误认为我滑动,所以就会造成我上述偶尔跳点的现象。但是仅仅是偶然的,所以相当的纠结。目前在软件商还没有找到合理的办法解决。
现在我已经是连续采样30次求均值都是无效。因为这个是偶然性的事情,所以真的麻烦。
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

37
 
将误差值改大解决这个问题
就是说触摸上某个点,在误差范围内任务有效,而不是就平均值了

如果误差实在太大,检查硬件吧
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

38
 
现在发现了一个比较惊人的原因——之所以打开软件按就会跳点,是因为按下一次软键盘就会进入定时器采样多次,而不按软键盘就很少,或者一次。
看来要解决问题在于这里。
touch :*px= 815
touch :*py= 272
bTSP_DownFlag = TRUE...PenDown!!!
::: TSP_SampleStart()
!!!!!!!!!!!! BACKLIGHT ON !!!!!!!!!!!!
touch :*px= 816
touch :*py= 270
bTSP_DownFlag = TRUE.PenDown!!!IRQ_Timer3 Interrupt
touch :*px= 816
touch :*py= 270
bTSP_DownFlag = TRUE.PenDown!!!IRQ_Timer3 Interrupt
touch :*px= 815
touch :*py= 270
bTSP_DownFlag = TRUE.PenDown!!!IRQ_Timer3 Interrupt
touch :*px= 816
touch :*py= 270
bTSP_DownFlag = TRUE.PenDown!!!IRQ_Timer3 Interrupt
::: TSP_SampleStop()
bTSP_DownFlag = FALSE...PenUP!!!
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

39
 
引用 36 楼 myearth 的回复:
将误差值改大解决这个问题
就是说触摸上某个点,在误差范围内任务有效,而不是就平均值了

如果误差实在太大,检查硬件吧


这个误差放大不行的,因为我不按软件盘是不会怎么样的,现在看来真要用改硬件了。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(中级)

40
 
不懂,up
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表