Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: Kaanx - 27 Nisan 2013, 17:30:17

Başlık: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: Kaanx - 27 Nisan 2013, 17:30:17
Merhabalar (ADS7843) için yazılmıs bir kutuphaneyi xpt2046 için kullanabilir miyim ? eger hayır ise farkları nelerdir.

ads7843 touch panel libarry

touch.h

/*
* touch.h
*
*  Created on: Apr 26, 2013
*      Author: Kaan
*/

#ifndef __TOUCH_7846_H
#define __TOUCH_7846_H

#ifdef __cplusplus
extern "C" {
#endif

#include "stm32f4xx.h"
typedef struct
{
   u16 X0;
   u16 Y0;
   u16 X;
   u16 Y;
   u8  Key_Sta;
   u8  Key_LSta;

   float xfac;
   float yfac;
   short xoff;
   short yoff;
}Pen_Holder;
extern Pen_Holder Pen_Point;
#define TOUCH_CS_PORT    GPIOB
#define TOUCH_CS_PIN    GPIO_Pin_12

#define T_CS()   GPIO_ResetBits(TOUCH_CS_PORT, TOUCH_CS_PIN);
#define T_DCS()  GPIO_SetBits(TOUCH_CS_PORT, TOUCH_CS_PIN);

#define CMD_RDY 0X90  //0B10010000
#define CMD_RDX   0XD0  //0B11010000

#define PEN  GPIOD->IDR&(1<<6) //
#define NPEN !(0x0080&PEN)      //!PEN

unsigned char SPI_WriteByte(u8 num);
void SpiDelay(unsigned int DelayCnt);
u16 TPReadX(void);
u16 TPReadY(void);
u8 read_once(void);
u8 Read_Ads7846(void);

void EXTI9_5_IRQHandler(void);
void NVIC_TOUCHConfiguration(void);
void touch_init(void);
void LCD_ShowNum(uint8_t x,uint16_t y,uint16_t data);

void Touch_Adjust(void);
#ifdef __cplusplus
}
#endif

#endif




touch.c

#include "touch.h"
#include "tft_lcd.h"
#include "stm32f4xx_it.h"
#include <stdio.h>

Pen_Holder Pen_Point;


unsigned char flag=0;


unsigned char SPI_WriteByte(u8 num)
{
  unsigned char Data = 0;
  while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
  SPI_I2S_SendData(SPI2,num);
  while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);
  Data = SPI_I2S_ReceiveData(SPI2);

  return Data;
}

void SpiDelay(unsigned int DelayCnt)
{
unsigned int i;
for(i=0;i<DelayCnt;i++);
}

u16 TPReadX(void)
{
   u16 x=0;
   T_CS();
   SpiDelay(10);
   SPI_WriteByte(0x90);
   SpiDelay(10);
   x=SPI_WriteByte(0xFF);
   x<<=8;
   x+=SPI_WriteByte(0x0);
   T_DCS();
   //SpiDelay(10);
   x=x>>4;
   x  = x&0xFFF; //fff
   return (x);
}


u16 TPReadY(void)
{
  u16 y=0;
  T_CS();
  SpiDelay(10);
  SPI_WriteByte(0xd0);
  SpiDelay(10);
  y=SPI_WriteByte(0x0);
  y<<=8;
  y+=SPI_WriteByte(0x0);
  T_DCS();
  y = y>>4;
  y = y&0xFFF; //fff
  return (y);
}


u8 read_once(void)
{
   Pen_Point.X=TPReadX();
   Pen_Point.Y=TPReadY();
   return 1;
}


void NVIC_TOUCHConfiguration(void)
{
  /*
NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  // NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;  //ʹÓÃÍⲿÖжÏ10~15
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure); */
}

