三通道輸入一通道輸出實現三路觸控功能

2021-07-14 04:48:25 字數 2430 閱讀 4505

華誠hc8t046p觸控ic有4個輸入/輸出管腳,所以最大可以實現三通道輸入。用這顆ic實現三通道觸控的最大難點在於只有乙個通道負責輸出,三個通道三種波形,如果對波形識別不準確就會導致竄鍵的產生。

p10~p13是4個輸入/輸出管腳

ic定製p10、p11、p13觸控輸入管腳,p12為pwm輸出管腳。ic上電p12輸出為低電平;p10通道被觸控p12通道持續輸出高電平,p10觸控鬆開後p12恢復低電平;p11通被道觸控p12輸出高-低-高,p11觸控鬆開後p12恢復低電平;p13通道被觸控p12輸出高-低-高-低-高,p13觸控鬆開後p12恢復低電平;高低電平要持續10ms後才繼續變化且ic只響應單通道觸控。

一開始的思路是按下觸控產生中斷,由於高/低電平會持續穩定10ms,啟動定時器進行10ms一次的取樣,將採集到資料(幾高幾低)與p10、p11、p13的波形進行對比,就可以判斷出是哪個通道被觸控。

static void touch_keys_timer(unsigned long _data)

; printk("%s :__line__ %d, code %d, gpio_get_value %d\n", __function__,\

__line__, button->code, gpio_get_value(button->gpio));

while(i < 10)

if(4 == i)

if(1 == touch_state[0] && 0 == touch_state[1] && 0 == touch_state[2]\

&& 0 == touch_state[3] && 0 == touch_state[4])

else

if(1 == touch_state[0] && 1 == touch_state[1] && \

1 == touch_state[2] && 1 == touch_state[3] && 1 == touch_state[4])

else

if(1 == touch_state[0] && 0 == touch_state[1] && \

1 == touch_state[2] && 0 == touch_state[3] && 0 == touch_state[4])

else

if(1 == touch_state[0] && 0 == touch_state[1] && \

1 == touch_state[2] && 1 == touch_state[3] && 1 == touch_state[4])

else

if(1 == touch_state[0] && 0 == touch_state[1] && \

1 == touch_state[2] && 0 == touch_state[3] && 1 == touch_state[4])

else

}i++;

mdelay(11);

};button->isisr = 0;

button->isr_count = 0;

return;

}

然而擔心的問題出現了,不管怎麼調整取樣的時間,都會出現竄鍵。通過示波器觀察波形,導致竄鍵的原因是高/低電平有機率出現不到10ms就開始變化,如下圖:

在檢視log過程中,我發現對應的通過產生的中斷個數是固定的。比如觸控p10通道,輸出高電平,這時候只產生乙個中斷;觸控p11通道,輸出高-低-高,產生兩個中斷;觸控p13通道,輸出高-低-高-低-高,產生三個中斷(設定為上公升沿中斷)。

於是可以通過取樣中斷次數來判斷是哪個通道被觸控,將上面的**修改如下:

static void touch_keys_timer(unsigned long _data)

; printk("%s :__line__ %d, code %d, gpio_get_value %d\n",__function__,\

__line__, button->code, gpio_get_value(button->gpio));

while(i < 10)

if(4 == i)

else

if(button->isr_count == 2)

else

if (button->isr_count == 3)

else

}i++;

mdelay(11);

};button->isisr = 0;

button->isr_count = 0;

return;

}

目前觸控只是實現了短觸的功能,長觸還為實現。

實驗三 通道建設

實驗的目的和要求 了解通道的含義 信源編碼的流程,熟練掌握整數 小數的十進位制和二進位制的互換機制,並能程式設計實現。考核要求 熟悉並掌握十進位制與二進位制小數的互轉機制,並分析演算法產生的誤差 實驗內容 1 編寫程式實現十進位制小數x 0.7 的二進位制轉換,並分析其誤差 即重新將二進位制小數轉成...

OpenCV 單通道三通道理解

單通道 此通道上值為0 255。255為白色,0是黑色 只能表示灰度,不能表示彩色。三通道,在bgr 255,255,255為白色,0,0,0是黑色 可以表示彩色,灰度也是彩色的一種。cv imread函式。screen是一張彩色圖 cv mat mat cv imread root desktop...

單通道和三通道學習理解單通道

單通道 此通道上值為0 255。255為白色,0是黑色 只能表示灰度,不能表示彩色。三通道,在bgr 255,255,255為白色,0,0,0是黑色 可以表示彩色,灰度也是彩色的一種。cv imread函式。screen是一張彩色圖 cv mat mat cv imread root desktop...