找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4718|回复: 2
收起左侧

TSC触摸感应

[复制链接]
ID:140959 发表于 2016-9-30 10:55 | 显示全部楼层 |阅读模式
2.png
七步走,
第一步:给CS放电,S3开,
第二步:所有开关关闭,
第三步:S2开启,给CX充电。
第四步:所有开关关闭
第五步:开启S1给CS充电
第六步:所有开关关闭
第七步:S1和S3开启,给CX和CS放电
重复上面的7个步骤,直到CS电压到高电平(有触摸时重复次数将减少)


在第六步后采集到I/0端口电平是否超过阀值。
2.png

void Configure_TSC(void)
{
          RCC->AHBENR |= RCC_AHBENR_TSEN;       
          TSC->CR = TSC_CR_PGPSC_2 | TSC_CR_PGPSC_0                 // fPGCLK = fHCLK/32
| TSC_CR_CTPH_0 | TSC_CR_CTPL_0                    // pulse high = 2xtPGCLK,Master
| TSC_CR_MCV_2 | TSC_CR_MCV_1                    // Max count value = 16383 pulses
| TSC_CR_TSCE;                                                    // Enable TSC
          TSC->IOHCR &= (uint32_t)(~(TSC_IOHCR_G2_IO4 | TSC_IOHCR_G2_IO3)); // 默认使能,去除不要的端口
          TSC->IER = TSC_IER_EOAIE;                                                 // 转换系列结束中断
          TSC->IOSCR = TSC_IOSCR_G2_IO4;                                         // 采样端口电容接在 G2IO4上
          TSC->IOCCR = TSC_IOCCR_G2_IO3;                                         // 触摸按键设在G2IO3上
          TSC->IOGCSR |= TSC_IOGCSR_G2E;                                         // 使能组2
  
          NVIC_SetPriority(TSC_IRQn, 0);
          NVIC_EnableIRQ(TSC_IRQn);
}
void TSC_IRQHandler(void)
{
if((TSC->ISR & TSC_ISR_EOAF) == TSC_ISR_EOAF)                //系列结束否
{
TSC->ICR = TSC_ICR_EOAIC;                         /* Clear flag */
AcquisitionValue = TSC->IOGXCR[1];                 /* Get G2 counter value */
}
}
void Process(void)
{
static uint32  NumberOfCalibration=0;
uchar RefIndex=0;
static uchar RefIndexStatic=0;
static uint32  ReferenceTab[REFERENCE_TAB_SIZE];
if(AcquisitionValue)                 //有数据到来
{
if(CalibrationDone)         //是否矫正完成
{
if((AcquisitionValue + THRESHOLD) < Reference) /* Touch detected */
{
Activities = 1;
}
else if(AcquisitionValue > (Reference + THRESHOLD))
{
Activities = 1;
CalibrationDone = 0;                         /* restart calibration */
Reference = 0;                                 /* Reset reference */
}
else /* no touch detected */
{
if(ReferenceAdaptation)
{
ReferenceAdaptation=0;
RefIndexStatic%=REFERENCE_TAB_SIZE;
ReferenceTab[RefIndexStatic++] = AcquisitionValue;
for(RefIndex=0;RefIndex<REFERENCE_TAB_SIZE;RefIndex++)
{
Reference += ReferenceTab[RefIndex];
}
Reference /= (REFERENCE_TAB_SIZE + 1);
}
}
}
else /* Calibration */
{
if(NumberOfCalibration < NUMBER_OF_CALIBRATION)
{
Reference += AcquisitionValue;
NumberOfCalibration++;
}
else if(NumberOfCalibration == NUMBER_OF_CALIBRATION)
{
Reference += AcquisitionValue;
Reference /= (NUMBER_OF_CALIBRATION + 1); /* Compute reference */
NumberOfCalibration = 0; /* Reset number of calibration for nex time */
CalibrationDone = 1;                 /* Calibration Completed */
for(RefIndex=0;RefIndex<REFERENCE_TAB_SIZE;RefIndex++)
{
ReferenceTab[RefIndex] = Reference;
}
}
}
AcquisitionValue = 0;         //复位count值
TSC->CR |= (1<<1) ;                // 开始新的系列
}
}

void main()
{
Configure_TSC();
TSC->CR |= (1<<1);                                         // 开始转换
while(1)
{
Process();
}
}


回复

使用道具 举报

ID:248882 发表于 2018-7-10 19:02 | 显示全部楼层
研究很长时间TSC ,不成功,能分享一下TSC工程供我学习吗? 谢谢! feiyun_zhu@163.com
回复

使用道具 举报

ID:158903 发表于 2018-7-11 23:41 | 显示全部楼层
TSC触摸感应 马克
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表