본문 바로가기

[FreeScale]/KINETIS

K20 EVM - Kinetis Cortex-M4 K20 TSI 정전용량 스위치 테스트

K20 EVM - Kinetis Cortex-M4 K20 TSI 정전용량 스위치 테스트




요즘 출시되는 대부분의 MCU들은 정전용량 터치센서를 위한 하드웨어 블럭을 기본으로 제공하는것 같다. 사용해 보았던 CAP Sensor MCU 중에는 가장 사용하기 편리하고 기능이 풍부한것 같다.



K20 TSI 테스트 동영상





K20 TSI 블록도




K20 EVM 보드에서 TSI9(PB16), TSI10(PB17) 포트를 이용하여 테스트 했다.






K20 TSI 초기화 함수 소스코드


void TSI_Init(void) 

{

//PORTB, TSI클럭 enable

    SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK | SIM_SCGC5_TSI_MASK;


//PORT 할당

    PORTA_PCR16 = PORT_PCR_MUX(0);

    PORTA_PCR17 = PORT_PCR_MUX(0);


// Clear the EOSF (End of Scan) flag

    TSI0_GENCS |= TSI_GENCS_EOSF_MASK;


    TSI0_GENCS |= TSI_GENCS_NSCN(10) | // Set number of consecutive scans per electrode to 11

    TSI_GENCS_PS(4) | // Set electrode oscillator prescaler to divide by 16

    TSI_GENCS_STPE_MASK | // Keep TSI running when MCU goes into low power mode

    TSI_GENCS_LPSCNITV(7); // Low power mode scan interval is set to 50 msec

    TSI0_SCANC |= (TSI_SCANC_EXTCHRG(8) | // Set ext oscillator charge current to 18 uA

    TSI_SCANC_REFCHRG(15) | // Set reference osc charge current to 32 uA

    TSI_SCANC_SMOD(10) | // Set scan period modulus to 10

    TSI_SCANC_AMPSC(1) | // Divide input clock by 2

    TSI_SCANC_AMCLKS(0)); // Set active mode clock source to LPOSCCLK


    //TSI0_GENCS |= TSI_GENCS_LPCLKS_MASK; // Set low power clock source to VLPOSCCLK


    TSI0_PEN = TSI_PEN_PEN9_MASK | TSI_PEN_PEN10_MASK;

    

    //low power mode only one pin may be active

    TSI0_PEN |= TSI_PEN_LPSP(9);

// Enables TSI

    TSI0_GENCS |= TSI_GENCS_TSIEN_MASK;  

}





TSIx_CNTR

터치센서의 감도는 TSIxCNTR 레제스터에서 오실레이션 카운트값을 읽으면 알 수 있다.

2 채널당 하나의 레지스터를 할당하고 있다.



K20 TSI 카운트값 리드 함수

unsigned int ReadTSI(int Number)

{

//Software Trigger Start

TSI0_GENCS |= TSI_GENCS_SWTS_MASK;

while(!(TSI0_GENCS & TSI_GENCS_EOSF_MASK));

// Clear the EOSF (End of Scan) flag

    TSI0_GENCS |= TSI_GENCS_EOSF_MASK;


return *(electrodeHW[Number].counterRegister);

}





반응형