void touch_init(void)
{
  SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStruct;
  NVIC_InitTypeDef NVIC_InitStructure;
  EXTI_InitTypeDef EXTI_InitStructure;

  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD, ENABLE);

  GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_25MHz;
  GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
  GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;

  GPIO_InitStruct.GPIO_Pin=GPIO_Pin_15|GPIO_Pin_13|GPIO_Pin_14;
  GPIO_Init(GPIOB,&GPIO_InitStruct);

  GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);      //sclk 10 13
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2); //mıso 11 14
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2); //mosı 12 15

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

  SPI_I2S_DeInit(SPI2);
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//SPI_CPOL_Low SPI_CPOL_High
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;   //SPI_NSS_Hard //SPI_NSS_Soft
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //16
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI2,&SPI_InitStructure);
  SPI_Cmd(SPI2,ENABLE);
  //CS
  GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
  GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
  GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12; // 3
  GPIO_Init(GPIOB,&GPIO_InitStruct);    // d
  T_DCS();
  //T_PEN
  GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;
  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
  GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
  GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6;
  GPIO_Init(GPIOD,&GPIO_InitStruct);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource6);
  EXTI_InitStructure.EXTI_Line = EXTI_Line6;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}


u8 Read_Ads7846(void)
{
       u8 t,t1,count=0;
       u16 databuffer[2][10];
       u16 temp=0;

        if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==0)
        {
          read_once();
       while(count<10)
       {
          {        if(read_once())
                  {
                       databuffer[0][count]=Pen_Point.X;
                       databuffer[1][count]=Pen_Point.Y;
                       count++;
                   }
               }
       }

       if(count==10)
       {
           do
               {
                       t1=0;
                       for(t=0;t<count-1;t++)
                       {
                               if(databuffer[0][t]>databuffer[0][t+1])
                               {
                                       temp=databuffer[0][t+1];
                                       databuffer[0][t+1]=databuffer[0][t];
                                       databuffer[0][t]=temp;
                                       t1=1;
                               }
                       }
               }while(t1);
               do
               {
                       t1=0;
                       for(t=0;t<count-1;t++)
                       {
                               if(databuffer[1][t]>databuffer[1][t+1])
                               {
                                       temp=databuffer[1][t+1];
                                       databuffer[1][t+1]=databuffer[1][t];
                                       databuffer[1][t]=temp;
                                       t1=1;
                               }
                       }
               }while(t1);

               Pen_Point.X=2047-((databuffer[0][3]+databuffer[0][4]+databuffer[0][5])/3);
               Pen_Point.Y=((databuffer[1][3]+databuffer[1][4]+databuffer[1][5])/3);
               flag=1;
               return 1;
       }
       flag=0;
        }
       return 0;

}
void EXTI9_5_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line6) != RESET)
  {

   EXTI_ClearITPendingBit(EXTI_Line6);
   // Read_Ads7846();
  }
}

void Drow_Touch_Point(uint16_t x,uint16_t y)
{
LCD_DrawUniLine(x-12,y,x+13,y);
LCD_DrawUniLine(x,y-12,x,y+13);
Pixel(x+1,y+1,BLUE);
Pixel(x-1,y+1,BLUE);
Pixel(x+1,y-1,BLUE);
Pixel(x-1,y-1,BLUE);
LCD_DrawCircle(x,y,6);
}
void Draw_Big_Point(uint16_t x,uint16_t y)
{
Pixel(x,y,BLUE);
Pixel(x+1,y,BLUE);
Pixel(x,y+1,BLUE);
Pixel(x+1,y+1,BLUE);
}
   void Convert_Pos(void)
{
               Read_Ads7846();
               Pen_Point.X0=(int)((Pen_Point.Y-103)/7.7);
               Pen_Point.Y0=(int)((Pen_Point.X-104)/5.56);
               if(Pen_Point.X0>240)
               {
                 Pen_Point.X0=240;
               }
               if(Pen_Point.Y0>320)
               {
                 Pen_Point.X0=320;
               }

}


