Touch screen
Touch-Screen 이란? 디스플레이에 표시되어 있는 버튼을 손가락으로 접촉하는 것 만으로 컴퓨터를 대화적, 직감적으로 조작함으로써 누구나 쉽 게 사용할 수 있는 입력 장치 사용자 인터페이스의 다양화 키보드를 통한 텍스트 입력 마우스를 이용하여 포인팅 디바이스에 의한 GUI 입력 다양한 포인팅 디바이스를 GUI입력 터치스크린을 사용하는 장점 MISS INPUT의 감소 간단하게 직감적 조작 소형, 경량화 터치스크린에 필요한 기본기능 터치 입력의 유무 판단 기능 (Touch Sensor) 터치입력이 있을 때의 좌표검지 기능 컴퓨터와의 INTERFACE등으로 생각할 수 있다
도전 필름 방식 (MATRIX SWITCH) Touch-Screen 이란? 터치스크린의 종류 Matrix Switch 방식 아날로그 방식 광 센서 (적외선) 매트릭스 방식 도전 필름 방식 (ANALOG) 도전 필름 방식 (MATRIX SWITCH) 하중분압(압력 센서) 방식 용량변화방식 표면파(초음파) 반사 방식 금속 세선 매립 방식 금속 세선 매립 방식 (감압 방식)
저항막 방식 touch screen 형태 원리 특징 유리나 투명한 플라스틱 판 위에 저항성분의 물질을 입히고 그 위에 폴리에스틸렌 필름을 덮어 씌운 형태 두 면이 서로 닿지 않도록 일정한 간격으로 절연층(Dot Spacer)이 설치되어 있음 원리 저항막의 양단에서 일정한 전류를 흘려주면 저항막이 저항체 역할을 하여 양단에 전압이 걸림 손으로 접촉을 하게 되면 위쪽 표면의 폴리에스틸렌 필름이 휘어지면서 두 면이 접촉 이때 두 면의 저항 성분 때문에 저항의 병렬접속과 같은 형태가 되어 저항 값의 변화가 일어나 게 되며,양단에 흐르는 전류에 의한 전압의 변화 정도로 접촉된 손의 위치를 파악 특징 원리의 특성상 두 면이 닿아야 인식된다. 볼펜이나 기타 물질에 의한 압력으로도 인식된다. 뾰쪽한 물체에 의한 손상이나 사용빈도에 따라 표면에 긁힘이 날 수 있다. 수명이 거의 영구적이다(한 점당 200만 터치 ; 일반적으로 약 10년 간 사용) 터치시 반응속도가 빠르다(초당 약 150번 이상) 오차율이 적다(2%). 투명도가 좋음(폴리에스틸렌 필림의 종류에 따라 88~92%의 투과율)
Touch-Screen H/W 특성 아날로그 저항막 방식 터치스크린에 대하여 설명 아날로그 저항막 방식 터치스크린 구조 상부전극(투명도전막: ITO이 형성된 PET필름)과 하부 전극(투명도전막이 형성된 유리기판), 연결배선 (Flexible Cable)로 구성 하부전극 위에 Dot Spacer를 상부 전극에 대향 하도록 형성된 구조
Touch-Screen H/W 특성
정전 용량 방식 형태 원리 특징 유리 또는 플라스틱, 필름과 같은 양면에 투명한 특수전도성 금속(TAO) 을 코팅 원리 스크린의 네 귀퉁이에 전압을 걸어 구석에서 발생되는 고주파가 센서 전 면에 퍼지게 된다. 손가락으로 스크린을 접촉하게 되면 수신부에서 변형된 파형이 감지하여 컨트롤러에서 위치를 계산 특징 미세한 정전압에도 반응하므로 살짝만 접촉되어도 감지한다. 높은 분해 능력을 가진다(1024×1024). 강화 처리된 유리에 특수 금속 코팅을 했기 때문에 견고성이 좋다. 수명이 길다(1 포인트 당 2000만 터치). 빛 투과율이 높아 원 화상의 색상을 그대로 살릴 수 있다. 터치 시 반응속도가 매우 빠르다(초당 약 270번 이상). 오차율이 매우 적어 정확하다(오차율 : 1%).
정전 용량 방식
Hardware TI TSC2046 for NDS Asahi Kasei Microsystems AK4148AVT for NDSL Connected via SPI Control Byte (transferred MSB first) 0-1 Power Down Mode Select 2 Reference Select (0=Differential, 1=Single-Ended) 3 Conversion Mode (0=12bit, max CLK=2MHz, 1=8bit, max CLK=3MHz) 4-6 Channel Select (0-7, see below) 7 Start Bit (Must be set to access Control Byte) Channel 0 Temperature 0 (requires calibration, step 2.1mV per 1'C accuracy) 1 Touchscreen Y-Position (somewhat 0B0h..F20h, or FFFh=released) 2 Battery Voltage (not used, connected to GND in NDS, always 000h) 3 Touchscreen Z1-Position (diagonal position for pressure measurement) 4 Touchscreen Z2-Position (diagonal position for pressure measurement) 5 Touchscreen X-Position (somewhat 100h..ED0h, or 000h=released) 6 AUX Input (connected to Microphone in the NDS) 7 Temperature 1 (difference to Temp 0, without calibration, 2'C accuracy)
Reading touch screen position linux-2.6.x/arch/arm/mach-nds/arm7/spi.c static u16 touch_read(u32 command) { u16 result; WAIT_FOR_NOT_BUSY(); // Write the command and wait for it to complete REG_SPI_CR = SPI_ENABLE | SPI_CONTINUOUS | SPI_TOUCH | SPI_8CLOCKS | SPI_2MHZ ; REG_SPI_DATA = command; // Write the second command and clock in part of the data REG_SPI_DATA = 0; result = REG_SPI_DATA; // Clock in the rest of the data (last transfer) REG_SPI_CR = SPI_ENABLE | SPI_SINGLE | SPI_TOUCH | SPI_8CLOCKS | SPI_2MHZ ; // Return the result result = ((result & 0x7F) << 5) | (REG_SPI_DATA >> 3); REG_SPI_CR = 0; return result ; } s32 touch_read_value(int measure, int retry , int range) { int i; s32 this_value=0, this_range; s32 last_value = touch_read(measure | 1); for ( i=0; i < retry; i++) { this_value = touch_read(measure | 1); if ((last_value - this_value) > 0) this_range = last_value - this_value; else this_range = this_value - last_value; if (this_range <= range) break; } if ( i == range) this_value = 0; return this_value;
Touch screen device driver in Linux Touch screen을 mouse와 같은 입력 장치로 사용 하기 위해서는 INPUT 디바이스 드라이버 필요
INPUT device driver 기존 device driver와 다른 점 입력 장치는 여러 가지가 존재하며, 이들을 모두 따로 다루는 것은 매우 번거로움 다양한 입력 장치를 통합하여 hardware 장치에 관계없이 일관된 구성과 절차를 제공 이 부분은 아직 완료되지 않음
INPUT device driver 정보 확인 # cd /proc/bus/input/ # ls –al dr-xr-xr-x 2 0 0 0. dr-xr-xr-x 3 0 0 0 .. -r--r--r-- 1 0 0 0 devices -r--r--r-- 1 0 0 0 handlers [root@linux input]$ cat devices I : Bus=0000 Vendor=0000 Product=0000 Version=0000 N : Name=“Nintendo DS Touchscreen” P : Phys= H : Handlers=kbd mouse0 event1 B : EV=12000b B : KEY=420 0 0 0 0 0 800 60000012 1c0001f ff7fffff fffffffe B : ABS=11000003 B : LED=2 Device ID Device name 물리적 장치 연결된 handler
Event event handler drivers/input/evdev.c 응용 프로그램에서의 접근 장치 독립적인 범용적인 형식으로 입력 값을 받아들이기 위한 디 바이스 드라이버 입력 장치마다 하나씩 생성 응용 프로그램에서의 접근 read 함수를 이용하여 읽을 수 있음 버퍼 형식 struct input_event { struct timeval time; unsigned short type; unsigned short code; unsigned int value; }; type: EV_SYN, EV_KEY, EV_ABS code: BTN_TOUCH, ABS_X, ABS_Y,…
Touch screen device driver의 연결 drivers/input/touchscreen/nds_ts.c ndstouch_input_event MOUSE_MODE KEYBOARD_MODE input_report_key input_report_key input_report_abs drivers/input/mousedev.c Mouse event mousedev_event input_event drivers/input/input.c keyboard event drivers/char/keyboard.c kbd_event
Mouse device /dev/mouse0 mouse_read.c #include <stdio.h> #include <fcntl.h> int main(void) { int fd; signed char u[3]; fd = open("/dev/mouse0",O_RDONLY); while(1) { read(fd, u, 3); printf("button=%d, x=%d, y=%d\n", (int)u[0], (int)u[1], (int)u[2]); } close(fd); return 0;
Touch screen device 자체에 대한 comments DS Linux의 구현 Mode 0 with BG0 & BG1 active Text mode 임 draw_keyboard 함수 참조 만일 sub-LCD에 그림을 그리고 싶다면? Mode 5의 frame buffer 를 이용하면 됨. /dev/fb1 을 open하여 사용 LCD 슬라이드 참조. 동일한 코드에 /dev/fb1 으로 변경