PSoC CapSenseで静電容量タッチセンサ 4つ動かした
前の記事の回路などが思いきり間違っていたので修正しつつ、CapSenseとLED4つずつに増やした。
多分、マイコンの足の数だ増やせる。
例によってコードはBitbucketにアップした
CapSense CSDウィザードで4つスイッチを置いて
AnalogMUXBusに接続されている事を確認
CSDの設定。しきい値などをかなり何度も直した。適当にやってたので理論をわかってないんだけど、どうやらセンサ部分の形状や配置に応じて微調整しなければ使い物にならないっぽい。
ピンの設定。LEDが4つにした。
使ってないピンをPull Upにしておくとノイズが来ないので安定する事に気づいた。
実体配置図
前の記事の回路が間違っていて、あのままではうまく動かなかったが、1kΩの抵抗と0.1μFのキャパシタを足したら複数認識できるようになった。
CapSense CSDのデータシートにあった図。抵抗とキャパシタが必要らしい
P1[5]とP0[3]の間に1kΩを入れて、P0[3]からキャパシタを通して銅箔テープに延ばす。
前の記事はP1[5]とP0[3]で静電容量取ろうとしてたので、思いっきり間違ってた。
プログラム。
前のやつのif(CSD_1_bIsSensorActive(センサ番号))を増やしただけ。
shokai / CapSense LED / source — bitbucket.org
main.c
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#define _BV(BIT) (1<<BIT)
#define sbi(BYTE,BIT) (BYTE |= _BV(BIT))
#define cbi(BYTE,BIT) (BYTE &= ~_BV(BIT))
#define LED_0_ON() sbi(PRT1DR, 7);
#define LED_0_OFF() cbi(PRT1DR, 7);
#define LED_1_ON() sbi(PRT0DR, 1);
#define LED_1_OFF() cbi(PRT0DR, 1);
#define LED_2_ON() sbi(PRT0DR, 5);
#define LED_2_OFF() cbi(PRT0DR, 5);
#define LED_3_ON() sbi(PRT0DR, 7);
#define LED_3_OFF() cbi(PRT0DR, 7);
void main()
{
M8C_EnableGInt;
CSD_1_Start();
CSD_1_InitializeBaselines();
CSD_1_SetDefaultFingerThresholds();
while(1){
CSD_1_ScanAllSensors();
CSD_1_UpdateAllBaselines();
if(CSD_1_bIsSensorActive(0)){
LED_0_ON();
}
else{
LED_0_OFF();
}
if(CSD_1_bIsSensorActive(1)){
LED_1_ON();
}
else{
LED_1_OFF();
}
if(CSD_1_bIsSensorActive(2)){
LED_2_ON();
}
else{
LED_2_OFF();
}
if(CSD_1_bIsSensorActive(3)){
LED_3_ON();
}
else{
LED_3_OFF();
}
}
}