void Touch_Adjust(void)
{
uint16_t pos_temp[4][2];
uint8_t  cnt=0;
uint16_t d1,d2;
uint32_t tem1,tem2;
float fac;
cnt=0;
LCD_SetTextColor(BLUE);
LCD_SetTextColor(WHITE);
LCD_Clear(WHITE);
Drow_Touch_Point(20,20);
Pen_Point.xfac=0;
while(1)
{
                if(1==1)
//if(Pen_Point.Key_Sta==Key_Down)
{
if(Read_Ads7846())
{
pos_temp[cnt][0]=Pen_Point.X;
pos_temp[cnt][1]=Pen_Point.Y;
cnt++;
                                Delay(0xFFFF);
}
switch(cnt)
{
case 1:
LCD_Clear(WHITE);
Drow_Touch_Point(210,20);
break;
case 2:
LCD_Clear(WHITE);
Drow_Touch_Point(20,300);
break;
case 3:
LCD_Clear(WHITE);
Drow_Touch_Point(210,300);
break;
case 4:
tem1=abs(pos_temp[0][0]-pos_temp[1][0]);
tem2=abs(pos_temp[0][1]-pos_temp[1][1]);
tem1*=tem1;
tem2*=tem2;
d1=sqrt(tem1+tem2);

tem1=abs(pos_temp[2][0]-pos_temp[3][0]);
tem2=abs(pos_temp[2][1]-pos_temp[3][1]);
tem1*=tem1;
tem2*=tem2;
d2=sqrt(tem1+tem2);
fac=(float)d1/d2;
if(fac<0.75||fac>1.25||d1==0||d2==0)
{
cnt=0;
LCD_Clear(WHITE);
Drow_Touch_Point(20,20);
continue;
}
tem1=abs(pos_temp[0][0]-pos_temp[2][0]);
tem2=abs(pos_temp[0][1]-pos_temp[2][1]);
tem1*=tem1;
tem2*=tem2;
d1=sqrt(tem1+tem2);

tem1=abs(pos_temp[1][0]-pos_temp[3][0]);
tem2=abs(pos_temp[1][1]-pos_temp[3][1]);
tem1*=tem1;
tem2*=tem2;
d2=sqrt(tem1+tem2);
fac=(float)d1/d2;
if(fac<0.75||fac>1.25)
{
cnt=0;
LCD_Clear(WHITE);
Drow_Touch_Point(20,20);
continue;
}
tem1=abs(pos_temp[1][0]-pos_temp[2][0]);
tem2=abs(pos_temp[1][1]-pos_temp[2][1]);
tem1*=tem1;
tem2*=tem2;
d1=sqrt(tem1+tem2);

tem1=abs(pos_temp[0][0]-pos_temp[3][0]);
tem2=abs(pos_temp[0][1]-pos_temp[3][1]);
tem1*=tem1;
tem2*=tem2;
d2=sqrt(tem1+tem2);
fac=(float)d1/d2;
if(fac<0.75||fac>1.25)
{
cnt=0;
LCD_Clear(WHITE);
Drow_Touch_Point(20,20);
continue;
}
Pen_Point.xfac=(float)200/(pos_temp[1][0]-pos_temp[0][0]);
Pen_Point.xoff=(240-Pen_Point.xfac*(pos_temp[1][0]+pos_temp[0][0]))/2;

Pen_Point.yfac=(float)280/(pos_temp[2][1]-pos_temp[0][1]);
Pen_Point.yoff=(320-Pen_Point.yfac*(pos_temp[2][1]+pos_temp[0][1]))/2;
LCD_Clear(WHITE);
return ;


}
}
}
}


ADS7843 için bu kutuphane XPT2046 ıcın kullanılabilir mi ????
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: M_B - 27 Nisan 2013, 18:58:41
Alıntı Yap
ADS7843 için bu kutuphane XPT2046 ıcın kullanılabilir mi ?
evet kullanabilirsin.  Bir biriyle uyumludur.
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: Kaanx - 28 Nisan 2013, 22:23:56
IRQ-> pd6
MISO->pb14
MOSI->pb15
DCLK->pb13
CS->pb12   

LCD touch ıcın bu baglantıları gercekleştirdim fakat benım lcd ımde artı olarak sd kart yuvasıda var acaba bunlarla mı karıştı dıye dusunuyorum Diot hocam örnek kod gönderdı touch ıcın resim ekrana gelıyor fakat dokunmatık çalısmıyor herhangi bir değişim söz konusu degıl ekranda

LCD min fotografı pin baglantıları arkasında uzerınde modullerı görebilirsiniz hocam.

http://p1304.hizliresim.com/18/w/mkdvj.jpg (http://p1304.hizliresim.com/18/w/mkdvj.jpg)

