2012/01/28

左手の小指を救え



Emacs系のエディタを使っていると朝から晩までCTRLキー押しっぱなし。お陰で左手の小指は常に痛い。

あまりにも辛いので、HHK Lite2*1 の CTRLキーをタッチセンサにしてみた。


f:id:gnrr:20120127233946j:image:w360


今回は Cypress の PSoC を使う。横着して FirstTouch のFTMF基板にテキトーに配線して筐体に押し込んだ。


一応 GitHub に PSoC Designerのプロジェクト一式を置いておく。


手書きで汚いけど、接続はこんな感じ↓。


f:id:gnrr:20120127233128p:image:w360


下はソフトウェア部分。PSoC はハードウェア初期化を書かなくていいから楽だ。



//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules

BYTE out_p1;

void main(void)
{
M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
// Insert your main routine code here.
M8C_EnableIntMask(INT_MSK0, INT_MSK0_GPIO);
CSD_1_Start();
CSD_1_InitializeBaselines() ; //scan all sensors first time, init baseline
CSD_1_SetDefaultFingerThresholds() ;

out_p1 = 0x40;
while(1) {
BYTE val_p1 = out_p1;

CSD_1_ScanAllSensors();
CSD_1_UpdateAllBaselines();

if(CSD_1_bIsSensorActive(0)) {
val_p1 |= 0x04; // BLUE LED HI (touch sw indicator)
val_p1 &= ~0x40; // SENSEOUT LO
} else {
val_p1 &= ~0x04; // BLUE LED LO
val_p1 |= 0x40; // SENSEOUT HI (Hi-Z)
}
out_p1 = val_p1;
}
}


#pragma interrupt_handler GPIO_INT
void GPIO_INT(void)
{
// P0_2: keyboard matrix drive signal (active-lo)
PRT1DR = (PRT0DR & 0x04)? 0x40 : out_p1;
}

メインループでセンサを読んどいて、キーボードマトリクスのドライブ周期をエッジ割り込みで捉えて乗せるだけ。ソフトで出力してるから若干遅れるけど、CPU_Clock = 24MHz/2 くらいなら問題なく読み取ってくれるようだ*2

下はセンサの電極部分。CTRLキーのキートップの裏側に銅板*3を貼って、ホットボンドで止めとく。センサの配線は黄色の1本のみ*4


f:id:gnrr:20120127234032j:image:w360


USBハブ基板を取り去って、代わりに書込器用のヘッダをつけとく。これでCapSense の感度を後で調整できる。


f:id:gnrr:20120127234034j:image:w360


左手小指はCTRLキーに乗せているだけ。ああ、なんて楽なんだ。


これでまた一歩、普通のキーボードにさわれない体に近づいた。




*1:ちなみに、これは「もらいもん」


*2:CPU_Clock = 24MHz/16だとさすがにダメだった。


*3:粘着テープつき t=0.1mm


*4:緑線は予備





2012/01/08

xming を気軽にテスト



すでに teraterm とかで telnetで linux につながってて、でも ssh とか入れるのめんどくさいときに手軽にテストするには、次のように。



  1. windows に xming をインストール

    ココとかを参考に。

    puttyはとりあえずは入れなくていい。

  2. X0.hosts ファイルに、linux マシンのIPアドレスかホスト名を書く

    X0.hosts は xming のインストールフォルダにある。

  3. xming を再起動

  4. linux マシンにログインして下記実行

    ~/.profile に

    export DISPLAY="192.168.100.2:0"


    とか書き足して、飛ばし先のwindowsマシンを指定しといて、

    . ~/.profile


    として効かしとく。

  5. テスト
    linux マシンのコンソールで

    xterm


    とか入れるとウィンドウが開くはず。


これで ssh なしで X 飛ばすことができるが、セキュリティに難有り。


ちゃんと使うならやはり ssh 接続すべし。これはあくまでテスト用。





TortoiseGit / github のリポジトリを作って既存のプロジェクトをつっこむ



よく忘れるのでメモ。




  1. github にログインして 黒い「New repository」ボタンを押す

  2. Project Name を適当に入れて、「Create repository」ボタンを押す

  3. 表示された案内に書いてある「Next steps:」の「git@github.com:なんちゃら.git」の部分をコピる

  4. Exproler でローカルの適当なフォルダ内で右クリックして、TortoiseGit のメニューから「Git Clone...」を選択

  5. 下記のように設定して「OK」する
    f:id:gnrr:20120109013946p:image:w300
    ローカルフォルダにディレクトリができて、その中に .git フォルダができる

  6. .git フォルダと同じ階層に、管理したいプロジェクトフォルダの中身を放り込む
    f:id:gnrr:20120109013947p:image:w300

  7. そのフォルダ内のなにもないところで右クリックして、
    TortoiseGit のメニューから「Git Commit -> "master"...」を選択

  8. 下記のように設定して「OK」する
    f:id:gnrr:20120109013948p:image:w300

  9. ついでにPushしとく
    f:id:gnrr:20120109013950p:image:w300
    f:id:gnrr:20120109013949p:image:w300


再度 github を見に行って、リポの中身が反映されていたらOK。


もちょっと簡単にやる方法があるような気がする…。