7" LCD Dokunmatik Sorunu

Başlatan kimlenbu, 03 Mart 2014, 14:28:16

kimlenbu

Selamlar,

STM32F4 Discovery ile SSD1963 çipli bir ekran sürüyorum. Dokunmatik çipi XPT2046, ADS7846 ile uyumlu. Dokunmatik kütüphanesi 3.2" lik xpt2046 kullanan ekranda doğru çalışırken 7" de dokunulan nokta hatalı bulunuyor. ekranın çok ufak bir kısmında doğru koordinat bulunabiliyor.

Kalibrasyon matrix'i hesaplanırken ekranda 3 referans noktasına dokunuluyor ve normalizasyon yapılıyor, nette dolanan standart kodlar.

Gördüğüm kadarıyla belirlenen 3 referans noktası değiştiğinde dokumatik hassasiyeti düzelmeye başlıyor. 800x480 çözünürlükteki bir ekranda hangi noktaları seçmeliyim ki doğru çalışsın ?

kodlar aşağıda :


touchpanel.c

/*********************************************************************************************************
*
* File                : TouchPanel.c
* Hardware Environment: 
* Build Environment   : RealView MDK-ARM  Version: 4.20
* Version             : V1.0
* By                  : 
*
*                                  (c) Copyright 2005-2011, WaveShare
*                                       http://www.waveshare.net
*                                          All Rights Reserved
*
*********************************************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include "TouchPanel.h"
#include "Tpconfig.h"
#include "ssd1963.h"

/* Private variables ---------------------------------------------------------*/
Matrix matrix ;
Coordinate  display ;


// Coordinate ScreenSample[3];

// Coordinate DisplaySample[3] = { { 45, 45 }, { 270, 90}, { 100,190} } ;
//  Coordinate DisplaySample[3] = {{ 100, 50 }, { 700, 150}, { 400,400} } ;

Coordinate ScreenSample[3];

Coordinate DisplaySample[3] =   {  { 50,  50 },
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
 { 
100100},
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
 { 
200,200} } ;

// Coordinate DisplaySample[3] =   {  { 50,  45 },
// 
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
 { 700, 200},
// 
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
 { 400,420} } ;
	
   


/* Private define ------------------------------------------------------------*/
#define THRESHOLD 2