(http://p1304.hizliresim.com/18/w/mkdvj.jpg) (http://bit.ly/c25MCx)

ne yapmam gerek hocam  yardımcı olursanız cok mutlu olurum.
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: pisayisi - 28 Nisan 2013, 22:39:50
touchpoint için sdcard arabirimine ayrılan çıkışları kullanmışsın gibi görünüyor. Bu lcd nin ayna simetrisi düşünüldüğünde aşağıdaki gibi bir çıkışa sahip olduğunu görceksin TP ile başlayan pinler touchpoint pinlerine aittir; kendi uygulamanda onları kullanman lazım...

[IMG]http://imageshack.us/a/img51/1076/lcdssd1289.jpg[/img]
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: Kaanx - 29 Nisan 2013, 03:12:34
hocam Bende RESET->NRST baglı ve resimleri ekrana basabılıyorum renkler random cızgı vs gelıyor ekrana

Hocam buradaki şmeya göre

Dclk->pb13
MISO bacagı pb15 idi şemaya göre ->Dout->pb15
MOSİ bacagı pb14 idi semaya göre Din->pb14
cs->pb12
IRQ->PD6

Yani sadece MOSI ve MISO bacaklarını Dout ve Dın pınlerıyle degıstırsem kutuphaneye hiç dokunmasam diyorum cunku hazır bir kutuphane oldugu ıcın üzerinde oynamaktan korkuyorum acıkcası. Aynı işi yapmış olur muyum. ?
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: Kaanx - 01 Mayıs 2013, 03:34:23
Dclk->pb13
MISO bacagı pb15 idi şemaya göre ->Dout->pb15
MOSİ bacagı pb14 idi semaya göre Din->pb14
cs->pb12
IRQ->PD6


bu değisimi yapsam uygun olur mu ? yukarıdakı semaya göre kullandıgım kutuphane yukarıda ve yaptıgım baglantılarda orada yazıyor.
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: diot - 01 Mayıs 2013, 09:06:55
Kaan sana verdiğim bağlantılarda senin lcd nin  TP_   ile başlayan bacakları kullanacaksın SD_ ile başlayan bacaklar  sd kart yuvasına ait.

TP_DCLK     
TP_CS         
TP_DIN     
TP_BUSY
TP_DOUT     
TP_PENIRQ 

Kütüphane elindeki kitte çalışır.
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: Kaanx - 01 Mayıs 2013, 17:33:04
IN  -    PB14  //touch pad
OUT  -    PB15  //   touch pad
SCK    -    PB13  // touch pad
TP_CS -  PB12   // touch pad cs
PEN(INT) - PD6  // touch pad

baglantılarını yaptım hocam sizin göndermıs oldugun 1.bin dosyasını attım fakat çalışmıyor hala
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: Kaanx - 06 Mayıs 2013, 03:29:32
VERİLEN KUTUPHANE LCD RESMİ VE ŞEMATİKTE KULLANILACAK PİNLERE GÖRE ŞÖYLE BİR DEĞİŞİM YAPTIM FAKAT HALA SONUC ALAMADIM FİRKİ OLAN VAR MI (PİSAYİSİ HOCAMIN VERDIGI SEMATİKTEN HANGİ PİNLERİ KULLANACAGIMI GÖRDUM VE KUTUPHANEMDE HANGİ PİNLER BUNLARA BAGLANMIS BAKARAK DEĞİŞİM YAPTIM ORTAYA CIKAN PİN ŞEMASI)

IN  -    PB14  //touch pad
OUT  -    PB15  //   touch pad
SCK    -    PB13  // touch pad
TP_CS -  PB12   // touch pad cs
PEN(INT) - PD6  // touch pad

YARDIMCI OLUR MUSUNUZ ?
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: M_B - 13 Mayıs 2013, 22:20:46
@Kaanx;
son durum nedir nerde kaldın.
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: diot - 14 Mayıs 2013, 09:29:44
@M_B  , kaan o işi halletti. data in out uçlarını ters bağlamış. şu an çalışıyor.
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: Kaanx - 14 Mayıs 2013, 23:24:15
@M_B ,@diot

Hocam sağolun sorunu hallettik cok sukur sizlerin sayesınde allah razı olsun .
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: respected - 20 Mayıs 2013, 16:56:38
Kaanx hocam;
Aynı lcd ile çalışıyorum. Touch pad kısmını çalıştırdım. Kalibrasyon noktaları çıktıktan sonra pek bir değişiklik olmuyor.  Bununla ilgili nasıl örnekler yaptınız. Ekrandaki bir değeri artırma gibi bir şey yaptınız mı? Yada çizgi çizme gibi bir şey.
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: Kaanx - 22 Mayıs 2013, 02:41:52
Kalibrasyon ayar çizgilerini de yaptım boyama olarak da calısmalar yaptım hocam hepsini toplayıp makale halinde yayınlamayı planlıyorum fakat malum bu aralar pek zamanım yok. Element 14 deki örnege göre yaptıgım boyama çalısması burada hocam inceleyebilirsiniz.

#include "stm32f4xx.h"
#include "delay.h"
#include "tft_lcd.h"
#include "touch.h"
//#include "Julija.h"

extern u8 gImage_sil[];
void tft_yaz(void);
extern unsigned int xxx,yyy;
extern unsigned char flag;


char stringas[8];
int xold,yold;


int main(void)
{

//float x1,y1 ;
// float x2,y2;
  Delay(0x3FFFFF);
  LCD_Init();
  Delay(0x3FFFFF);
  touch_init();
  LCD_Clear(BLACK);
  //LCD_SetTextColor(BLUE);

  tft_yaz();

  Read_Ads7846();
                Pen_Point.X0=(int)((Pen_Point.Y-103)/7.7);
                Pen_Point.Y0=(int)((Pen_Point.X-104)/5.56);
                if(Pen_Point.X0>240)
                {
                  Pen_Point.X0=240;
                }
                if(Pen_Point.Y0>320)
                {
                  Pen_Point.X0=320;
                }

while(1)
{
DON:

Convert_Pos();

if ((Pen_Point.X0>180) && (Pen_Point.X0<210) && ( Pen_Point.Y0>304) && ( Pen_Point.Y0<320))
{
LCD_Clear(LCD_COLOR_MAGENTA);
LCD_SetBackColor(GREEN);
  LCD_SetTextColor(CYAN);
          LCD_StringLine(215,300,"SIL");
          LCD_StringLine(172,300,"YENI");
goto DON ;
}



  if((Pen_Point.X0>220) && (Pen_Point.X0<239) && (Pen_Point.Y0>304)&&(Pen_Point.Y0<320))
  {

  LCD_Clear(RED);
  LCD_BackLight(100);

  LCD_SetBackColor(GREEN);
  LCD_SetTextColor(CYAN);
          LCD_StringLine(215,300,"SIL");
          LCD_StringLine(172,300,"YENI");


         goto DON;
  }
  if ((Pen_Point.X0>0) && (Pen_Point.Y0>0))
{
  Pixel(Pen_Point.X0,Pen_Point.Y0,YELLOW);
    Pixel(Pen_Point.X0,Pen_Point.Y0+1,YELLOW);
    Pixel(Pen_Point.X0+1,Pen_Point.Y0,YELLOW);
    Pixel(Pen_Point.X0+1,Pen_Point.Y0+1,YELLOW);
}

  }
}


void tft_yaz(void)
{
LCD_SetTextColor(GREEN);

  LCD_SetBackColor(LCD_COLOR_BLUE);
  LCD_BackLight(100);
  LCD_StringLine(100,30, "Kaan");
  LCD_StringLine(85,45, "Kandemir");
  LCD_StringLine(30,80,"NAMIK KEMAL UNIVERSITESI");
  LCD_StringLine(15,100,"CORLU MUHENDISLIK FAKULTESI");
  LCD_StringLine(8,120,"ELEKTRONIK VE HABERLESME MUH.");
  LCD_StringLine(15,170,"**3.2' TFT LCD UYGULAMASI**");
  LCD_StringLine(45,190,"SSD1289 VE XPT2046 ");

}



uint16_t EVAL_AUDIO_GetSampleCallBack(void)
{
    return 0; // ses çipini kullanıyorsanız tek sample veriyi burada return ile döndürün.
}
void EVAL_AUDIO_TransferComplete_CallBack(uint32_t pBuffer, uint32_t Size)
{
    return; // ses çipini kullanıyorsanız  burada çipe veri aktarımı DMA sona ermiş
}



Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: respected - 22 Mayıs 2013, 15:36:08
Hocam dokunmatik kalibrasyonda ekranın neresine dokunursam tepki veriyor. Bu  ekran nokta ayarlaması ile ilgili bir sorun mu acaba?
ToucPanel.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 "systick.h"
#include "ssd1963.h"

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


Coordinate ScreenSample[3];

Coordinate DisplaySample[3] =   {
                                            { 45, 45 },
{ 270, 90},
                                            { 100,190}
                            } ;

/* Private define ------------------------------------------------------------*/
#define THRESHOLD 2
#define RGB565CONVERT(red, green, blue) (int) (((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3))

#ifndef USE_Delay
static void delay(__IO uint32_t nCount);
#endif /* USE_Delay*/

/*******************************************************************************
* Function Name  : ADS7843_SPI_Init
* Description    :
* Input          : None
* Output         : None
* Return         : None
* Attention : None
// *******************************************************************************/
// static void ADS7843_SPI_Init(void)
// {
//   SPI_InitTypeDef  SPI_InitStructure;
//   RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
//   /* DISABLE SPI2 */
//   SPI_Cmd(SPI2, DISABLE);
//   /* SPI2 Config -------------------------------------------------------------*/
//   SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
//   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
//   SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
//   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
//   SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
//   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
//   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
//   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
//   SPI_InitStructure.SPI_CRCPolynomial = 7;
//   SPI_Init(SPI2, &SPI_InitStructure);
//   /* Enable SPI2 */
//   SPI_Cmd(SPI2, ENABLE);
// }

/*******************************************************************************
* Function Name  : TP_Init
* Description    :
* Input          : None
* Output         : None
* Return         : None
* Attention : None
*******************************************************************************/
void TP_Init(void)
{
SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStruct;
  NVIC_InitTypeDef NVIC_InitStructure;
  EXTI_InitTypeDef EXTI_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC, ENABLE);

  GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_25MHz;
  GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
  GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;

  GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;
  GPIO_Init(GPIOC,&GPIO_InitStruct);
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource2, GPIO_AF_SPI2);      //miso 2
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_SPI2); //mosi 3

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_25MHz;
  GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
  GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;

  GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10|GPIO_Pin_14;
  GPIO_Init(GPIOB,&GPIO_InitStruct);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2);      //sck 10
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2); // NSS(CS) 14

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

  SPI_I2S_DeInit(SPI2);
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//SPI_CPOL_Low SPI_CPOL_High
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;   //SPI_NSS_Hard //SPI_NSS_Soft
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //16
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI2,&SPI_InitStructure);
  SPI_Cmd(SPI2,ENABLE);
  //CS
