본문 바로가기

[MSP430]/MSP430-S

MSP430G2553 Cap touch I/O 터치센서 테스트

MSP430G2553 Cap touch I/O 터치센서 테스트




MSP430G2553의 특징은 저전력에 24채널의 CAP Touch I/O를 가지고 있어 터치센서 솔루션으로 적합하다.

Cap touch I/O를 이용하여 터치센서 스위치를 테스트 하는 예제를 작성해 보았다. 기존 사용했던 터치센서 솔루션중에는 가장 감도도 좋고 사용하기 편리한것 같다.



MSP430G2553에는 아래와 같이 Pin Oscillator 모듈이 하드웨어 적으로 존재하기 때문에 소프트웨어 부담없이 터치센서를 구현할 수 있다. 당연히 저전력으로 구동된다.





MSP430G2253에는  24채널(P1, P3)의 CAP IO가 있고 PxSEL, PxSEL2 레지스터를 이용하여 Cap Touch IO로 설정할수 ㅇ






MSP430F2553 Cap touch I/O 터치센서 테스트 동영상

MSP430G2253을 이용하여 터치센서를 인식할때 마다 LED를 토글하는 간단한 예제를 작성해 보았다.






터치센서 파라미터 설정 코드

터치센서로 이용할 핀 설정 및 각종 초기 파라미터값을 설정할수 있다.

const struct Element Totuch_E1 = {


              .inputPxselRegister = (uint8_t *)&P3SEL,  

              .inputPxsel2Register = (uint8_t *)&P3SEL2,  

              .inputBits = BIT0,

              // When using an abstracted function to measure the element

              // the 100*(maxResponse - threshold) < 0xFFFF

              // ie maxResponse - threshold < 655

              .maxResponse = 655,

              .threshold = 400

};



const struct Sensor Touch_Button1 =

               { 

                  .halDefinition = RO_PINOSC_TA0_WDTp,

                  .numElements = 1,

                  .baseOffset = 4,

                  // Pointer to elements

                  .arrayPtr[0] = &Totuch_E1,  // point to first element

                  // Timer Information

                  .measGateSource= GATE_WDT_SMCLK,     //  0->SMCLK, 1-> ACLK

                  //.accumulationCycles= WDTp_GATE_32768             //32768

                  .accumulationCycles= WDTp_GATE_8192               // 8192

                  //.accumulationCycles= WDTp_GATE_512             //512

                  //.accumulationCycles= WDTp_GATE_64             //64                  

               };



터치센서 처리 코드

터치 인식을 하였을 경우 처리하는 함수

void CapTouchActiveMode()

{

    unsigned char idleCounter, activeCounter;

    unsigned char centerButtonTouched[4] = {0,};


    idleCounter = 0;      

    activeCounter = 0;

  

    while (idleCounter++ < MAX_IDLE_TIME)

    {  

         if(TI_CAPT_Button(&Touch_Button1))

        { 

            // Middle button was touched  

            if (centerButtonTouched[0]==0)

            {


                centerButtonTouched[0] = 1;

                Led1Toggle();

                Tbi(PORT1, BIT0);

                

                DebugPrint("S1\r\n");

            }

            idleCounter = 0;

        }

        else    

        { 

            centerButtonTouched[0] = 0;

        }


   :

}



MSP430F2553 Cap touch I/O 테스트 소스코드

void main(void)

{   

    SystemInit();

    

Led1Init();

Led2Init();

//Touch GPIO설정

Sbi(P1DIR, BIT0|BIT3);

Cbi(PORT1, BIT0|BIT3);

Sbi(P2DIR, BIT0|BIT1);

Cbi(PORT2, BIT0|BIT1);

    

//초기값 측정

MeasureCapBaseLine();


//MSP430G 시리얼 포트 초기화

DebugInit(BAUD_115200);

DebugPrint("MSP430G EVM Touch Test Program.\r\n");

while (1)

{

//터치센서 처리

CapTouchActiveMode();

}

}


반응형