Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of TouchADS7843 by
Touch.h@0:5d8d6a976b8b, 2011-01-16 (annotated)
- Committer:
- Suky
- Date:
- Sun Jan 16 14:08:38 2011 +0000
- Revision:
- 0:5d8d6a976b8b
- Child:
- 1:63a925e2a3d2
1.0
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Suky | 0:5d8d6a976b8b | 1 | /* |
| Suky | 0:5d8d6a976b8b | 2 | \file Touch.h |
| Suky | 0:5d8d6a976b8b | 3 | \version: 1.0 |
| Suky | 0:5d8d6a976b8b | 4 | |
| Suky | 0:5d8d6a976b8b | 5 | \brief Este fichero contiene class para control de TouchScreen ADS7843 |
| Suky | 0:5d8d6a976b8b | 6 | |
| Suky | 0:5d8d6a976b8b | 7 | \web www.micros-designs.com.ar |
| Suky | 0:5d8d6a976b8b | 8 | \date 16/01/11 |
| Suky | 0:5d8d6a976b8b | 9 | |
| Suky | 0:5d8d6a976b8b | 10 | *- Version Log --------------------------------------------------------------* |
| Suky | 0:5d8d6a976b8b | 11 | * Fecha Autor Comentarios * |
| Suky | 0:5d8d6a976b8b | 12 | *----------------------------------------------------------------------------* |
| Suky | 0:5d8d6a976b8b | 13 | * 16/01/11 Suky Original * |
| Suky | 0:5d8d6a976b8b | 14 | *----------------------------------------------------------------------------* |
| Suky | 0:5d8d6a976b8b | 15 | /////////////////////////////////////////////////////////////////////////// |
| Suky | 0:5d8d6a976b8b | 16 | //// //// |
| Suky | 0:5d8d6a976b8b | 17 | //// //// |
| Suky | 0:5d8d6a976b8b | 18 | //// (C) Copyright 201 www.micros-designs.com.ar //// |
| Suky | 0:5d8d6a976b8b | 19 | //// Este código puede ser usado, modificado y distribuido libremente //// |
| Suky | 0:5d8d6a976b8b | 20 | //// sin eliminar esta cabecera y sin garantía de ningún tipo. //// |
| Suky | 0:5d8d6a976b8b | 21 | //// //// |
| Suky | 0:5d8d6a976b8b | 22 | //// //// |
| Suky | 0:5d8d6a976b8b | 23 | /////////////////////////////////////////////////////////////////////////// |
| Suky | 0:5d8d6a976b8b | 24 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 25 | // ************************** EXAMPLE *********************************** |
| Suky | 0:5d8d6a976b8b | 26 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 27 | #include "mbed.h" |
| Suky | 0:5d8d6a976b8b | 28 | #include "Touch.h" |
| Suky | 0:5d8d6a976b8b | 29 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 30 | #define TOUCH_X_MIN 30 |
| Suky | 0:5d8d6a976b8b | 31 | #define TOUCH_X_MAX 230 |
| Suky | 0:5d8d6a976b8b | 32 | #define TOUCH_Y_MIN 15 |
| Suky | 0:5d8d6a976b8b | 33 | #define TOUCH_Y_MAX 240 |
| Suky | 0:5d8d6a976b8b | 34 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 35 | DigitalOut Led1(LED1); |
| Suky | 0:5d8d6a976b8b | 36 | DigitalOut Led2(LED2); |
| Suky | 0:5d8d6a976b8b | 37 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 38 | TOUCH_DATA Coordenadas; |
| Suky | 0:5d8d6a976b8b | 39 | volatile bool kbhit_irq=0; |
| Suky | 0:5d8d6a976b8b | 40 | |
| Suky | 0:5d8d6a976b8b | 41 | TouchScreenADS7843 MyTouch(p9,p10,p11,p12,p8); // ADS7843-> SDO,SDI,SCK,CS,IRQ |
| Suky | 0:5d8d6a976b8b | 42 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 43 | void vISRTouchIRQ(void){ |
| Suky | 0:5d8d6a976b8b | 44 | UINT_COORDxy Temp; |
| Suky | 0:5d8d6a976b8b | 45 | |
| Suky | 0:5d8d6a976b8b | 46 | MyTouch.vTestTouchPanel(&Coordenadas); |
| Suky | 0:5d8d6a976b8b | 47 | // Coordenadas dentro del rango de pantalla LCD: |
| Suky | 0:5d8d6a976b8b | 48 | if((Coordenadas.x>TOUCH_X_MIN && Coordenadas.x<TOUCH_X_MAX) && (Coordenadas.y>TOUCH_Y_MIN && Coordenadas.y<TOUCH_Y_MAX)){ |
| Suky | 0:5d8d6a976b8b | 49 | // Cambio de coordenada y escala: |
| Suky | 0:5d8d6a976b8b | 50 | Temp=Coordenadas.y; |
| Suky | 0:5d8d6a976b8b | 51 | Coordenadas.y=((float)((255-TOUCH_X_MIN)-Coordenadas.x)*(320.0/(TOUCH_X_MAX-TOUCH_X_MIN))); |
| Suky | 0:5d8d6a976b8b | 52 | Coordenadas.x=((float)(Temp-TOUCH_Y_MIN)*(240.0/(TOUCH_Y_MAX-TOUCH_Y_MIN))); |
| Suky | 0:5d8d6a976b8b | 53 | kbhit_irq=1; |
| Suky | 0:5d8d6a976b8b | 54 | } |
| Suky | 0:5d8d6a976b8b | 55 | } |
| Suky | 0:5d8d6a976b8b | 56 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 57 | int main(){ |
| Suky | 0:5d8d6a976b8b | 58 | |
| Suky | 0:5d8d6a976b8b | 59 | //MyTouch.vInitADS7843(USE_12BITS,NULL); |
| Suky | 0:5d8d6a976b8b | 60 | MyTouch.vInitADS7843(USE_8BITS,&vISRTouchIRQ); |
| Suky | 0:5d8d6a976b8b | 61 | |
| Suky | 0:5d8d6a976b8b | 62 | Led1=0; |
| Suky | 0:5d8d6a976b8b | 63 | Led2=0; |
| Suky | 0:5d8d6a976b8b | 64 | |
| Suky | 0:5d8d6a976b8b | 65 | while(1){ |
| Suky | 0:5d8d6a976b8b | 66 | Led2=!Led2; |
| Suky | 0:5d8d6a976b8b | 67 | if(kbhit_irq==1){ |
| Suky | 0:5d8d6a976b8b | 68 | kbhit_irq=0; |
| Suky | 0:5d8d6a976b8b | 69 | if((Coordenadas.x<235 && Coordenadas.x>135) && (Coordenadas.y<320 && Coordenadas.y>250)){ |
| Suky | 0:5d8d6a976b8b | 70 | Led1=!Led1; |
| Suky | 0:5d8d6a976b8b | 71 | } |
| Suky | 0:5d8d6a976b8b | 72 | } |
| Suky | 0:5d8d6a976b8b | 73 | wait_ms(300); |
| Suky | 0:5d8d6a976b8b | 74 | } |
| Suky | 0:5d8d6a976b8b | 75 | } |
| Suky | 0:5d8d6a976b8b | 76 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 77 | */ |
| Suky | 0:5d8d6a976b8b | 78 | #include "mbed.h" |
| Suky | 0:5d8d6a976b8b | 79 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 80 | #define USE_12BITS 12 |
| Suky | 0:5d8d6a976b8b | 81 | #define USE_8BITS 8 |
| Suky | 0:5d8d6a976b8b | 82 | #define ENABLE_INTERRUPT 1 |
| Suky | 0:5d8d6a976b8b | 83 | #define DISABLE_INTERRUPT 0 |
| Suky | 0:5d8d6a976b8b | 84 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 85 | typedef unsigned short UINT_COORDxy; |
| Suky | 0:5d8d6a976b8b | 86 | typedef struct { |
| Suky | 0:5d8d6a976b8b | 87 | UINT_COORDxy x; |
| Suky | 0:5d8d6a976b8b | 88 | UINT_COORDxy y; |
| Suky | 0:5d8d6a976b8b | 89 | }TOUCH_DATA; |
| Suky | 0:5d8d6a976b8b | 90 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 91 | class TouchScreenADS7843 { |
| Suky | 0:5d8d6a976b8b | 92 | public: |
| Suky | 0:5d8d6a976b8b | 93 | TouchScreenADS7843(PinName PIN_SDO,PinName PIN_SDI,PinName PIN_CLK,PinName PIN_CS,PinName PIN_IRQ); |
| Suky | 0:5d8d6a976b8b | 94 | virtual void vInitADS7843(unsigned char Bits,void (*fptr)(void)); |
| Suky | 0:5d8d6a976b8b | 95 | virtual void vSetResolution(unsigned char Bits); |
| Suky | 0:5d8d6a976b8b | 96 | virtual void vTestTouchPanel(TOUCH_DATA *Data); |
| Suky | 0:5d8d6a976b8b | 97 | virtual void vEnableSetInterrupt(void (*fptr)(void)); |
| Suky | 0:5d8d6a976b8b | 98 | virtual void vDisableInterrupt(void); |
| Suky | 0:5d8d6a976b8b | 99 | virtual bool bReadPinIRQ(void); |
| Suky | 0:5d8d6a976b8b | 100 | protected: |
| Suky | 0:5d8d6a976b8b | 101 | #define __delay_CLK_ADS7843() wait_us(1) |
| Suky | 0:5d8d6a976b8b | 102 | #define ADS7843_READ_X_8 0x98 // IRQ Enable |
| Suky | 0:5d8d6a976b8b | 103 | #define ADS7843_READ_Y_8 0xD8 |
| Suky | 0:5d8d6a976b8b | 104 | #define ADS7843_READ_X_12 0x90 // IRQ Enable |
| Suky | 0:5d8d6a976b8b | 105 | #define ADS7843_READ_Y_12 0xD0 |
| Suky | 0:5d8d6a976b8b | 106 | DigitalOut _PIN_SDI,_PIN_CS,_PIN_CLK; |
| Suky | 0:5d8d6a976b8b | 107 | DigitalIn _PIN_SDO,_PIN_IRQ; |
| Suky | 0:5d8d6a976b8b | 108 | InterruptIn ADS7843_Event_Touch; |
| Suky | 0:5d8d6a976b8b | 109 | unsigned char Resolution; |
| Suky | 0:5d8d6a976b8b | 110 | virtual UINT_COORDxy ADS7843WriteAndReadData(unsigned char Data); |
| Suky | 0:5d8d6a976b8b | 111 | }; |
| Suky | 0:5d8d6a976b8b | 112 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 113 | TouchScreenADS7843::TouchScreenADS7843(PinName PIN_SDO,PinName PIN_SDI,PinName PIN_CLK,PinName PIN_CS,PinName PIN_IRQ) |
| Suky | 0:5d8d6a976b8b | 114 | : _PIN_SDO(PIN_SDO),_PIN_SDI(PIN_SDI),_PIN_CS(PIN_CS),_PIN_CLK(PIN_CLK),_PIN_IRQ(PIN_IRQ),ADS7843_Event_Touch(PIN_IRQ) {} |
| Suky | 0:5d8d6a976b8b | 115 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 116 | void TouchScreenADS7843::vInitADS7843(unsigned char Bits,void (*fptr)(void)) { |
| Suky | 0:5d8d6a976b8b | 117 | |
| Suky | 0:5d8d6a976b8b | 118 | _PIN_CS=1; |
| Suky | 0:5d8d6a976b8b | 119 | _PIN_SDI=0; |
| Suky | 0:5d8d6a976b8b | 120 | _PIN_CLK=0; |
| Suky | 0:5d8d6a976b8b | 121 | Resolution=Bits; |
| Suky | 0:5d8d6a976b8b | 122 | if (fptr!=NULL) { |
| Suky | 0:5d8d6a976b8b | 123 | ADS7843_Event_Touch.fall(fptr); |
| Suky | 0:5d8d6a976b8b | 124 | } |
| Suky | 0:5d8d6a976b8b | 125 | } |
| Suky | 0:5d8d6a976b8b | 126 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 127 | void TouchScreenADS7843::vSetResolution(unsigned char Bits) { |
| Suky | 0:5d8d6a976b8b | 128 | Resolution=Bits; |
| Suky | 0:5d8d6a976b8b | 129 | } |
| Suky | 0:5d8d6a976b8b | 130 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 131 | void TouchScreenADS7843::vEnableSetInterrupt(void (*fptr)(void)) { |
| Suky | 0:5d8d6a976b8b | 132 | ADS7843_Event_Touch.fall(fptr); |
| Suky | 0:5d8d6a976b8b | 133 | } |
| Suky | 0:5d8d6a976b8b | 134 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 135 | void TouchScreenADS7843::vDisableInterrupt(void) { |
| Suky | 0:5d8d6a976b8b | 136 | ADS7843_Event_Touch.fall(NULL); |
| Suky | 0:5d8d6a976b8b | 137 | } |
| Suky | 0:5d8d6a976b8b | 138 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 139 | bool TouchScreenADS7843::bReadPinIRQ(void) { |
| Suky | 0:5d8d6a976b8b | 140 | return(_PIN_IRQ); |
| Suky | 0:5d8d6a976b8b | 141 | } |
| Suky | 0:5d8d6a976b8b | 142 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 143 | UINT_COORDxy TouchScreenADS7843::ADS7843WriteAndReadData(unsigned char Data) { |
| Suky | 0:5d8d6a976b8b | 144 | unsigned char k; |
| Suky | 0:5d8d6a976b8b | 145 | UINT_COORDxy Temp; |
| Suky | 0:5d8d6a976b8b | 146 | |
| Suky | 0:5d8d6a976b8b | 147 | _PIN_CS=0; |
| Suky | 0:5d8d6a976b8b | 148 | __delay_CLK_ADS7843(); |
| Suky | 0:5d8d6a976b8b | 149 | // En cada flanco ascendente se toma el dato: |
| Suky | 0:5d8d6a976b8b | 150 | for (k=0;k<8;k++) { |
| Suky | 0:5d8d6a976b8b | 151 | _PIN_SDI=!!(Data&0x80); |
| Suky | 0:5d8d6a976b8b | 152 | __delay_CLK_ADS7843(); |
| Suky | 0:5d8d6a976b8b | 153 | _PIN_CLK=1; |
| Suky | 0:5d8d6a976b8b | 154 | __delay_CLK_ADS7843(); |
| Suky | 0:5d8d6a976b8b | 155 | Data<<=1; |
| Suky | 0:5d8d6a976b8b | 156 | _PIN_CLK=0; |
| Suky | 0:5d8d6a976b8b | 157 | |
| Suky | 0:5d8d6a976b8b | 158 | } |
| Suky | 0:5d8d6a976b8b | 159 | __delay_CLK_ADS7843(); // Esperamos busy: |
| Suky | 0:5d8d6a976b8b | 160 | _PIN_CLK=1; |
| Suky | 0:5d8d6a976b8b | 161 | __delay_CLK_ADS7843(); |
| Suky | 0:5d8d6a976b8b | 162 | _PIN_CLK=0; |
| Suky | 0:5d8d6a976b8b | 163 | __delay_CLK_ADS7843(); |
| Suky | 0:5d8d6a976b8b | 164 | __delay_CLK_ADS7843(); // Esperamos busy: |
| Suky | 0:5d8d6a976b8b | 165 | |
| Suky | 0:5d8d6a976b8b | 166 | // En flanco descendente leemos data desde el ADS7843: |
| Suky | 0:5d8d6a976b8b | 167 | _PIN_CLK=1; |
| Suky | 0:5d8d6a976b8b | 168 | Temp=0; |
| Suky | 0:5d8d6a976b8b | 169 | |
| Suky | 0:5d8d6a976b8b | 170 | if (Resolution==8) { |
| Suky | 0:5d8d6a976b8b | 171 | for (k=0;k<8;k++) { |
| Suky | 0:5d8d6a976b8b | 172 | Temp<<=1; |
| Suky | 0:5d8d6a976b8b | 173 | _PIN_CLK=0; |
| Suky | 0:5d8d6a976b8b | 174 | Temp+=_PIN_SDO; |
| Suky | 0:5d8d6a976b8b | 175 | __delay_CLK_ADS7843(); |
| Suky | 0:5d8d6a976b8b | 176 | _PIN_CLK=1; |
| Suky | 0:5d8d6a976b8b | 177 | } |
| Suky | 0:5d8d6a976b8b | 178 | } else { |
| Suky | 0:5d8d6a976b8b | 179 | for (k=0;k<12;k++) { |
| Suky | 0:5d8d6a976b8b | 180 | Temp<<=1; |
| Suky | 0:5d8d6a976b8b | 181 | _PIN_CLK=0; |
| Suky | 0:5d8d6a976b8b | 182 | Temp+=_PIN_SDO; |
| Suky | 0:5d8d6a976b8b | 183 | __delay_CLK_ADS7843(); |
| Suky | 0:5d8d6a976b8b | 184 | _PIN_CLK=1; |
| Suky | 0:5d8d6a976b8b | 185 | } |
| Suky | 0:5d8d6a976b8b | 186 | } |
| Suky | 0:5d8d6a976b8b | 187 | __delay_CLK_ADS7843(); |
| Suky | 0:5d8d6a976b8b | 188 | _PIN_CLK=0; |
| Suky | 0:5d8d6a976b8b | 189 | _PIN_CS=1; |
| Suky | 0:5d8d6a976b8b | 190 | |
| Suky | 0:5d8d6a976b8b | 191 | return(Temp); |
| Suky | 0:5d8d6a976b8b | 192 | } |
| Suky | 0:5d8d6a976b8b | 193 | // ********************************************************************** |
| Suky | 0:5d8d6a976b8b | 194 | void TouchScreenADS7843::vTestTouchPanel(TOUCH_DATA *Data) { |
| Suky | 0:5d8d6a976b8b | 195 | unsigned short TempX,TempY; |
| Suky | 0:5d8d6a976b8b | 196 | unsigned char k; |
| Suky | 0:5d8d6a976b8b | 197 | |
| Suky | 0:5d8d6a976b8b | 198 | wait_ms(1); |
| Suky | 0:5d8d6a976b8b | 199 | |
| Suky | 0:5d8d6a976b8b | 200 | TempX=0; |
| Suky | 0:5d8d6a976b8b | 201 | TempY=0; |
| Suky | 0:5d8d6a976b8b | 202 | for (k=0;k<8;k++) { |
| Suky | 0:5d8d6a976b8b | 203 | if (Resolution==8) { |
| Suky | 0:5d8d6a976b8b | 204 | TempX+=ADS7843WriteAndReadData(ADS7843_READ_X_8); |
| Suky | 0:5d8d6a976b8b | 205 | TempY+=ADS7843WriteAndReadData(ADS7843_READ_Y_8); |
| Suky | 0:5d8d6a976b8b | 206 | } else { |
| Suky | 0:5d8d6a976b8b | 207 | TempX+=ADS7843WriteAndReadData(ADS7843_READ_X_12); |
| Suky | 0:5d8d6a976b8b | 208 | TempY+=ADS7843WriteAndReadData(ADS7843_READ_Y_12); |
| Suky | 0:5d8d6a976b8b | 209 | } |
| Suky | 0:5d8d6a976b8b | 210 | } |
| Suky | 0:5d8d6a976b8b | 211 | |
| Suky | 0:5d8d6a976b8b | 212 | |
| Suky | 0:5d8d6a976b8b | 213 | Data->x=(TempX>>3); |
| Suky | 0:5d8d6a976b8b | 214 | Data->y=(TempY>>3); |
| Suky | 0:5d8d6a976b8b | 215 | |
| Suky | 0:5d8d6a976b8b | 216 | return; |
| Suky | 0:5d8d6a976b8b | 217 | } |
| Suky | 0:5d8d6a976b8b | 218 | // ********************************************************************** |
