打印

XPT2046触摸屏的读数一直为FFF,求助?

[复制链接]
9468|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fengye5340|  楼主 | 2012-12-21 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠,最近测试了一下触摸屏,控制器是XPT2046,无论是软件模拟SPI,还是用硬件SPI,从2046读回来的X,Y坐标都是一个值4095(FFF), 不知道是怎么回事?请大侠们帮助解决一下,非常感谢!
沙发
IJK| | 2012-12-21 15:53 | 只看该作者
触摸屏是 电容触摸吗?

读回来的X,Y坐标都是一个值4095(FFF), 说明触摸屏没有检测到触摸。

使用特权

评论回复
板凳
haitao10086| | 2012-12-21 16:00 | 只看该作者
IJK 发表于 2012-12-21 15:53
触摸屏是 电容触摸吗?

读回来的X,Y坐标都是一个值4095(FFF), 说明触摸屏没有检测到触摸。 ...

:handshake

使用特权

评论回复
地板
fengye5340|  楼主 | 2012-12-21 18:15 | 只看该作者
是四线电阻屏,点击屏幕的时候,XPT2046的中断引脚可以触发中断的

使用特权

评论回复
5
beanandpeach| | 2012-12-21 18:35 | 只看该作者
Mark

使用特权

评论回复
6
fengye5340|  楼主 | 2012-12-21 21:26 | 只看该作者
IJK 发表于 2012-12-21 15:53
触摸屏是 电容触摸吗?

读回来的X,Y坐标都是一个值4095(FFF), 说明触摸屏没有检测到触摸。 ...

请问大侠,这个如何解决呢?

使用特权

评论回复
7
wangkuo0203| | 2012-12-21 21:40 | 只看该作者
如果触摸还是FFF,那就是线没连好

使用特权

评论回复
8
IJK| | 2012-12-21 22:11 | 只看该作者
可以这么看看是不是硬件问题:在四线电阻屏的这4线上接示波器,看上面有没有波形。

使用特权

评论回复
9
fengye5340|  楼主 | 2012-12-22 08:31 | 只看该作者
感谢,试试看看

使用特权

评论回复
10
fengye5340|  楼主 | 2012-12-28 19:32 | 只看该作者
经过检查发现,原来是用软件模拟SPI总线时 读数据时一个符号写错了,用SPI总线时没有问题的

使用特权

评论回复
评论
贝多芬爵士 2012-12-31 18:29 回复TA
请问您是那个地方的符号写错了?我也是遇到相同的问题 
11
贝多芬爵士| | 2012-12-31 17:46 | 只看该作者
请问楼主是哪个地方读数据错误了,我也遇到了相同的问题,也是采用的模拟的SPI

使用特权

评论回复
12
fengye5340|  楼主 | 2013-1-3 20:16 | 只看该作者
贝多芬爵士 发表于 2012-12-31 17:46
请问楼主是哪个地方读数据错误了,我也遇到了相同的问题,也是采用的模拟的SPI ...

是模拟SPI总线读取数据时的符号写错了,把MISO的引脚设置成了INT的管脚信号,所以错误了

使用特权

评论回复
13
贝多芬爵士| | 2013-1-7 19:44 | 只看该作者
fengye5340 发表于 2013-1-3 20:16
是模拟SPI总线读取数据时的符号写错了,把MISO的引脚设置成了INT的管脚信号,所以错误了 ...

能看看你模拟读取数据的那部分程序吗?

使用特权

评论回复
14
fengye5340|  楼主 | 2013-1-7 21:23 | 只看该作者
贝多芬爵士 发表于 2013-1-7 19:44
能看看你模拟读取数据的那部分程序吗?

好的,明天给你回复啊

使用特权

评论回复
15
fengye5340|  楼主 | 2013-1-8 09:40 | 只看该作者
贝多芬爵士 发表于 2013-1-7 19:44
能看看你模拟读取数据的那部分程序吗?

// 软件模拟SPI方式读取触摸屏控制器
#define TOUCH_INT_PIN        GPIO_Pin_7
#define TOUCH_INT_PORT       GPIOF
#define TOUCH_INT_PIN_SCK    RCC_AHBPeriph_GPIOF

#define TOUCH_CS_PIN         GPIO_Pin_0
#define TOUCH_CS_PORT        GPIOF
#define TOUCH_CS_PIN_SCK     RCC_AHBPeriph_GPIOF

#define TOUCH_SCK_PIN        GPIO_Pin_15
#define TOUCH_SCK_PORT       GPIOC
#define TOUCH_SCK_PIN_SCK    RCC_AHBPeriph_GPIOC

