Library for Mini-DK board

Dependencies:   SPI_TFT_ILI9320

Dependents:   LPC1768_Mini-DK_EasyWeb_DM9161 LPC1768_Mini-DK LPC1768_Mini-DK

Fork of Mini-DK by Frank Vannieuwkerke

Mini-DK board overview (Micro SD connector is at the bottom side)

One serial interface , uses CP2102 (USB to RS232 interface, support ISP download )

RJ45-10/100M Ethernet network interface (Ethernet PHY: DM9161)

2.8 inch TFT color LCD interface (SPI interface or 16Bit parallel interface)

Touch panel controller XPT2046 (ADS7843 compatible)

USB 2.0 interface, USB host and USB Device interface.

TF SD / MMC card (SPI) interface.

Two user buttons, One Reset button and ISP button , One INT0 button, two user-programmable LED lights

Serial ISP download, Standard 20-pin JTAG download simulation debugging interface.

Selection between external 5V power supply or USB 5V supply.

Board size: 95mm * 78mm

All IO available on extension connectors

/media/uploads/frankvnk/mini-dk_top.jpg

04/01/13

Erik Olieman (http://mbed.org/users/Sissors/) joined the code development for the Mini-DK board.

Thanks to his input, we were able to obtain a tremendous speed gain, remove warnings, ...

An overview of all modifications is stored in modifs.h

The old page (http://mbed.org/users/frankvnk/code/LPC1768_Mini-DK/) contains the demo code.

IMPORTANT : Due to a change in the mbed libraries (Stream()), we cannot use the printf instruction - we need to use <SPI_TFT>.printf (example - see main.cpp in http://mbed.org/users/frankvnk/code/LPC1768_Mini-DK/)

WARNING: filetoflash (SD to CPU flash)

The SPI_TFT library contains an option to copy an image from the SD card to the CPU flash memory. This allows you to use an image as background without speed loss when writing other text and graphics.

By default, this option is enabled.

It can be disabled by uncommenting the #define mentioned below in Mini_DK.h:

#define NO_FLASH_BUFFER

Since the flash memory has limited write endurance, DO NOT use this feature when you intend to read multiple images from the SD card (eg: when used as a photo frame).

14/01/13

A newer version of the Mini-DK has been released by the manufacturer: Mini-DK2. They replaced the DM9161 PHY with a LAN8720A PHY and better buttons are fitted on the board. All other hardware remains the same. Code for this PHY is available from the NXP MCU SW application team. This allows us to use the mbed 'EthernetInterface' library with little modifications. Further info - see http://mbed.org/forum/mbed/topic/3684/?page=1#comment-18473.

Notes:

The code in 'lpc_phy_lan8720.c' uses 'msDelay' - needs to be replaced with 'osDelay'.

A custom MAC address can be defined using following code:

extern "C" void mbed_mac_address(char * mac) {
 
// define your own MAC Address
  mac[0] = 0x00;  
  mac[1] = 0x01;  
  mac[2] = 0x02;  
  mac[3] = 0x03;  
  mac[4] = 0x04;  
  mac[5] = 0x05;           
  
};
Committer:
frankvnk
Date:
Tue Nov 04 21:43:48 2014 +0000
Revision:
23:67989b4f61ad
Parent:
22:9d05a7e6dc9d
Updated SPI_TFT_ILI9320 library to the latest version (auto-detect ILI9320, 9325 and 9328)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 7:ffdd4e75b366 1 /**************************************************************************************************
frankvnk 7:ffdd4e75b366 2 ***** *****
frankvnk 7:ffdd4e75b366 3 ***** Name: Touch.cpp *****
frankvnk 7:ffdd4e75b366 4 ***** Ver.: 1.0 *****
frankvnk 7:ffdd4e75b366 5 ***** Date: 04/01/2013 *****
frankvnk 7:ffdd4e75b366 6 ***** Auth: Frank Vannieuwkerke *****
frankvnk 7:ffdd4e75b366 7 ***** Erik Olieman *****
frankvnk 7:ffdd4e75b366 8 ***** Func: Touch driver for use with ADS7843 *****
frankvnk 7:ffdd4e75b366 9 ***** *****
frankvnk 7:ffdd4e75b366 10 ***** Code based on Carlos E. Vidales tutorial : *****
frankvnk 7:ffdd4e75b366 11 ***** How To Calibrate Touch Screens *****
frankvnk 7:ffdd4e75b366 12 ***** www.embedded.com/design/configurable-systems/4023968/How-To-Calibrate-Touch-Screens *****
frankvnk 7:ffdd4e75b366 13 ***** *****
frankvnk 7:ffdd4e75b366 14 **************************************************************************************************/
frankvnk 2:d0acbd263ec7 15
frankvnk 2:d0acbd263ec7 16 #include "Touch.h"
frankvnk 2:d0acbd263ec7 17 #include "mbed.h"
frankvnk 2:d0acbd263ec7 18 #include "Arial12x12.h"
frankvnk 2:d0acbd263ec7 19
frankvnk 2:d0acbd263ec7 20 #define THRESHOLD 2
frankvnk 2:d0acbd263ec7 21
frankvnk 3:fb4d62b5ffb3 22 TouchScreenADS7843::TouchScreenADS7843(PinName tp_mosi, PinName tp_miso, PinName tp_sclk, PinName tp_cs, PinName tp_irq, SPI_TFT *_LCD)
Sissors 5:781a72d380a1 23 : LCD(_LCD), _tp_spi(tp_mosi, tp_miso, tp_sclk), _tp_cs(tp_cs), _tp_irq(tp_irq)
frankvnk 2:d0acbd263ec7 24 {
frankvnk 2:d0acbd263ec7 25 DisplaySample[0].x=45;
frankvnk 2:d0acbd263ec7 26 DisplaySample[0].y=45;
frankvnk 2:d0acbd263ec7 27 DisplaySample[1].x=45;
frankvnk 2:d0acbd263ec7 28 DisplaySample[1].y=270;
frankvnk 2:d0acbd263ec7 29 DisplaySample[2].x=190;
frankvnk 2:d0acbd263ec7 30 DisplaySample[2].y=190;
frankvnk 2:d0acbd263ec7 31 ScreenSample[0].x=45;
frankvnk 2:d0acbd263ec7 32 ScreenSample[0].y=45;
frankvnk 2:d0acbd263ec7 33 ScreenSample[1].x=45;
frankvnk 2:d0acbd263ec7 34 ScreenSample[1].y=270;
frankvnk 2:d0acbd263ec7 35 ScreenSample[2].x=190;
frankvnk 2:d0acbd263ec7 36 ScreenSample[2].y=190;
frankvnk 2:d0acbd263ec7 37 _tp_cs=1;
frankvnk 2:d0acbd263ec7 38 _tp_spi.frequency(500000);
frankvnk 2:d0acbd263ec7 39 _tp_spi.format(8,0); // 8 bit spi mode 0
frankvnk 2:d0acbd263ec7 40 }
frankvnk 2:d0acbd263ec7 41
frankvnk 2:d0acbd263ec7 42 int TouchScreenADS7843::Read_XY(unsigned char XY)
frankvnk 2:d0acbd263ec7 43 {
frankvnk 2:d0acbd263ec7 44 unsigned char msb, lsb;
frankvnk 2:d0acbd263ec7 45 unsigned int Temp;
frankvnk 2:d0acbd263ec7 46
frankvnk 2:d0acbd263ec7 47 Temp=0;
frankvnk 2:d0acbd263ec7 48 _tp_cs=0;
frankvnk 2:d0acbd263ec7 49 wait_us(SPI_RD_DELAY);
frankvnk 2:d0acbd263ec7 50 _tp_spi.write(XY);
frankvnk 2:d0acbd263ec7 51 wait_us(SPI_RD_DELAY);
frankvnk 17:66c4e84d8571 52 msb = _tp_spi.write(0x00); // msb
frankvnk 2:d0acbd263ec7 53 wait_us(SPI_RD_DELAY);
frankvnk 17:66c4e84d8571 54 lsb = _tp_spi.write(0x00); // lsb
frankvnk 2:d0acbd263ec7 55 _tp_cs=1;
frankvnk 2:d0acbd263ec7 56 Temp = ((msb << 8 ) | lsb);
frankvnk 2:d0acbd263ec7 57 Temp >>= 3;
frankvnk 2:d0acbd263ec7 58 Temp &= 0xfff;
frankvnk 17:66c4e84d8571 59 Temp /= 4; // Scaling : return value range must be between 0 and 1024
frankvnk 2:d0acbd263ec7 60 return(Temp);
frankvnk 2:d0acbd263ec7 61 }
frankvnk 2:d0acbd263ec7 62
frankvnk 2:d0acbd263ec7 63
frankvnk 2:d0acbd263ec7 64 void TouchScreenADS7843::TP_GetAdXY(int *x,int *y)
frankvnk 2:d0acbd263ec7 65 {
frankvnk 2:d0acbd263ec7 66 int adx,ady;
frankvnk 2:d0acbd263ec7 67 adx = Read_XY(CHX);
frankvnk 2:d0acbd263ec7 68 wait_us(1);
frankvnk 2:d0acbd263ec7 69 ady = Read_XY(CHY);
frankvnk 2:d0acbd263ec7 70 *x = adx;
frankvnk 2:d0acbd263ec7 71 *y = ady;
frankvnk 2:d0acbd263ec7 72 }
frankvnk 2:d0acbd263ec7 73
frankvnk 2:d0acbd263ec7 74 void TouchScreenADS7843::TP_DrawPoint(unsigned int Xpos,unsigned int Ypos, unsigned int color)
frankvnk 2:d0acbd263ec7 75 {
frankvnk 3:fb4d62b5ffb3 76 LCD->wr_reg(0x03, 0x1030);
frankvnk 2:d0acbd263ec7 77 LCD->WindowMax();
frankvnk 2:d0acbd263ec7 78 LCD->pixel(Xpos,Ypos,color);
frankvnk 2:d0acbd263ec7 79 LCD->pixel(Xpos+1,Ypos,color);
frankvnk 2:d0acbd263ec7 80 LCD->pixel(Xpos,Ypos+1,color);
frankvnk 3:fb4d62b5ffb3 81 LCD->pixel(Xpos+1,Ypos+1,color);
frankvnk 2:d0acbd263ec7 82 }
frankvnk 2:d0acbd263ec7 83
frankvnk 2:d0acbd263ec7 84 void TouchScreenADS7843::DrawCross(unsigned int Xpos,unsigned int Ypos)
frankvnk 2:d0acbd263ec7 85 {
frankvnk 3:fb4d62b5ffb3 86 LCD->line(Xpos-15,Ypos,Xpos-2,Ypos,White);
frankvnk 2:d0acbd263ec7 87 LCD->line(Xpos+2,Ypos,Xpos+15,Ypos,White);
frankvnk 2:d0acbd263ec7 88 LCD->line(Xpos,Ypos-15,Xpos,Ypos-2,White);
frankvnk 2:d0acbd263ec7 89 LCD->line(Xpos,Ypos+2,Xpos,Ypos+15,White);
frankvnk 2:d0acbd263ec7 90
frankvnk 2:d0acbd263ec7 91 LCD->line(Xpos-15,Ypos+15,Xpos-7,Ypos+15,DarkGrey);
frankvnk 2:d0acbd263ec7 92 LCD->line(Xpos-15,Ypos+7,Xpos-15,Ypos+15,DarkGrey);
frankvnk 2:d0acbd263ec7 93
frankvnk 2:d0acbd263ec7 94 LCD->line(Xpos-15,Ypos-15,Xpos-7,Ypos-15,DarkGrey);
frankvnk 2:d0acbd263ec7 95 LCD->line(Xpos-15,Ypos-7,Xpos-15,Ypos-15,DarkGrey);
frankvnk 2:d0acbd263ec7 96
frankvnk 2:d0acbd263ec7 97 LCD->line(Xpos+7,Ypos+15,Xpos+15,Ypos+15,DarkGrey);
frankvnk 2:d0acbd263ec7 98 LCD->line(Xpos+15,Ypos+7,Xpos+15,Ypos+15,DarkGrey);
frankvnk 2:d0acbd263ec7 99
frankvnk 2:d0acbd263ec7 100 LCD->line(Xpos+7,Ypos-15,Xpos+15,Ypos-15,DarkGrey);
frankvnk 3:fb4d62b5ffb3 101 LCD->line(Xpos+15,Ypos-15,Xpos+15,Ypos-7,DarkGrey);
frankvnk 2:d0acbd263ec7 102 }
frankvnk 2:d0acbd263ec7 103
frankvnk 20:5feb12e3801f 104 unsigned char TouchScreenADS7843::Read_Ads7843(Coordinate * screenPtr)
frankvnk 2:d0acbd263ec7 105 {
frankvnk 2:d0acbd263ec7 106 int m0,m1,m2,TP_X[1],TP_Y[1],temp[3];
frankvnk 2:d0acbd263ec7 107 uint8_t count=0;
frankvnk 2:d0acbd263ec7 108 int buffer[2][9]={{0},{0}};
frankvnk 3:fb4d62b5ffb3 109 if (screenPtr == NULL) screenPtr = &screen;
frankvnk 2:d0acbd263ec7 110 do
frankvnk 2:d0acbd263ec7 111 {
frankvnk 2:d0acbd263ec7 112 TP_GetAdXY(TP_X,TP_Y);
frankvnk 2:d0acbd263ec7 113 buffer[0][count]=TP_X[0];
frankvnk 2:d0acbd263ec7 114 buffer[1][count]=TP_Y[0];
frankvnk 2:d0acbd263ec7 115 count++;
frankvnk 2:d0acbd263ec7 116 }
frankvnk 2:d0acbd263ec7 117 while(!_tp_irq && (count < 9));
frankvnk 2:d0acbd263ec7 118 if(count==9)
frankvnk 2:d0acbd263ec7 119 {
frankvnk 2:d0acbd263ec7 120 temp[0]=(buffer[0][0]+buffer[0][1]+buffer[0][2])/3;
frankvnk 2:d0acbd263ec7 121 temp[1]=(buffer[0][3]+buffer[0][4]+buffer[0][5])/3;
frankvnk 2:d0acbd263ec7 122 temp[2]=(buffer[0][6]+buffer[0][7]+buffer[0][8])/3;
frankvnk 2:d0acbd263ec7 123 m0=temp[0]-temp[1];
frankvnk 2:d0acbd263ec7 124 m1=temp[1]-temp[2];
frankvnk 2:d0acbd263ec7 125 m2=temp[2]-temp[0];
frankvnk 2:d0acbd263ec7 126 m0=m0>0?m0:(-m0);
frankvnk 2:d0acbd263ec7 127 m1=m1>0?m1:(-m1);
frankvnk 2:d0acbd263ec7 128 m2=m2>0?m2:(-m2);
frankvnk 2:d0acbd263ec7 129 if( (m0>THRESHOLD) && (m1>THRESHOLD) && (m2>THRESHOLD) ) return 0;
frankvnk 2:d0acbd263ec7 130 if(m0<m1)
frankvnk 2:d0acbd263ec7 131 {
frankvnk 2:d0acbd263ec7 132 if(m2<m0)
frankvnk 2:d0acbd263ec7 133 screenPtr->x=(temp[0]+temp[2])/2;
frankvnk 2:d0acbd263ec7 134 else
frankvnk 2:d0acbd263ec7 135 screenPtr->x=(temp[0]+temp[1])/2;
frankvnk 2:d0acbd263ec7 136 }
frankvnk 2:d0acbd263ec7 137 else if(m2<m1)
frankvnk 2:d0acbd263ec7 138 screenPtr->x=(temp[0]+temp[2])/2;
frankvnk 2:d0acbd263ec7 139 else
frankvnk 2:d0acbd263ec7 140 screenPtr->x=(temp[1]+temp[2])/2;
frankvnk 2:d0acbd263ec7 141
frankvnk 2:d0acbd263ec7 142 temp[0]=(buffer[1][0]+buffer[1][1]+buffer[1][2])/3;
frankvnk 2:d0acbd263ec7 143 temp[1]=(buffer[1][3]+buffer[1][4]+buffer[1][5])/3;
frankvnk 2:d0acbd263ec7 144 temp[2]=(buffer[1][6]+buffer[1][7]+buffer[1][8])/3;
frankvnk 2:d0acbd263ec7 145 m0=temp[0]-temp[1];
frankvnk 2:d0acbd263ec7 146 m1=temp[1]-temp[2];
frankvnk 2:d0acbd263ec7 147 m2=temp[2]-temp[0];
frankvnk 2:d0acbd263ec7 148 m0=m0>0?m0:(-m0);
frankvnk 2:d0acbd263ec7 149 m1=m1>0?m1:(-m1);
frankvnk 2:d0acbd263ec7 150 m2=m2>0?m2:(-m2);
frankvnk 2:d0acbd263ec7 151 if( (m0>THRESHOLD) && (m1>THRESHOLD) && (m2>THRESHOLD) ) return 0;
frankvnk 2:d0acbd263ec7 152
frankvnk 2:d0acbd263ec7 153 if(m0<m1)
frankvnk 2:d0acbd263ec7 154 {
frankvnk 2:d0acbd263ec7 155 if(m2<m0)
frankvnk 2:d0acbd263ec7 156 screenPtr->y=(temp[0]+temp[2])/2;
frankvnk 2:d0acbd263ec7 157 else
frankvnk 2:d0acbd263ec7 158 screenPtr->y=(temp[0]+temp[1])/2;
frankvnk 2:d0acbd263ec7 159 }
frankvnk 2:d0acbd263ec7 160 else if(m2<m1)
frankvnk 2:d0acbd263ec7 161 screenPtr->y=(temp[0]+temp[2])/2;
frankvnk 2:d0acbd263ec7 162 else
frankvnk 2:d0acbd263ec7 163 screenPtr->y=(temp[1]+temp[2])/2;
frankvnk 2:d0acbd263ec7 164 return 1;
frankvnk 2:d0acbd263ec7 165 }
frankvnk 2:d0acbd263ec7 166 return 0;
frankvnk 2:d0acbd263ec7 167 }
frankvnk 2:d0acbd263ec7 168
frankvnk 2:d0acbd263ec7 169 uint8_t TouchScreenADS7843::setCalibrationMatrix( Coordinate * displayPtr,
frankvnk 2:d0acbd263ec7 170 Coordinate * screenPtr,
frankvnk 2:d0acbd263ec7 171 Matrix * matrixPtr)
frankvnk 2:d0acbd263ec7 172 {
frankvnk 2:d0acbd263ec7 173 uint8_t retTHRESHOLD = 0 ;
frankvnk 2:d0acbd263ec7 174 // K = (Xs0 - Xs2)*(Ys1 - Ys2) - (Xs1 - Xs2)*(Ys0 - Ys2)
frankvnk 2:d0acbd263ec7 175 matrixPtr->Divider = ((screenPtr[0].x - screenPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) -
frankvnk 2:d0acbd263ec7 176 ((screenPtr[1].x - screenPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
frankvnk 2:d0acbd263ec7 177 if( matrixPtr->Divider == 0 )
frankvnk 2:d0acbd263ec7 178 {
frankvnk 2:d0acbd263ec7 179 retTHRESHOLD = 1;
frankvnk 2:d0acbd263ec7 180 }
frankvnk 2:d0acbd263ec7 181 else
frankvnk 2:d0acbd263ec7 182 {
frankvnk 2:d0acbd263ec7 183 // (Xd0 - Xd2)*(Ys1 - Ys2) - (Xd1 - Xd2)*(Ys0 - Ys2)
frankvnk 2:d0acbd263ec7 184 // A = ---------------------------------------------------
frankvnk 2:d0acbd263ec7 185 // K
frankvnk 2:d0acbd263ec7 186 matrixPtr->An = ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) -
frankvnk 2:d0acbd263ec7 187 ((displayPtr[1].x - displayPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
frankvnk 2:d0acbd263ec7 188 // (Xs0 - Xs2)*(Xd1 - Xd2) - (Xd0 - Xd2)*(Xs1 - Xs2)
frankvnk 2:d0acbd263ec7 189 // B = ---------------------------------------------------
frankvnk 2:d0acbd263ec7 190 // K
frankvnk 2:d0acbd263ec7 191 matrixPtr->Bn = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].x - displayPtr[2].x)) -
frankvnk 2:d0acbd263ec7 192 ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].x - screenPtr[2].x)) ;
frankvnk 2:d0acbd263ec7 193 // Ys0*(Xs2*Xd1 - Xs1*Xd2) + Ys1*(Xs0*Xd2 - Xs2*Xd0) + Ys2*(Xs1*Xd0 - Xs0*Xd1)
frankvnk 2:d0acbd263ec7 194 // C = ----------------------------------------------------------------------------
frankvnk 2:d0acbd263ec7 195 // K
frankvnk 2:d0acbd263ec7 196 matrixPtr->Cn = (screenPtr[2].x * displayPtr[1].x - screenPtr[1].x * displayPtr[2].x) * screenPtr[0].y +
frankvnk 2:d0acbd263ec7 197 (screenPtr[0].x * displayPtr[2].x - screenPtr[2].x * displayPtr[0].x) * screenPtr[1].y +
frankvnk 2:d0acbd263ec7 198 (screenPtr[1].x * displayPtr[0].x - screenPtr[0].x * displayPtr[1].x) * screenPtr[2].y ;
frankvnk 2:d0acbd263ec7 199 // (Yd0 - Yd2)*(Ys1 - Ys2) - (Yd1 - Yd2)*(Ys0 - Ys2)
frankvnk 2:d0acbd263ec7 200 // D = ---------------------------------------------------
frankvnk 2:d0acbd263ec7 201 // K
frankvnk 2:d0acbd263ec7 202 matrixPtr->Dn = ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].y - screenPtr[2].y)) -
frankvnk 2:d0acbd263ec7 203 ((displayPtr[1].y - displayPtr[2].y) * (screenPtr[0].y - screenPtr[2].y)) ;
frankvnk 2:d0acbd263ec7 204 // (Xs0 - Xs2)*(Yd1 - Yd2) - (Yd0 - Yd2)*(Xs1 - Xs2)
frankvnk 2:d0acbd263ec7 205 // E = ---------------------------------------------------
frankvnk 2:d0acbd263ec7 206 // K
frankvnk 2:d0acbd263ec7 207 matrixPtr->En = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].y - displayPtr[2].y)) -
frankvnk 2:d0acbd263ec7 208 ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].x - screenPtr[2].x)) ;
frankvnk 2:d0acbd263ec7 209 // Ys0*(Xs2*Yd1 - Xs1*Yd2) + Ys1*(Xs0*Yd2 - Xs2*Yd0) + Ys2*(Xs1*Yd0 - Xs0*Yd1)
frankvnk 2:d0acbd263ec7 210 // F = ----------------------------------------------------------------------------
frankvnk 2:d0acbd263ec7 211 // K
frankvnk 2:d0acbd263ec7 212 matrixPtr->Fn = (screenPtr[2].x * displayPtr[1].y - screenPtr[1].x * displayPtr[2].y) * screenPtr[0].y +
frankvnk 2:d0acbd263ec7 213 (screenPtr[0].x * displayPtr[2].y - screenPtr[2].x * displayPtr[0].y) * screenPtr[1].y +
frankvnk 2:d0acbd263ec7 214 (screenPtr[1].x * displayPtr[0].y - screenPtr[0].x * displayPtr[1].y) * screenPtr[2].y ;
frankvnk 2:d0acbd263ec7 215 }
frankvnk 2:d0acbd263ec7 216 return( retTHRESHOLD ) ;
frankvnk 2:d0acbd263ec7 217 }
frankvnk 2:d0acbd263ec7 218
frankvnk 2:d0acbd263ec7 219 uint8_t TouchScreenADS7843::getDisplayPoint(void)
frankvnk 2:d0acbd263ec7 220 {
frankvnk 2:d0acbd263ec7 221 uint8_t retTHRESHOLD = 0 ;
frankvnk 2:d0acbd263ec7 222
frankvnk 2:d0acbd263ec7 223 if( matrix.Divider != 0 )
frankvnk 2:d0acbd263ec7 224 {
frankvnk 2:d0acbd263ec7 225 // XD = AX+BY+C
frankvnk 2:d0acbd263ec7 226 display.x = ( (matrix.An * screen.x) +
frankvnk 2:d0acbd263ec7 227 (matrix.Bn * screen.y) +
frankvnk 2:d0acbd263ec7 228 matrix.Cn
frankvnk 2:d0acbd263ec7 229 ) / matrix.Divider ;
frankvnk 2:d0acbd263ec7 230 // YD = DX+EY+F
frankvnk 2:d0acbd263ec7 231 display.y = ( (matrix.Dn * screen.x) +
frankvnk 2:d0acbd263ec7 232 (matrix.En * screen.y) +
frankvnk 2:d0acbd263ec7 233 matrix.Fn
frankvnk 2:d0acbd263ec7 234 ) / matrix.Divider ;
frankvnk 2:d0acbd263ec7 235 }
frankvnk 2:d0acbd263ec7 236 else
frankvnk 2:d0acbd263ec7 237 {
frankvnk 2:d0acbd263ec7 238 retTHRESHOLD = 1;
frankvnk 2:d0acbd263ec7 239 }
frankvnk 2:d0acbd263ec7 240 return(retTHRESHOLD);
frankvnk 2:d0acbd263ec7 241 }
frankvnk 2:d0acbd263ec7 242
frankvnk 2:d0acbd263ec7 243 void TouchScreenADS7843::TouchPanel_Calibrate(void)
frankvnk 2:d0acbd263ec7 244 {
frankvnk 2:d0acbd263ec7 245 uint8_t i;
frankvnk 2:d0acbd263ec7 246 Coordinate screen_cal;
frankvnk 2:d0acbd263ec7 247 setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix) ;
frankvnk 3:fb4d62b5ffb3 248 LCD->set_font((unsigned char*) Arial12x12);
frankvnk 2:d0acbd263ec7 249 for(i=0;i<3;i++)
frankvnk 2:d0acbd263ec7 250 {
frankvnk 3:fb4d62b5ffb3 251 LCD->cls();
frankvnk 3:fb4d62b5ffb3 252 LCD->locate(10,10);
frankvnk 3:fb4d62b5ffb3 253 LCD->printf("Touch crosshair to calibrate");
frankvnk 2:d0acbd263ec7 254 wait_ms(500);
frankvnk 2:d0acbd263ec7 255 DrawCross(DisplaySample[i].x,DisplaySample[i].y);
frankvnk 22:9d05a7e6dc9d 256 do {} while (!Read_Ads7843(&screen_cal));
frankvnk 2:d0acbd263ec7 257 ScreenSample[i].x= screen_cal.x;ScreenSample[i].y= screen_cal.y;
frankvnk 2:d0acbd263ec7 258 }
frankvnk 2:d0acbd263ec7 259 setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix) ;
frankvnk 3:fb4d62b5ffb3 260 LCD->cls();
frankvnk 2:d0acbd263ec7 261 }
frankvnk 2:d0acbd263ec7 262
frankvnk 21:a3a843d09295 263 void TouchScreenADS7843::GetCalibration(Matrix * matrixPtr, Coordinate * screenPtr)
frankvnk 21:a3a843d09295 264 {
frankvnk 21:a3a843d09295 265 uint8_t i;
frankvnk 21:a3a843d09295 266 Matrix * mp1;
frankvnk 21:a3a843d09295 267 mp1 = &matrix;
frankvnk 21:a3a843d09295 268 *matrixPtr = *mp1;
frankvnk 21:a3a843d09295 269 for(i=0;i<3;i++)
frankvnk 21:a3a843d09295 270 {
frankvnk 21:a3a843d09295 271 screenPtr[i].x = ScreenSample[i].x;
frankvnk 21:a3a843d09295 272 screenPtr[i].y = ScreenSample[i].y;
frankvnk 21:a3a843d09295 273 }
frankvnk 21:a3a843d09295 274 }
frankvnk 20:5feb12e3801f 275
frankvnk 21:a3a843d09295 276 void TouchScreenADS7843::SetCalibration(Matrix * matrixPtr, Coordinate * screenPtr)
frankvnk 21:a3a843d09295 277 {
frankvnk 21:a3a843d09295 278 uint8_t i;
frankvnk 21:a3a843d09295 279 Matrix * mp1;
frankvnk 21:a3a843d09295 280 mp1 = &matrix;
frankvnk 21:a3a843d09295 281 *mp1 = *matrixPtr;
frankvnk 21:a3a843d09295 282 for(i=0;i<3;i++)
frankvnk 21:a3a843d09295 283 {
frankvnk 21:a3a843d09295 284 ScreenSample[i].x = screenPtr[i].x;
frankvnk 21:a3a843d09295 285 ScreenSample[i].y = screenPtr[i].y;
frankvnk 21:a3a843d09295 286 }
frankvnk 21:a3a843d09295 287 setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix) ;
frankvnk 21:a3a843d09295 288 }