觸摸按鍵,手指按下ADC讀出值沒啥變化,是不是布線造成的?

手指按下,觸摸按鍵1的值沒啥變化,打印的值依次為觸摸按鍵1 2 3 4 5 6

TouckKey Value:3946? ? 3189? ? 3118? ?3089? 2825? ?3025image.png

用的是哪顆芯片呢?代碼是自己寫的還是用的EVT例程?可以把具體信息發(fā)郵件溝通:ccs@wch.cn


用的CH32X033,代碼是EVT例程里來的,把單個(gè)通道測(cè)量改成了6個(gè)通道

void TouchKey_Init()

{

? ? GPIO_InitTypeDef GPIO_InitStructure={0};

? ? ADC_InitTypeDef ADC_InitStructure={0};


? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );

? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );

? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

? ? GPIO_Init(GPIOA, &GPIO_InitStructure);


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

? ? GPIO_Init(GPIOB, &GPIO_InitStructure);


? ? ADC_CLKConfig(ADC1, ADC_CLK_Div6);


? ? ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

? ? ADC_InitStructure.ADC_ScanConvMode = DISABLE;

? ? ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;

? ? ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

? ? ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

? ? ADC_InitStructure.ADC_NbrOfChannel = 1;

? ? ADC_Init(ADC1, &ADC_InitStructure);


? ? ADC_Cmd(ADC1, ENABLE);

? ? TKey1->CTLR1 |= (1<<24);? ? ?// Enable TouchKey

}

u16 Touch_Key_Adc(u8 ch)

{

? ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_11Cycles );

? TKey1->IDATAR1 =0x80;? //Charging Time

? TKey1->RDATAR =0x8;? ?//Discharging Time

? while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));

? return (uint16_t) TKey1->RDATAR;


}

/*------------------------------------------------------------------------------*/

int main(void)

{

? ? u8 i = 0;

? ? u16 rawData[6];


? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

? ? SystemCoreClockUpdate();

? ? Delay_Init();

? ? USART_Printf_Init(921600);

? ? printf("SystemClk:%d\r\n", SystemCoreClock);

? ? printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );

? ? printf("GPIO Toggle TEST\r\n");

? ? GPIO_Toggle_INIT();

? ? TouchKey_Init();


? ? while(1)

? ? {

? ? ? ? rawData[0] = Touch_Key_Adc(ADC_Channel_3);//TKEY1 PA3

? ? ? ? rawData[1] = Touch_Key_Adc(ADC_Channel_5);//TKEY2 PA5

? ? ? ? rawData[2] = Touch_Key_Adc(ADC_Channel_4);//TKEY3 PA4

? ? ? ? rawData[3] = Touch_Key_Adc(ADC_Channel_6);//TKEY4 PA6

? ? ? ? rawData[4] = Touch_Key_Adc(ADC_Channel_8);//TKEY5 PA7

? ? ? ? rawData[5] = Touch_Key_Adc(ADC_Channel_9);//TKEY6 PB1

? ? ? ? printf("TouckKey Value:%d %d %d %d %d %d\r\n",rawData[0],rawData[1],rawData[2],rawData[3],rawData[4],rawData[5]);

? ? ? ? Delay_Ms(200);

? ? ? ? //GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));

? ? }

}



首先使用ADC類觸摸采樣時(shí),盡量遠(yuǎn)離GND,而PCB上所有按鍵的走線的TOP層都有鋪地覆蓋;其次不建議直接使用EVT里面的Touchkey例程來做實(shí)際方案,Touchkey例程只是用于演示觸摸功能,不適用于實(shí)際項(xiàng)目,可以郵件交流下您這個(gè)項(xiàng)目對(duì)觸摸按鍵的具體需求,我的郵箱:ccs@wch.cn


謝謝,這個(gè)板子目前只是我體驗(yàn)下觸摸功能畫的,我修改布線后再看看效果。另外我也想看看實(shí)際項(xiàng)目是怎樣運(yùn)用這一功能的,方便提供示例的話這是我的郵箱:個(gè)人信息保護(hù),已隱藏


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频