[Microchip]/PIC16F2013. 4. 7. 23:00

[mTouch] PIC16F274 Capacitive Touch 테스트

[mTouch] PIC16F274 Capacitive Touch 테스트

 

 

 

MICROCHIP사는 Capacitive Touch Sensing 솔루션으로 mTouch 를 제공하고 있다. PIC16F723은 하드웨어 적으로 8채널의 capacitive sensing module 을 제공하고  PIC16F724는 16채널을 제공한다.

 

CPS0~CPS15 핀을 이용하면 부가적인 하드웨어 필요 없이 터치 센싱이 가능하다.

 

 

 

 

CAPACITIVE SENSING MODULE 초기화 코드

void CapInit(void)
{
 // Initialize for Timer0 time base
 OPTION = 0b11000010;    // Timer0 init ( Prescaler:TMR0, 1:8 )
 T0IF = 0;       // enable tmr0 intpt
 T0IE = 1; 

 // Initialize for Timer1 time Resource
 // Timer1 enable, system clock, 1:1 prescale
 T1CON  = 0b11000101;

 // Cap Sense Module
 // CPSON
 CPSON  = 1;
 
 //Cap Sensing Osc Range Bits(18uA)
 CPSRNG0 = 1;
 CPSRNG1 = 1;
 
 // init to channel select = 0 (4 LSb's) 
 CPSCON1 = 0x00;      
}

 

 

 

 

 

mTouch Capacitive Touch 테스트 동영상

기존 Touch Sensing 테스를 위해 제작해 둔 보드를 이용하여 테스트 했다. 터치에 따라 FND에 출력하는 예제 이다.

 

 

Posted by nexp

댓글을 달아 주세요

[MODULE]/FND2013. 3. 3. 11:42

[FND-SM] FND모듈 제작

[FND-SM] FND모듈 제작

 

 

 

SPI 및 UART로 간단히 제어 할 수 있는 제어 방식의 FND모듈을 제작했다.

 

 

 

 

 

 

FND 제어는 저렴한 LM3S101 을 이용하였다.

 

 

 

 

 

 

 

 

FND 출력 코드

 if(temp==0x0d)
 {
  FndOut(fnd_value[d[0]], fnd_value[d[1]], fnd_value[d[2]], fnd_value[d[3]]);
  status = 0;               
 }
 else
 {
  if(status == 0)
  {
   dig = temp;
   status = 1;
  }
  else if(status == 1)
  {
   if(dig=='0')d[0] = temp-'0';
   else if(dig=='1')d[1] = temp-'0';
   else if(dig=='2')d[2] = temp-'0';
   else if(dig=='3')d[3] = temp-'0';
   
   status = 2;
  }               
 }

 

 

FND 시리얼 제어 테스트 예제 코드

 

DebugPrint("%d%d\r", id, count);

 

 

 

 

 

 

 

 

FND 구매처

http://devicemart.co.kr/goods/view.php?seq=11533

Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352011. 11. 4. 22:00

[DSP28335 EVM] FND테스트 - [EXP-ALL EVM]보드 이용

[DSP28335 EVM] FND테스트 - [EXP-ALL EVM]보드 이용


[EXP-ALL EVM] 보드에는  FND모듈을 연결할 수 있고 아래와 같으 핀맵이다.
D0 - LATCH (GPIO79)
D2 - SCLK (GPSIO77)
D4 - DATA (GPIO75)







FND모듈 제어를 위한 드라이버 함수

#define D0_GPIO79    BIT15// 15     GPIO79
#define D2_GPIO77    BIT13// 13     GPIO77
#define D4_GPIO75    BIT11// 11     GPIO75

#define SHIFT_DATA_PORT   GPIOC
#define SHIFT_DATA_BIT   D4_GPIO75

#define SHIFT_CLK_PORT   GPIOC
#define SHIFT_CLK_BIT   D2_GPIO77

#define SHIFT_LATCH_PORT  GPIOC
#define SHIFT_LATCH_BIT   D0_GPIO79

#define ShiftDataSet()   sbi(SHIFT_DATA_PORT, SHIFT_DATA_BIT);
#define ShiftDataClear()  cbi(SHIFT_DATA_PORT, SHIFT_DATA_BIT);
#define ShiftClkSet()   sbi(SHIFT_CLK_PORT, SHIFT_CLK_BIT);
#define ShiftClkClear()   cbi(SHIFT_CLK_PORT, SHIFT_CLK_BIT);
#define ShiftLatchSet()   sbi(SHIFT_LATCH_PORT, SHIFT_LATCH_BIT);
#define ShiftLatchClear()  cbi(SHIFT_LATCH_PORT, SHIFT_LATCH_BIT);

#define SHIFT_HAL_INIT()  EALLOW;\
        GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 0;\
        GpioCtrlRegs.GPCDIR.bit.GPIO79 = 1;\
        GpioCtrlRegs.GPCMUX1.bit.GPIO77 = 0;\
        GpioCtrlRegs.GPCDIR.bit.GPIO77 = 1;\
        GpioCtrlRegs.GPCMUX1.bit.GPIO75 = 0;\
        GpioCtrlRegs.GPCDIR.bit.GPIO75 = 1;\
        EDIS;



