TTP229 TonTouch IC 개요
TTP229 TonTouch IC는 정전 용량感应 원리를 기반으로 설계된 터치chip입니다. 이 chip에는 터치 센서용 레귤레이터 회로가 내장되어 있어 다양한 응용 분야에서 안정적인 터치 효과를 제공할 수 있습니다. 인체 터치 패널은 비전도성 절연 재료를 통해 연결할 수 있으며, 주로 기계 스위치나 버튼을 대체하는 용도로 사용됩니다. 이 chip은 독립적으로 8개 또는 16개의 터치 키를 지원할 수 있습니다.
입력 키数目 선택
TTP229는 8키 입력 모드와 16키 입력 모드를 제공합니다. 이 두 모드는 TP2(KYSEL) 포트가 VSS로 고저항 저항을 연결하는지에 따라 결정됩니다. 기본값은 TP2(KYSEL)에 저항을 연결하지 않으면 8키 입력 모드가 되고, 고저항 저항을 VSS에 연결하면 16키 입력 모드가 됩니다. 본 모듈에서는 TP2에 고저항 저항을 GND에 연결하여 16키 입력 모드로 설정되어 있습니다.
데이터 출력 모드
TTP229는 8포트 직접 출력 모드와 두 가지 직렬 출력 모드를 가지고 있습니다. 16키 입력 모드에서는 직렬 출력 방식만 사용할 수 있습니다. 본 모듈에서는 2선 출력 모드를 채택하고 있습니다.
키 작동 모드
TTP229는 단일 키有効와 다중 키有効 기능을 갖추고 있습니다. 이러한 기능들은 TP3(SKMS1)과 TP4(SKMS0) 포트로 설정합니다. 전체 16개 키는 한 그룹 또는 두 그룹으로 설정할 수 있습니다. 첫 번째 그룹에는 TP0, TP1, TP2, TP3, TP8, TP9, TP10, TP11 키가 포함되고, 두 번째 그룹에는 TP4, TP5, TP6, TP7, TP12, TP13, TP14, TP15 키가 포함됩니다. 설정 방식은 다음 표와 같습니다.
| TP3 | TP4 | 기능 설명 |
|---|---|---|
| 0 | 0 | 전체 다중 키有効: 한 그룹으로 설정(16키) |
| 0 | 1 | 2그룹 설정: 첫 번째 그룹=>단일 키; 두 번째 그룹=>다중 키 |
| 1 | 0 | 2그룹 설정: 첫 번째 그룹=>단일 키; 두 번째 그룹=>단일 키 |
| 1 | 1 | 전체 단일 키有効: 한 그룹(16키) |
참고사항:
- 한 그룹으로 설정: TP0~TP15 전체 포함
- 두 그룹으로 설정: 첫 번째 그룹=>TP0, TP1, TP2, TP3, TP8, TP9, TP10, TP11; 두 번째 그룹=>TP4, TP5, TP6, TP7, TP12, TP13, TP14, TP15
- 8 모드 사용 시 TP0~TP7이 입력 키
- TP3와 TP4의 선택 상태에서 "0" 상태는 고저항 저항을 VSS에 연결한 것이고, "1" 상태는 연결하지 않은 것
- 단일 키有効 기능에서 키 감지 우선순위는 키 스캔 순서(TP0부터 TP15까지)에 따르며, 동시에 여러 키가 터치되면 키가 터치된 강도가 아닌 스캔 순서에 따라 결정됨
본 모듈은 TP3와 TP4에 고저항 저항을 GND에 연결하여 전체 다중 키有効, 한 그룹(16키) 설정입니다.
모듈과 8051 마이크로컨트롤러 연결
| TTP229 | 8051 마이크로컨트롤러 |
|---|---|
| V | 5V |
| G | GND |
| SCL | P1.0 |
| SDA | P1.1 |
TTP229의 시퀀스와 프로그램
모듈은 2선 직렬 통신 방식을 채택하고 있습니다.
2선 직렬 통신 방식 시퀀스
모듈 설정은 TP1=1, TP2=0, 16키 모드, 로우 레벨 유효입니다.
데이터 읽기 프로그램
unsigned int read_touch_key(void)
{
unsigned char loop_cnt;
unsigned int key_value = 0;
data_pin_output = 0;
delay_microsecond(10);
data_pin_output = 1;
delay_microsecond(1);
for(loop_cnt = 0; loop_cnt < 16; loop_cnt++)
{
key_value >>= 1;
clock_pin = 0;
if(data_pin_input == 0)
{
key_value |= 0x8000;
}
clock_pin = 1;
}
return key_value;
}
메인 프로그램 및 데이터 처리 프로그램
void main(void)
{
unsigned int key_buffer = 0;
serial_init();
while(1)
{
key_buffer = read_touch_key();
if(key_buffer == 0x0001) {
serial_transmit('1');
serial_print("\r\n");
}
else if(key_buffer == 0x0002) {
serial_transmit('2');
serial_print("\r\n");
}
else if(key_buffer == 0x0004) {
serial_transmit('3');
serial_print("\r\n");
}
else if(key_buffer == 0x0008) {
serial_transmit('A');
serial_print("\r\n");
}
else if(key_buffer == 0x0010) {
serial_transmit('4');
serial_print("\r\n");
}
else if(key_buffer == 0x0020) {
serial_transmit('5');
serial_print("\r\n");
}
else if(key_buffer == 0x0040) {
serial_transmit('6');
serial_print("\r\n");
}
else if(key_buffer == 0x0080) {
serial_transmit('B');
serial_print("\r\n");
}
else if(key_buffer == 0x0100) {
serial_transmit('7');
serial_print("\r\n");
}
else if(key_buffer == 0x0200) {
serial_transmit('8');
serial_print("\r\n");
}
else if(key_buffer == 0x0400) {
serial_transmit('9');
serial_print("\r\n");
}
else if(key_buffer == 0x0800) {
serial_transmit('C');
serial_print("\r\n");
}
else if(key_buffer == 0x1000) {
serial_transmit('*');
serial_print("\r\n");
}
else if(key_buffer == 0x2000) {
serial_transmit('0');
serial_print("\r\n");
}
else if(key_buffer == 0x4000) {
serial_transmit('#');
serial_print("\r\n");
}
else if(key_buffer == 0x8000) {
serial_transmit('D');
serial_print("\r\n");
}
delay_millisecond(100);
}
}
실험 결과
각 키에 해당하는 핀을 누르면 시리얼 모니터에 해당 값이 출력됩니다.
유의사항
- 모듈은 오작동이 발생할 수 있으므로 손가락으로 최대한 중앙 부분을 누르세요.
- 모듈 뒷면에 금속 물질이 없어야 합니다.