전공 과목 이수1👨‍💻/임베디드시스템

임베디드시스템 터치스크린 이론

천숭이 2021. 12. 21. 00:19

** (터치시 style down, 터치 안할시 style up) **
 
# 터치지점 아는 방법  
lcd 아래에는 금속(전선)이 깔려있다. 이 전선들은 저항선분을 가지고 있다. 저항띠(선)에 터치를 할 시 거리에 따른 저항값이 다르다. 터치한 부분의 전압좌표를 알 수 있는데 이를 계산하면 터치좌표를 알 수 있다.
- 이때, 전압은 소수점을 가지고 있는 실수값이다. 따라서 ADC(analog digital converner)을 이용해 cpu로 갈때 디지털 값으로 변환해 넘겨준다.
 
# ADC set up (장치준비)
- 데이터를 변환하는 시간과 데이터의 형태를 정한다.
- 멀티터치가 아닌 모노터치 = 원터치 (좌표값이 하나만 인식이 됨)
- 실습키트의 터치스크린은 저항성분으로 이루어져있는 스크린이다. (저항방식터치)
- 하나의 analog 입력을 10bit binary 디지털 코드로 부호화하는 것을 8개 가지고 있다.
 
# 스마트폰 터치방식
- 멀티터치, 터치 사이의 거리계산 가능
- 정전방식 (콘댄서방식)
 
# 터치 원리와 동작 순서       **중요**
터치스크린 --> ADC --> CPU
ADC에서 디지털 값으로 변환하면 변환이 끝났음을 CPU에게 알리기위해 인터럽트 발생
1. 터치 (터치시 style down, 터치 안할시 style up)
2. ADC이 터치스크린의 아날로그 값을 디지털값으로 변환. 인터럽트 서비스 루틴 시작
  하드웨어가 인터럽트 발생시키는 것을 IRQ라고 한다.
3. 인터럽트 서비스 루틴으로 인해 (x, y)좌표값을 CPU가 받는다.
 
# 터치 스크린 제어의 순서
1. x,y 위치 계산을 위한 모드 선택 (대기상태 normal , 대기x상태 auto) = ADC set up
2. 터치 오기를 기다린다. 터치 대기 모드
3. (터치발생으로 인해) 인터럽트가 발생하면 선택한 모드에 따른 적합한 변환이 수행
4. x,y 위치의결과값을 얻는다, 인터럽트 대기 모드로 설정해 다음 터치를 기다린다 = 인터럽트 서비스 루틴
- 인터럽트 서비스 루틴 :
  터치 발생 -> 인터럽트 ->다운 터치 모드(대기모드)
 
# wait 인터럽트 모드   **중요**
- stylus down 터치를 기다림
- stylus down 터치가 발생하면 인터럽트가 발생
- 인터럽트로 인해 x,y 좌표 읽어온다
 
# 터치 상태 파악 (UPDOWN 상태 파악)  ** 중요 **
- ADCDATA인 UPDOWN의 15번째 인덱스를 보고 터치 상태를 알 수 있다
  인터럽트 대기 모드에서 stylus down인지 up인지 구분

// 터치상태 판단 코드
if (rADCDAT0 & 0x8000 : rADCTSC &= 0xff;  // styleus up 상태이므로 인터럽트 대기상태 
else :   ADC_x, ADC_y, ADC_x, ADC_y 값을 얻는다
// stylus down // 컨버터 진행후 좌표값을 디지털값으로 보정

- XPDATA : 좌표 변환데이터, (x,y)좌표로 변환
 
# Touch Screen Procedure 터치 스크린 제어 순서 2
1. X,Y 위치 계산을 위한 모드 선택
  Enalbe Prescaler, Normal Disable read start No operation
2. 터치 스크린 인터페이스를, 인터럽트 대기 모드로 설정
  Down, Waiting for interrupt mode
3. 인터럽트가 발생하면, 해당 인터럽트를 처리하기 위해 mask bit를 enable한다.
   mask sub interrupt (ADC and TC)
    mask bit를 이용하면 동일한 인터럽트 발생 방지가 가능
4. 선택한 모드에 따른 적합한 변환이 수행 Stylus Down
5. x/y위치의 결과값을 얻은 후, 다시 인터럽트 대기 모드로 설정
  enalbe Normal, Waiting mode     , Unmask sub interrupt
 
# Calibration 터치 스크린 보정
- LCD 화면과 터치필름 사이가 어긋나며 오차가 발생하는데 이를 보정해준다
- 코드에서 Init_TS
- 보정 후 인터럽트 대기시켜야 한다.
- ISR_ADC 인터럽트 서비스 루틴 ** 터치가 일어났을 때 실행하게 해주는 프로그램
  루틴이 끝나면 마스크를 풀어줘서 다른 터치가 들어올 수 있게 한다