//   GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
//   GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
//   GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
//   GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
//   GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12; // 3
//   GPIO_Init(GPIOB,&GPIO_InitStruct);    // d
//   T_DCS();
  //T_PEN
  GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;
  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
  GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
  GPIO_InitStruct.GPIO_Pin=GPIO_Pin_15;
  GPIO_Init(GPIOA,&GPIO_InitStruct);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource6);
  EXTI_InitStructure.EXTI_Line = EXTI_Line6;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
//   ADS7843_SPI_Init();
}


/*******************************************************************************
* Function Name  : DelayUS
* Description    :
* Input          : - cnt:
* Output         : None
* Return         : None
* Attention : None
*******************************************************************************/
static void DelayUS(vu32 cnt)
{
  uint16_t i;
  for(i = 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 SPI2 Tx buffer empty */
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
  /* Send SPI2 data */
  SPI_I2S_SendData(SPI2,cmd);
  /* Wait for SPI2 data reception */
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
  /* Read SPI2 received data */
  SPI_I2S_ReceiveData(SPI2);
}



/*******************************************************************************
* Function Name  : RD_AD
* Description    :
* Input          : None
* Output         : None
* Return         :
* Attention : None
*******************************************************************************/
static int RD_AD(void) 
{
  unsigned short buf,temp;
  /* Wait for SPI2 Tx buffer empty */
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
  /* Send SPI2 data */
  SPI_I2S_SendData(SPI2,0x0000);
  /* Wait for SPI2 data reception */
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
  /* Read SPI2 received data */
  temp=SPI_I2S_ReceiveData(SPI2);
  buf=temp<<8;
  DelayUS(1);
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
  /* Send SPI2 data */
  SPI_I2S_SendData(SPI2,0x0000);
  /* Wait for SPI2 data reception */
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
  /* Read SPI2 received data */
  temp=SPI_I2S_ReceiveData(SPI2);
  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)
{
  LCD_SetTextColor(WHITE);
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)
{
  LCD_SetTextColor(BLUE);
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);
 
LCD_SetTextColor(RGB565CONVERT(200,158,131));
  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 setCalibrationMatrix( Coordinate * displayPtr,
                          Coordinate * screenPtr,
                          Matrix * matrixPtr)
{

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

/*******************************************************************************
* Function Name  : TouchPanel_Calibrate
* Description    :
* Input          : None
* Output         : None
* Return         : None
* Attention : None
*******************************************************************************/
void TouchPanel_Calibrate(void)
{
  uint8_t i;
  Coordinate * Ptr;

  for(i=0;i<3;i++)
  {
   TFT_CLEAR(GBLUE);
  SSD1963_LCD_ShowString(200,200,"Dokunmatik Ekran Kalibrasyonu");
   delay(200);
   DrawCross(DisplaySample[i].x,DisplaySample[i].y);
   do
   {
     Ptr=Read_Ads7846();
   }
   while( Ptr == (void*)0 );
   ScreenSample[i].x= Ptr->x; ScreenSample[i].y= Ptr->y;
  }
  setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix );
  TFT_CLEAR(GBLUE);
}
#ifndef USE_Delay
/**
  * @brief  Inserts a delay time.
  * @param  nCount: specifies the delay time length.
  * @retval None
  */
static void delay(__IO uint32_t nCount)
{
  __IO uint32_t index = 0;
  for(index = (100000 * nCount); index != 0; index--)
  {
  }
}
#endif /* USE_Delay*/
/*********************************************************************************************************
      END FILE
*********************************************************************************************************/


ToucPanel.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

#define TOUCH_CS_PORT    GPIOB
#define TOUCH_CS_PIN    GPIO_Pin_14

// #define T_CS()   GPIO_ResetBits(TOUCH_CS_PORT, TOUCH_CS_PIN);
#define T_DCS()  GPIO_SetBits(TOUCH_CS_PORT, TOUCH_CS_PIN);

#define TP_CS(x) x ? GPIO_SetBits(GPIOB,GPIO_Pin_14): GPIO_ResetBits(GPIOA,GPIO_Pin_14)

#define TP_INT_IN   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)

/* 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 setCalibrationMatrix( Coordinate * displayPtr,Coordinate * screenPtr,Matrix * matrixPtr);
FunctionalState getDisplayPoint(Coordinate * displayPtr,Coordinate * screenPtr,Matrix * matrixPtr );

#endif

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


Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: Mnemonic - 28 Ekim 2013, 13:34:53
Arkadaşlar merhaba
ssd1963 ve xpt2046 çipi kullanıyorum
kullanmış olduğum board üzerinde bağlantı aşağıdaki şekilde kodu buna göre ayarlayamadım
aşağıdaki pin bağlantılarına göre touch_init kısmını ayarlamama yardımcı olurmusunuz ?

TP_CLK  ->B13
TP_Dout ->B14
TP_DIn  ->B15

TP_CS   ->C4
TP_IRQ  ->C5
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: Kaanx - 03 Kasım 2013, 23:22:35
TP_CLK  ->B13
TP_Dout ->B15
TP_DIn  ->B14

TP_CS   ->C4
TP_IRQ  ->C5

olarak denermisiniiz bende de aynı sorun vardı yanlıs pin lehimi yaptıgım için calısmıyormus sizdede belki olabilir. Kullanılan çipler aynı olabilir ama A firmasında başka bir pinde olabiliyor. LCD nın kendi datasheetini incelemekte fayda olabilir.
Başlık: Ynt: (ADS7843) ve XPT2046 stm32f4 library
Gönderen: 61emre89 - 09 Mayıs 2015, 13:18:09
Merhaba Arkadaşlar,

xpt2046 ve SSD1289 içeren bir Dokunmatik TFT LCD var elimde ,fakat stm32f10x için uygun bir kütüphane bulamadım. SPI,Kontrol ve 16Bit data bağlantımı yaptım fakat bir türlü çalıştırmadım.   Yardımcı olabilir misiniz acaba?