#define TOUCH_MISO_PIN       GPIO_Pin_14
#define TOUCH_MISO_PORT      GPIOC
#define TOUCH_MISO_PIN_SCK   RCC_AHBPeriph_GPIOC

#define TOUCH_MOSI_PIN       GPIO_Pin_13
#define TOUCH_MOSI_PORT      GPIOC
#define TOUCH_MOSI_PIN_SCK   RCC_AHBPeriph_GPIOC

#define TFT_TOUCH_CS_L       GPIO_ResetBits(TOUCH_CS_PORT, TOUCH_CS_PIN)
#define TFT_TOUCH_CS_H       GPIO_SetBits(TOUCH_CS_PORT, TOUCH_CS_PIN)
#define TFT_TOUCH_INT        GPIO_ReadInputDataBit(TOUCH_INT_PORT,TOUCH_INT_PIN)

#define TFT_TOUCH_SCK_L      GPIO_ResetBits(TOUCH_SCK_PORT, TOUCH_SCK_PIN)
#define TFT_TOUCH_SCK_H      GPIO_SetBits(TOUCH_SCK_PORT, TOUCH_SCK_PIN)

#define TFT_TOUCH_MOSI_L     GPIO_ResetBits(TOUCH_MOSI_PORT, TOUCH_MOSI_PIN)
#define TFT_TOUCH_MOSI_H     GPIO_SetBits(TOUCH_MOSI_PORT,   TOUCH_MOSI_PIN)  

#define TFT_TOUCH_MISO       GPIO_ReadInputDataBit(TOUCH_MISO_PORT,TOUCH_MISO_PIN)





/*******************************************************************************
函数名称:TFT_Write_Byte()
功    能:向SPI总线发送和接收一个数据
参    数:无
返回值  :无
********************************************************************************/       
void TFT_Write_Byte(unsigned char dat)   
{  
        unsigned char i=0;
       
        TFT_TOUCH_SCK_L;   
        for(i=0;i<8;i++)  
        {           
           if(dat&0x80)  TFT_TOUCH_MOSI_H;  
           else          TFT_TOUCH_MOSI_L;  
          
           dat<<=1;   
           TFT_TOUCH_SCK_L;
           TFT_TOUCH_SCK_H; //输出上升沿有效
                  
        }       
                                                                    
}
/*******************************************************************************
函数名称:TFT_Read_AD()
功    能:读取X轴或Y轴的ADC值
参    数:CMD---指令
返回值  :读到的数据--12位有效数据
********************************************************************************/
unsigned short int TFT_Read_AD(unsigned char CMD)
{          
      
        unsigned char count;
        unsigned short int  Num ;  
              
              TFT_TOUCH_CS_L;    // CS=0 --选中XPT25046
              delay_us(10);
              TFT_Write_Byte(CMD);   
              delay_us(10);            // 延时等待转换完成--ADS78最长转换时间
        TFT_TOUCH_SCK_L;
        delay_us(10);           
              TFT_TOUCH_SCK_H; //输出上升沿有效
              TFT_TOUCH_SCK_L;
              for( count =0; count<16; count++)
              {
           Num <<=1;
                                         
                                         TFT_TOUCH_SCK_L;
                                         TFT_TOUCH_SCK_H;
                                         
                                         if( TFT_TOUCH_MISO )Num++;        

        }  
              Num >>=4;           //只有高12位有效.
                                Num &=0xfff;           //只有高12位有效.
              TFT_TOUCH_CS_H;        // CS=1 结束通信         
              return(Num);   
}

使用特权

评论回复
16
贝多芬爵士| | 2013-1-29 15:28 | 只看该作者
fengye5340 发表于 2013-1-8 09:40
// 软件模拟SPI方式读取触摸屏控制器
#define TOUCH_INT_PIN        GPIO_Pin_7
#define TOUCH_INT_PORT  ...

谢谢了哈!仔细对比一下看哪里出问题了

使用特权

评论回复
17
jiayongli| | 2013-6-5 11:59 | 只看该作者
哈哈,发现了枫叶在这里的求问帖子

使用特权

评论回复
18
fengye5340|  楼主 | 2013-6-5 12:13 | 只看该作者
jiayongli 发表于 2013-6-5 11:59
哈哈,发现了枫叶在这里的求问帖子

呵呵,好像咱们认识啊,这个问题是片子的问题,已经OK

使用特权

评论回复
19
jiayongli| | 2013-6-5 13:52 | 只看该作者
eeboar的活跃份子

使用特权

评论回复
20
fengye5340|  楼主 | 2013-6-5 16:56 | 只看该作者
jiayongli 发表于 2013-6-5 13:52
eeboar的活跃份子

呵呵,网名不同不好认呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

454

帖子

11

粉丝