/*******************************************************************************
* Function Name  : ADS7843_SPI_Init
* Description    : 
* Input          : None
* Output         : None
* Return         : None
* Attention
	
	
 : None
*******************************************************************************/
static void ADS7843_SPI_Init(void

  
SPI_InitTypeDef SPI_InitStruct;
	


  
RCC_APB1PeriphClockCmd(Open_RCC_SPI,ENABLE);
	


  
SPI_I2S_DeInit(Open_SPI);
  
/* Open_SPI Config -------------------------------------------------------------*/ 
  
SPI_InitStruct.SPI_Direction SPI_Direction_2Lines_FullDuplex
  
SPI_InitStruct.SPI_Mode SPI_Mode_Master
  
SPI_InitStruct.SPI_DataSize SPI_DataSize_8b
  
SPI_InitStruct.SPI_CPOL SPI_CPOL_Low
  
SPI_InitStruct.SPI_CPHA SPI_CPHA_1Edge
  
SPI_InitStruct.SPI_NSS SPI_NSS_Soft
  
SPI_InitStruct.SPI_BaudRatePrescaler SPI_BaudRatePrescaler_32
  
SPI_InitStruct.SPI_FirstBit SPI_FirstBit_MSB
  
SPI_InitStruct.SPI_CRCPolynomial 7

  
SPI_Init(Open_SPI, &SPI_InitStruct);

  
SPI_Cmd(Open_SPIENABLE); 


/*******************************************************************************
* Function Name  : TP_Init
* Description    : 
* Input          : None
* Output         : None
* Return         : None
* Attention
	
	
 : None
*******************************************************************************/
void TP_Init(void


	
GPIO_InitTypeDef GPIO_InitStructure;
	

	
RCC_AHB1PeriphClockCmd(Open_SPI_SCK_GPIO_CLK Open_SPI_MISO_GPIO_CLK Open_SPI_MOSI_GPIO_CLK,ENABLE);

	
RCC_AHB1PeriphClockCmd(Open_TP_CS_CLK Open_TP_IRQ_CLK,ENABLE);
	
Open_SPI_CLK_INIT(Open_RCC_SPI,ENABLE);

	
GPIO_PinAFConfig(Open_SPI_SCK_GPIO_PORT,  Open_SPI_SCK_SOURCE,  Open_GPIO_AF_SPI);
	
GPIO_PinAFConfig(Open_SPI_MISO_GPIO_PORTOpen_SPI_MISO_SOURCEOpen_GPIO_AF_SPI);
	
GPIO_PinAFConfig(Open_SPI_MOSI_GPIO_PORTOpen_SPI_MOSI_SOURCEOpen_GPIO_AF_SPI);

	
GPIO_InitStructure.GPIO_Pin Open_SPI_SCK_PIN;
	
GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF;
	
GPIO_InitStructure.GPIO_Speed GPIO_Speed_100MHz;
	
GPIO_InitStructure.GPIO_OType GPIO_OType_PP;
	
GPIO_InitStructure.GPIO_PuPd  GPIO_PuPd_UP;  
	
GPIO_Init(Open_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);

	
GPIO_InitStructure.GPIO_Pin Open_SPI_MISO_PIN;
	
GPIO_Init(Open_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);

	
GPIO_InitStructure.GPIO_Pin Open_SPI_MOSI_PIN;
	
GPIO_Init(Open_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);


  
/* TP_CS  */
  
GPIO_InitStructure.GPIO_Pin Open_TP_CS_PIN;
  
GPIO_InitStructure.GPIO_Mode GPIO_Mode_OUT;
  
GPIO_InitStructure.GPIO_OType GPIO_OType_PP;
  
GPIO_InitStructure.GPIO_Speed GPIO_Speed_100MHz;
  
GPIO_InitStructure.GPIO_PuPd GPIO_PuPd_UP;
  
GPIO_Init(Open_TP_CS_PORT, &GPIO_InitStructure);

  
    
/*TP_IRQ */
   
GPIO_InitStructure.GPIO_Pin Open_TP_IRQ_PIN;
	
GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN ;
	
GPIO_InitStructure.GPIO_OType GPIO_OType_PP;
	
GPIO_InitStructure.GPIO_Speed GPIO_Speed_100MHz;
	
GPIO_InitStructure.GPIO_PuPd GPIO_PuPd_UP;
	
GPIO_Init(Open_TP_IRQ_PORT, &GPIO_InitStructure);
	



  
	
TP_CS(1); 
  
	
ADS7843_SPI_Init(); 






/*******************************************************************************
* Function Name  : DelayUS
* Description    : 
* Input          : - cnt:
* Output         : None
* Return         : None
* Attention
	
	
 : None
*******************************************************************************/

static void DelayUS(vu32 cnt)
{
  
uint16_t i;
  for(
0;i<cnt;i++)
  {
     
uint8_t us 12;
     while (
us--)
     {
       ;   
     }
  }
}


/*******************************************************************************
* Function Name  : WR_CMD
* Description    : 
* Input          : - cmd: 
* Output         : None
* Return         : None
* Attention
	
	
 : None
*******************************************************************************/
static void WR_CMD (uint8_t cmd)  

  
/* Wait for SPI3 Tx buffer empty */ 
  
while (SPI_I2S_GetFlagStatus(Open_SPISPI_I2S_FLAG_TXE) == RESET); 
  
/* Send SPI3 data */ 
  
SPI_I2S_SendData(Open_SPI,cmd); 
  
/* Wait for SPI3 data reception */ 
  
while (SPI_I2S_GetFlagStatus(Open_SPISPI_I2S_FLAG_RXNE) == RESET); 
  
/* Read Open_SPI received data */ 
  
SPI_I2S_ReceiveData(Open_SPI); 




/*******************************************************************************
* Function Name  : RD_AD
* Description    : 
* Input          : None
* Output         : None
* Return         : 
* Attention
	
	
 : None
*******************************************************************************/
static int RD_AD(void)  

  
unsigned short buf,temp
  
/* Wait for Open_SPI Tx buffer empty */ 
  
while (SPI_I2S_GetFlagStatus(Open_SPISPI_I2S_FLAG_TXE) == RESET); 
  
/* Send Open_SPI data */ 
  
SPI_I2S_SendData(Open_SPI,0x0000); 
  
/* Wait for SPI3 data reception */ 
  
while (SPI_I2S_GetFlagStatus(Open_SPISPI_I2S_FLAG_RXNE) == RESET); 
  
/* Read Open_SPI received data */ 
  
temp=SPI_I2S_ReceiveData(Open_SPI); 
  
buf=temp<<8
  
DelayUS(1); 
  while (
SPI_I2S_GetFlagStatus(Open_SPISPI_I2S_FLAG_TXE) == RESET); 
  
/* Send Open_SPI data */ 
  
SPI_I2S_SendData(Open_SPI,0x0000); 
  
/* Wait for Open_SPI data reception */ 
  
while (SPI_I2S_GetFlagStatus(Open_SPISPI_I2S_FLAG_RXNE) == RESET); 
  
/* Read Open_SPI received data */ 
  
temp=SPI_I2S_ReceiveData(Open_SPI); 
  
buf |= temp
  
buf>>=3
  
buf&=0xfff
  return 
buf



/*******************************************************************************
* Function Name  : Read_X
* Description    : Read ADS7843 ADC X 
* Input          : None
* Output         : None
* Return         : 
* Attention
	
	
 : None
*******************************************************************************/
int Read_X(void)  
{  
  
int i
  
TP_CS(0); 
  
DelayUS(1); 
  
WR_CMD(CHX); 
  
DelayUS(1); 
  
i=RD_AD(); 
  
TP_CS(1); 
  return 
i;    


/*******************************************************************************
* Function Name  : Read_Y
* Description    : Read ADS7843 ADC Y
* Input          : None
* Output         : None
* Return         : 
* Attention
	
	
 : None
*******************************************************************************/
int Read_Y(void)  
{  
  
int i
  
TP_CS(0); 
  
DelayUS(1); 
  
WR_CMD(CHY); 
  
DelayUS(1); 
  
i=RD_AD(); 
  
TP_CS(1); 
  return 
i;     



/*******************************************************************************
* Function Name  : TP_GetAdXY
* Description    : Read ADS7843
* Input          : None
* Output         : None
* Return         : 
* Attention
	
	
 : None
*******************************************************************************/
void TP_GetAdXY(int *x,int *y)  

  
int adx,ady
  
adx=Read_X(); 
  
DelayUS(1); 
  
ady=Read_Y(); 
  *
x=adx
  *
y=ady


/*******************************************************************************
* Function Name  : TP_DrawPoint
* Description    : 
* Input          : - Xpos: Row Coordinate
*                  - Ypos: Line Coordinate 
* Output         : None
* Return         : None
* Attention
	
	
 : None
*******************************************************************************/
void TP_DrawPoint(uint16_t Xpos,uint16_t Ypos)
{
  
SSD1963_LCD_DrawPoint(Xpos,Ypos);     /* Center point */
  
SSD1963_LCD_DrawPoint(Xpos+1,Ypos);
  
SSD1963_LCD_DrawPoint(Xpos,Ypos+1);
  
SSD1963_LCD_DrawPoint(Xpos+1,Ypos+1);
	

}
	


/*******************************************************************************
* Function Name  : DrawCross
* Description    : 
* Input          : - Xpos: Row Coordinate
*                  - Ypos: Line Coordinate 
* Output         : None
* Return         : None
* Attention
	
	
 : None
*******************************************************************************/
void DrawCross(uint16_t Xpos,uint16_t Ypos)
{
  
SSD1963_LCD_DrawLine(Xpos-15,Ypos,Xpos-2,Ypos);
  
SSD1963_LCD_DrawLine(Xpos+2,Ypos,Xpos+15,Ypos);
  
SSD1963_LCD_DrawLine(Xpos,Ypos-15,Xpos,Ypos-2);
  
SSD1963_LCD_DrawLine(Xpos,Ypos+2,Xpos,Ypos+15);
  
  
SSD1963_LCD_DrawLine(Xpos-15,Ypos+15,Xpos-7,Ypos+15);
  
SSD1963_LCD_DrawLine(Xpos-15,Ypos+7,Xpos-15,Ypos+15);

  
SSD1963_LCD_DrawLine(Xpos-15,Ypos-15,Xpos-7,Ypos-15);
  
SSD1963_LCD_DrawLine(Xpos-15,Ypos-7,Xpos-15,Ypos-15);

  
SSD1963_LCD_DrawLine(Xpos+7,Ypos+15,Xpos+15,Ypos+15);
  
SSD1963_LCD_DrawLine(Xpos+15,Ypos+7,Xpos+15,Ypos+15);

  
SSD1963_LCD_DrawLine(Xpos+7,Ypos-15,Xpos+15,Ypos-15);
  
SSD1963_LCD_DrawLine(Xpos+15,Ypos-15,Xpos+15,Ypos-7);
	
  
	

}
	

	

/*******************************************************************************
* Function Name  : Read_Ads7846
* Description    : Get TouchPanel X Y
* Input          : None
* Output         : None
* Return         : Coordinate *
* Attention
	
	
 : None
*******************************************************************************/
Coordinate *Read_Ads7846(void)
{
  static 
Coordinate  screen;
  
int m0,m1,m2,TP_X[1],TP_Y[1],temp[3];
  
uint8_t count=0;
  
int buffer[2][9]={{0},{0}};
  
  do
  {
	
	
   
    
TP_GetAdXY(TP_X,TP_Y);  
	
buffer[0][count]=TP_X[0];  
	
buffer[1][count]=TP_Y[0];
	
count++;  
  }
  while(!
TP_INT_IN&& count<9);  /* TP_INT_IN  */
  
if(count==9)   /* Average X Y  */ 
  
{
	
/* Average X  */
  
temp[0]=(buffer[0][0]+buffer[0][1]+buffer[0][2])/3;
	
temp[1]=(buffer[0][3]+buffer[0][4]+buffer[0][5])/3;
	
temp[2]=(buffer[0][6]+buffer[0][7]+buffer[0][8])/3;

	
m0=temp[0]-temp[1];
	
m1=temp[1]-temp[2];
	
m2=temp[2]-temp[0];

	
m0=m0>0?m0:(-m0);
  
m1=m1>0?m1:(-m1);
	
m2=m2>0?m2:(-m2);

	
if( 
m0>THRESHOLD  &&  m1>THRESHOLD  &&  m2>THRESHOLD ) return 0;

	
if(
m0<m1)
	
{
	
  if(
m2<m0
	
    
screen.x=(temp[0]+temp[2])/2;
	
  else 
	
    
screen.x=(temp[0]+temp[1])/2;
	

	
}
	
else if(
m2<m1
	
  
screen.x=(temp[0]+temp[2])/2;
	
else 
	
  
screen.x=(temp[1]+temp[2])/2;

	
/* Average Y  */
  
temp[0]=(buffer[1][0]+buffer[1][1]+buffer[1][2])/3;
	
temp[1]=(buffer[1][3]+buffer[1][4]+buffer[1][5])/3;
	
temp[2]=(buffer[1][6]+buffer[1][7]+buffer[1][8])/3;
	
m0=temp[0]-temp[1];
	
m1=temp[1]-temp[2];
	
m2=temp[2]-temp[0];
	
m0=m0>0?m0:(-m0);
	
m1=m1>0?m1:(-m1);
	
m2=m2>0?m2:(-m2);
	
if(
m0>THRESHOLD&&m1>THRESHOLD&&m2>THRESHOLD) return 0;

	
if(
m0<m1)
	
{
	
  if(
m2<m0
	
    
screen.y=(temp[0]+temp[2])/2;
	
  else 
	
    
screen.y=(temp[0]+temp[1])/2;
	

    }
	
else if(
m2<m1
	
   
screen.y=(temp[0]+temp[2])/2;
	
else
	
   
screen.y=(temp[1]+temp[2])/2;

	
return &
screen;
  }  
  return 
0
}
	
 

/*******************************************************************************
* Function Name  : setCalibrationMatrix
* Description    : Calculate K A B C D E F
* Input          : None
* Output         : None
* Return         : 
* Attention
	
	
 : None
*******************************************************************************/
FunctionalState setCalibrationMatrixCoordinate displayPtr,
                          
Coordinate screenPtr,
                          
Matrix matrixPtr)
{

  
FunctionalState retTHRESHOLD ENABLE ;
  
/* K£½(X0£­X2) (Y1£­Y2)£­(X1£­X2) (Y0£­Y2) */
  
matrixPtr->Divider = ((screenPtr[0].screenPtr[2].x) * (screenPtr[1].screenPtr[2].y)) - 
                       ((
screenPtr[1].screenPtr[2].x) * (screenPtr[0].screenPtr[2].y)) ;
  if( 
matrixPtr->Divider == )
  {
    
retTHRESHOLD DISABLE;
  }
  else
  {
    
/* A£½((XD0£­XD2) (Y1£­Y2)£­(XD1£­XD2) (Y0£­Y2))£¯K
	
*/
    
matrixPtr->An = ((displayPtr[0].displayPtr[2].x) * (screenPtr[1].screenPtr[2].y)) - 
                    ((
displayPtr[1].displayPtr[2].x) * (screenPtr[0].screenPtr[2].y)) ;
	
/* B£½((X0£­X2) (XD1£­XD2)£­(XD0£­XD2) (X1£­X2))£¯K
	
*/
    
matrixPtr->Bn = ((screenPtr[0].screenPtr[2].x) * (displayPtr[1].displayPtr[2].x)) - 
                    ((
displayPtr[0].displayPtr[2].x) * (screenPtr[1].screenPtr[2].x)) ;
    
/* C£½(Y0(X2XD1£­X1XD2)+Y1(X0XD2£­X2XD0)+Y2(X1XD0£­X0XD1))£¯K */
    
matrixPtr->Cn = (screenPtr[2].displayPtr[1].screenPtr[1].displayPtr[2].x) * screenPtr[0].+
                    (
screenPtr[0].displayPtr[2].screenPtr[2].displayPtr[0].x) * screenPtr[1].+
                    (
screenPtr[1].displayPtr[0].screenPtr[0].displayPtr[1].x) * screenPtr[2].;
    
/* D£½((YD0£­YD2) (Y1£­Y2)£­(YD1£­YD2) (Y0£­Y2))£¯K
	
*/
    
matrixPtr->Dn = ((displayPtr[0].displayPtr[2].y) * (screenPtr[1].screenPtr[2].y)) - 
                    ((
displayPtr[1].displayPtr[2].y) * (screenPtr[0].screenPtr[2].y)) ;
    
/* E£½((X0£­X2) (YD1£­YD2)£­(YD0£­YD2) (X1£­X2))£¯K
	
*/
    
matrixPtr->En = ((screenPtr[0].screenPtr[2].x) * (displayPtr[1].displayPtr[2].y)) - 
                    ((
displayPtr[0].displayPtr[2].y) * (screenPtr[1].screenPtr[2].x)) ;
    
/* F£½(Y0(X2YD1£­X1YD2)+Y1(X0YD2£­X2YD0)+Y2(X1YD0£­X0YD1))£¯K */
    
matrixPtr->Fn = (screenPtr[2].displayPtr[1].screenPtr[1].displayPtr[2].y) * screenPtr[0].+
                    (
screenPtr[0].displayPtr[2].screenPtr[2].displayPtr[0].y) * screenPtr[1].+
                    (
screenPtr[1].displayPtr[0].screenPtr[0].displayPtr[1].y) * screenPtr[2].;
  }
  return( 
retTHRESHOLD ) ;
}

/*******************************************************************************
* Function Name  : getDisplayPoint
* Description    : Touch panel X Y to display X Y
* Input          : None
* Output         : None
* Return         : 
* Attention
	
	
 : None
*******************************************************************************/
FunctionalState getDisplayPoint(Coordinate displayPtr,
                     
Coordinate screenPtr,
                     
Matrix matrixPtr )
{
  
FunctionalState retTHRESHOLD =ENABLE ;

  if( 
matrixPtr->Divider != )
  {
    
/* XD = AX+BY+C */        
    
displayPtr->= ( (matrixPtr->An screenPtr->x) + 
                      (
matrixPtr->Bn screenPtr->y) + 
                       
matrixPtr->Cn 
                    
) / matrixPtr->Divider ;
	
/* YD = DX+EY+F */        
    
displayPtr->= ( (matrixPtr->Dn screenPtr->x) + 
                      (
matrixPtr->En screenPtr->y) + 
                       
matrixPtr->Fn 
                    
) / matrixPtr->Divider ;
  }
  else
  {
    
retTHRESHOLD DISABLE;
  }
  return(
retTHRESHOLD);


/*******************************************************************************
* Function Name  : delay_ms
* Description    : Delay Time
* Input          : - cnt: Delay Time
* Output         : None
* Return         : None
* Return         : None
* Attention
	
	
 : None
*******************************************************************************/
static void delay_ms(uint16_t ms)    

	
uint16_t i,j
	
for( 
0msi++ )
	

	
	
for( 
00xffffj++ );
	
}


/*******************************************************************************
* Function Name  : TouchPanel_Calibrate
* Description    : 
* Input          : None
* Output         : None
* Return         : None
* Attention
	
	
 : None
*******************************************************************************/
void TouchPanel_Calibrate(void)
{
  
uint8_t i;
  
Coordinate Ptr;
	
int8_t
	
temp[20]={0};

  for(
i=0;i<3;i++)
  {
   
SSD1963_LCD_Clear(BLACK);
   
SSD1963_LCD_ShowString(44,10,"Touch crosshair to calibrate");
   
delay_ms(300);
   
DrawCross(DisplaySample[i].x,DisplaySample[i].y);
   do
   {
     
Ptr=Read_Ads7846();
   }
   while( 
Ptr == (void*));
   
ScreenSample[i].xPtr->xScreenSample[i].yPtr->y;
// 
	
 sprintf(temp,"X:%4d,Y:%4d",ScreenSample[i].x,ScreenSample[i].y);
// 
	
 SSD1963_LCD_ShowString(10,80,(uint8_t*)temp);
  
}
	


  
setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix );
  
  
SSD1963_LCD_Clear(BLACK);
	



/*********************************************************************************************************
      END FILE
*********************************************************************************************************/



touchpanel.h


/*********************************************************************************************************
*
* File                : TouchPanel.h
* Hardware Environment: 
* Build Environment   : RealView MDK-ARM  Version: 4.20
* Version             : V1.0
* By                  : 
*
*                                  (c) Copyright 2005-2011, WaveShare
*                                       http://www.waveshare.net
*                                          All Rights Reserved
*
*********************************************************************************************************/

#ifndef _TOUCHPANEL_H_
#define _TOUCHPANEL_H_

/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"

/* Private typedef -----------------------------------------------------------*/
typedef
	
struct POINT 
{
   
uint16_t x;
   
uint16_t y;
}
Coordinate;


typedef struct Matrix 
{
	
	
	
	
	
	

long double An,  
            
Bn,     
            
Cn,   
            
Dn,    
            
En,    
            Fn,     
            
Divider ;
Matrix ;

/* Private variables ---------------------------------------------------------*/
extern Coordinate ScreenSample[3];
extern Coordinate DisplaySample[3];
extern Matrix matrix ;
extern Coordinate  display ;

/* Private define ------------------------------------------------------------*/

#define
	
CHX 
	
0x90
#define
	
CHY 
	
0xd0

/* Private function prototypes -----------------------------------------------*/
	
	
	
	

void TP_Init(void);
	

Coordinate *Read_Ads7846(void);
void TouchPanel_Calibrate(void);
void DrawCross(uint16_t Xpos,uint16_t Ypos);
void TP_DrawPoint(uint16_t Xpos,uint16_t Ypos);
FunctionalState setCalibrationMatrixCoordinate displayPtr,Coordinate screenPtr,Matrix matrixPtr);
FunctionalState getDisplayPoint(Coordinate displayPtr,Coordinate screenPtr,Matrix matrixPtr );

#endif

/*********************************************************************************************************
      END FILE
*********************************************************************************************************/



tpconfig.h


#ifndef _CONFIG_H
#define _CONFIG_H

#include <stdio.h>
#include "stm32f4xx.h"
/**
 * @brief Definition for TouchPanel
 */
 /* Configure TouchPanel pins:   TP_CS-> PC4 and TP_IRQ-> PC5 */


#define Open_TP_CS_PIN
	
	
	
	
	
GPIO_Pin_4
#define Open_TP_CS_PORT
	
	
	
	
	
GPIOC
#define Open_TP_CS_CLK
	
	
	
	
	
RCC_AHB1Periph_GPIOC

#define Open_TP_IRQ_PIN
	
	
	
	
	
GPIO_Pin_5
#define Open_TP_IRQ_PORT
	
	
	
	
GPIOC
#define Open_TP_IRQ_CLK
	
	
	
	
	
RCC_AHB1Periph_GPIOC


#define TP_CS(x)
	
x ? GPIO_SetBits(Open_TP_CS_PORT,Open_TP_CS_PIN): GPIO_ResetBits(Open_TP_CS_PORT,Open_TP_CS_PIN)

#define TP_INT_IN   GPIO_ReadInputDataBit(Open_TP_IRQ_PORT,Open_TP_IRQ_PIN)

/**
 * @brief Definition for TouchPanel  SPI
 */
 /* Configure TouchPanel pins:   TP_CLK-> PB13 and TP_MISO-> PB14 and TP_MOSI-> PB15 */

#define Open_RCC_SPI   
	
        
	
	
RCC_APB1Periph_SPI2
#define Open_GPIO_AF_SPI 
	
	
	
	
GPIO_AF_SPI2

#define Open_SPI                        SPI2
#define Open_SPI_CLK_INIT               RCC_APB1PeriphClockCmd
#define Open_SPI_IRQn                   SPI2_IRQn
#define Open_SPI_IRQHANDLER             SPI2_IRQHandler

#define Open_SPI_SCK_PIN                GPIO_Pin_13
#define Open_SPI_SCK_GPIO_PORT          GPIOB
#define Open_SPI_SCK_GPIO_CLK           RCC_AHB1Periph_GPIOB
#define Open_SPI_SCK_SOURCE             GPIO_PinSource13

#define Open_SPI_MISO_PIN               GPIO_Pin_14
#define Open_SPI_MISO_GPIO_PORT         GPIOB
#define Open_SPI_MISO_GPIO_CLK          RCC_AHB1Periph_GPIOB
#define Open_SPI_MISO_SOURCE            GPIO_PinSource14

#define Open_SPI_MOSI_PIN               GPIO_Pin_15
#define Open_SPI_MOSI_GPIO_PORT         GPIOB
#define Open_SPI_MOSI_GPIO_CLK          RCC_AHB1Periph_GPIOB
#define Open_SPI_MOSI_SOURCE            GPIO_PinSource15
	
	


#endif
	
  /*_CONFIG_H*/






Mnemonic

merhaba;
bende zamanında bu 3lü ile çok uğraşmıştım ve en güzel sonucu aşağıdaki gibi almıştım. bastığın noktalar ya çok doğru ya oldukça yakın çıkıyordu

X1Y1 = 400,432
X2Y2 = 80,240
X3Y3 = 720,42


#define   LCD_MAXX  
	
	
   800     // Pixel in X-Richtung
#define   LCD_MAXY  
	
	
   480     // Pixel in Y-Richtung
#define   UB_TOUCH_KAL_XP1     400     // 50% von MAXX
#define   UB_TOUCH_KAL_YP1     432     // 90% von MAXY
#define   UB_TOUCH_KAL_XP2      80     // 10% von MAXX
#define   UB_TOUCH_KAL_YP2     240     // 50% von MAXY
#define   UB_TOUCH_KAL_XP3     720     // 90% von MAXX
#define   UB_TOUCH_KAL_YP3      42     // 10% von MAXY
Ar-Ge Lab Hizmetleri -www.teknolojist.net-

kimlenbu

cevap için teşekkür ederim ama bende çalışmadı. sonunda şu değerlerle dokunmatiği çalıştırmayı başardım :

Coordinate DisplaySample[3] = {
                                { 
100100},
	
	
	
	
700,240},
	
	
	
        { 
400,410}
	
                                         };

Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.