SNSへはこちら

LEDドライバTM1627を使ってみた(For キースキャン)

早速キースキャンの方をやってみました。この IC についてのハマりどころなど、概要はこちらをどうぞ。

この機能は、アレイ上に並んだボタンの押下を判定して、シリアルデータとして取り出す機能です。いわばパラ→シリ変換ですね。

めも Ver.2

前の記事に示した PDF ファイルですが、キースキャンのことも少し書いて追記しました。以下にどうぞ。
TM1627使用メモV2

接続

今回は 8bit の DIP スイッチを使用しました。DIP スイッチのどちらか一端をコモンとして K1 に全て接続し、残りは LED で使っていない KS3 〜 KS10 に接続しました。データは読みだすと PDF にあるようなビット位置で吐き出されるので、マイコン内でソフトウェア的に整形してあげます。データシートでは以下のような図で説明がされていました。

データ受信方法

取り敢えず以下にコードを記しておきます。

void getSwitchData(uint8_t *array) {
    startCondition();

    sendByte(0x42);
    dio->setMode(GpioConfig::PinMode::INPUT);

    for(int i=0; i<5; i++) {
        array[i] = readByte();
    }
    stopCondition();
    dio->setMode(GpioConfig::PinMode::GPIO_OUTPUT);
}

要はスタートコンディション発行後、0x42 のコマンドでキースキャンデータ読み出しモードにして、STB を上げずにそのまま 5Byte のデータを clk の立ち下がりエッジで読み出せばいいのです。

読み出すときは dio のポートモードを INPUT にするのをお忘れなく。

KEYINT

このポートは使っていません。KEYINT はキー入力割り込み発生用の出力ピンです。データシートによると、普段は High であり、キーの押下があると Low に変化するらしいです。外部入力割り込み or GPIO 割り込み で利用できるピンじゃないかなあと思います。

動作の様子