TMS320F28335 FND출력 테스트 예제
#include "system.h"
#include "serial.h"
#include "shift.h"
#include "fnd_m.h"

void main(void)
{
 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_115200);
 DebugPrint("DSP28335 QEP Test\r\n");

 FndInit();
 FndOut(10);

wihle(1)
{
}
}


[EXP-ALL EVM] 테스트 보드
Posted by nexp

댓글을 달아 주세요

[DSP]/PICCOLO2011. 5. 5. 11:52

[TMS320F28096 EVM] eQEP 엔코더 테스트

[TMS320F28096 EVM] eQEP 엔코더 테스트


TMS320F28069 에는 eQEP (QEI)는 여러가지 기능이 많이 있다. 간딘히  엔코더 카운터 테스트를 해 보았다.
eQEP의 핀맵은 아래와 같다.
GPIO20/EQEP1A  :  EQEP Phase A
GPIO21/EQEP1B   : EQEP Phase
BGPIO23/EQEP1I  : EQEP Index



[EXP-DSP EVM] 보드에는 엔코더가 장착되어 있는데 처음에 제작시에 TMS320F2808을 타겟으로 제작했기 때문에 점퍼가 필요하다. 확장성을 고려하여 핀을 뽑아 두었기 때문에 점퍼선으로 연결가능하다.



TMS320F28069 eQEP 블록도



TMS320F28069 eQEP 초기화 코드
void QEP_Init(void)
{
    EQep1Regs.QUPRD=800000;         // Unit Timer for 100Hz at 80 MHz SYSCLKOUT

    EQep1Regs.QDECCTL.bit.QSRC=00;      // QEP quadrature count mode

    EQep1Regs.QEPCTL.bit.FREE_SOFT=2;
    EQep1Regs.QEPCTL.bit.PCRM=00;       // PCRM=00 mode - QPOSCNT reset on index event
    EQep1Regs.QEPCTL.bit.UTE=1;         // Unit Timeout Enable
    EQep1Regs.QEPCTL.bit.QCLM=1;        // Latch on unit time out
    EQep1Regs.QPOSMAX=0xffffffff;
    EQep1Regs.QEPCTL.bit.QPEN=1;        // QEP enable

    EQep1Regs.QCAPCTL.bit.UPPS=5;       // 1/32 for unit position
    EQep1Regs.QCAPCTL.bit.CCPS=6;       // 1/64 for CAP clock
    EQep1Regs.QCAPCTL.bit.CEN=1;        // QEP Capture Enable
}


초기화 하고 QPOSLAT레지스터에서 값을 읽으면 아주 쉽게 엔코더값을 읽을 수 있다.
count = EQep1Regs.QPOSLAT;

[TMS320F28069 EVM] eQEP 엔코더 테스트 동영상
엔코더 카운트 값을 FND로 출력하는 예제



[TMS320F28069 EVM] eQEP 엔코더 테스트 소스코드
void main(void)
{
 unsigned int cnt = 0;

 //DSP System Initialize
 SystemInit();

 DebugInit(BAUD_115200);
 DebugPrint("TMS320F28069 eQEP Test(%d)Mhz\r\n", _SYS_CLK);

 Led1Init();
 Led2Init();
 Led1On();

 //eQEP 초기화
 InitEQep1Gpio();
 QEP_Init();

 //FND 초기
 FndInit();

 while(1)
 {
  //QEP 데이터 카운트값 읽어와서 
  cnt = EQep1Regs.QPOSLAT;

  DisplayFnd(cnt);
  Delay(1);
}
Posted by nexp

댓글을 달아 주세요

  1. 백대성

    관리자의 승인을 기다리고 있는 댓글입니다

    2012.08.20 22:24 [ ADDR : EDIT/ DEL : REPLY ]

[TI]/LM3S1xx2010. 3. 27. 13:56

[LM3S101 EVM] Serial FND모듈 제어

[LM3S101 EVM] Serial FND모듈 제어




LM3S101 EVM 보드를 이용하여 Serial FND 모듈 을 테스트 했다. UART포트로 4자리 아스키코드를 전송하면 쉽게 FND를 출력할 수 있다.
특히 소형 마이컴에서 CPU의 부하 없이 디버깅 데이터를 표기할때 유용하게 사용할 수 있다.

LM3S101 Serial FND모듈 출력 예제 소스코드
#include "system.h"
#include "serial.h"

int main()
{
 unsigned int cnt = 0;
 unsigned int flag = 0;
 SystemInit(); 

 Led1Init();
 Led1On();
 
 Led2Init();
 Led2Off(); 

 //Serial Init
 DebugInit(BAUD_57600);
 DebugPrint("Serial FND Test Program.\r\n");

 while(1)
 {
  if(cnt>3000)cnt=0;
  if((cnt%20) ==0)
  {
   flag ^= 1;
   if(flag)DebugPrint("C");
   else DebugPrint("c");
  }
  
  DebugPrint("%04d\n", cnt++);
  Delay(20);
 }
 
 return 0;
}
Posted by nexp

댓글을 달아 주세요