部品:4×4 RGBボタンパッドコントローラSPI

数週間前にSparkfunの新しいRGBボタンパッドコントローラをカバーしました。これはモノームインターフェースのフルカラークローンです。下の3色LEDを持つ4×4グリッドのボタン。各LEDは、16000リットルの色の組み合わせに対して、24ビットの色制御を有する。 SparkfunのTetris Tableのように、実質的なボタングリッドを作成するために、最大10のパネルを組み合わせて連鎖できます。私たちは以前に私たちのRGBのコンビネーションロックでより小さなバージョンを使用しました。

SparkfunにテストするためにSpiバージョンのボタンコントローラを送信するように依頼しました。これはSparkfunで社内で開発された新製品です。オープンソースのハードウェアとソフトウェアがあります。私たちの経験については、このボードを下にインタフェースしてください。

4×4 RGBボタンパッドコントローラSPI(Sparkfun#Wig-09022、$ 39.95)

ボタンパッドコントローラは裸のPCBです。また、ボタンパッドカバー(Sparkfun#COM-07835、9.95ドル)、および各ベゼル(Sparkfun#Com-08747、#Com-08746、$ 3.95)を受けました。私たちが働いているSPIバージョンは、マイクロコントローラ、またはUSB ‘Master’によって直接駆動できます。 USBコントローラのバージョンには、PC接続用に追加のマイクロコントローラとFTDI USB->シリアルコンバータがあります。

ボタンパッドが到着したとき、私たちはすぐにデータシートで座って座っていて、私たちのバス海賊ユニバーサルシリアルインタフェースでボードをインターフェースしようとしました。データシートのバージョン1で説明されているプロトコルは、まったく問題ありませんでした。

Sparkfun Openはこのプロジェクトを調達したので、ボタンパッドSPI(ZIP)とボタンパッドUSBコントローラ(ZIP)のソースコードから正しいインターフェイスプロトコルを決定しました。私たちはソースからのプロトコルのほとんどを考え出しましたが、それはまだSparkfunのエンジニアからの助けを借りて、理事会をインタフェースするという文書化されていない細かいポイントを見つけました。データシートのバージョン2(PDF)は、インタフェースプロトコルを正確に示しています。

接続

バス海賊
ボタンパッド

味噌
味噌

mos
mos

時計
sc

CS.
CS.

+ 5ボルト
vcc.

g
g

ボタンパッドのSPI信号は、通常の表記法の反対側のオンボードマイクロコントローラに関連しています。 MOSI(マスタアウト、スレーブイン)信号は実際にはボードのデータ出力であり、MISO(マスターイン、スレーブアウト)はデータ入力です。

私たちはバス海賊を持つボタンパッドをテストしましたが、同じ基本原盤がカスタムマイクロコントローラコードに適用されます。ボードは5ボルトで走りますので、バス海賊のオンボード5ボルト電源から電源を入れました。 SPIインターフェースは5Voltロジックレベルで動作しているので、バスPirateのプルアップ抵抗を5Voltの電源に接続し、すべての信号線でそれらを有効にしました。

バス海賊のRAW3WIREライブラリを使用してボタンボードをインターフェースしました。 Raw3Wireは、ビット単位の操作を備えたソフトウェアSPIライブラリです。ハードウェアSPIライブラリは、ボードをインターフェースするのに十分な粒状ではないフルバイト操作のみを可能にします。バス海賊をRAW3WIREモード(メニューオプションM)に入れ、プルアップ抵抗はバスを5ボルトで保持するため、HIZピンオプションを選択します。

RAW3WIRE> L 2 <最重要なビット LSBセット:最小SIGビット RAW3WIRE> W <永続型電源 電源投入 RAW3WIRE>

ボタンパッドは最初に最下位ビットを通信するので、最初にLSBを通信するためにライブラリを構成します。最後に、バス海賊の電源を可能にするために首都 ‘W’を襲いました。ボタンボードは電源投入自己テストの一部として各色を一時的にフラッシュします。

単一/複数ボタンボードの設定

各ボードは、シングルまたはマルチボードの使用に設定する必要があります。ボードはシングルボード操作のために事前にプログラムされていますが、とにかく構成を設定することをお勧めします。ボード構成はEEPROMに恒久的に保存されているので、一度行われなければなりません。

RAW3WIRE> [\ _ <すべての信号が低い CS Enabled <-CS Enabledは0voltsです 時計、0 データ出力、0 RAW3WIRE>

特別なシーケンスはボードをコンフィギュレーションモードにします。すべての信号線をlow(] \)で始まります。

RAW3WIRE> – ^ 1 1 1 1 <1枚のボード操作 データ出力、1 <-Data High 0x01クロックティック<-ONEクロックダニ 書き込み:0x01 <-configオプション1、ボード数 書き込み:0x01 <-setボードの数 RAW3WIRE> W <-SMALL 'W'、電源オフ 電源オフの電圧 RAW3WIRE> W <キャピタル 'W'、電源投入 電源投入 RAW3WIRE>

コンフィギュレーションモードに入るには、データラインをハイ( – )にして1クロックパルス(^)を送信しますが、チップセレクトをローにします。ボードは設定設定を受け入れる準備が整いました。

コンフィギュレーションモードに入った後に送信された最初のバイトは、変更する設定をボードに指示します。現在、ボードの数だけを設定できます(0x01)。次に、接続ボードの数を1~10の間に送信します。1ボードをインタフェースしています。ボードをリセットし、プログラムされたボード数に対応するLEDを点灯させます。

色と読み取りボタンの状態を設定します

これで、ボードにカラーデータを送信してボタンの状態を読んでください。まず、CS(チップセレクト)信号は通常の規則の反対側です。通常、CSは信号がLOのときにチップをアクティブにしますw(0volts)で、信号が高いとき(5ボルト)。これは通常/ cs、#cs、または!csによって表されます。代わりに、CSがハイのときボタンコントローラはアクティブです。

64バイトのトランザクションはLED色を設定し、ボタンの状態を取得します。最初の16バイトは各LEDの赤レベルをプログラムし、続いて16バイトの緑色、16バイトの青。各ボタンのステータスを取得するには、ボードから16バイトを読むことで終了します。ボタンデータは、押された場合は0x00として送信され、押されていない場合は0xFFです。データシートは、カラーフレームの書き込みとボタンデータの読み取りとの間の400US遅延を推奨しますが、バス海賊は十分に遅くなります。

プロトコルは簡単ですが、1つの大きなキャッチがあります。 CSを上げる前にクロックラインは高くなければなりません。またはByteStreamは1ビットずつオフになります。このため、多くのハードウェアSPIモジュールはボードとは機能しません。 MicroControllerがハードウェアモジュールによって制御されているピンを回転させることを可能にした場合、これは問題ではありませんが、これを許可しないでください。

RAW3WIRE> /] 255:16 255:16 255:16 R:16 [
CSを上げる前に、1 <-CLOCK 1枚のクロックでなければなりません CSは通常の使用の反対側に<-Cから5ボルトまで バルク書き込み0xFF、0x10回<-LED LED バルクライト0xFF、0x10回<グリーンLED バルク書き込み0xFF、0x10回<ブルーLED バルク読み取り0x10バイト:<-READボタン状態 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF CSが通常の使用対象となる<-CSから0ボルトに有効 RAW3WIRE>

このコマンドは各LEDのすべての色を完全に設定し、16ボタンのステータスバイトを読み返します。

最初にClock High(/)を設定し、その後CSを5Volts(])に上げることができ、データトランザクションを開始できます。 255:16は、値255を16回送信する繰り返しコマンドです。各カラーチャネルが8ビットの強度制御を有するので、255は100%ONである。各LEDの色ごとに1回、合計48回255倍を送ります。最後に、ボタンデータ(R:16)の16バイトのフレームを検索し、Transaction([)を終了するためにCSを下げます。ボタン値はすべて0xFFで、ボタンが押されていないことを示します。

RAW3WIRE> /] 0:16 0:16 128:16 R:16 [
時計、1
CS障害者
バルク書き込み0x00、0x10回
バルク書き込み0x00、0x10回
バルクライト0x80,0x10回<-ALL BLUEから50% バルク読み取り0x10バイト: 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF CSが有効になっています RAW3WIRE>

ここでは、すべてのLEDの青いレベルを50%(128)に設定し、他のすべての色をオフにします。ボタン出力がボタン0が押されたことを示します。

RAW3WIRE> /] 0 0 0 0 0 255 255 255 0 0 0 0 0 0 0:16 0:16 R:16 [
時計、1
CS障害者
書き込み:0x00 < - 赤LED 0、オフ ... <〜もっとも同じです 書き込み:0x00 < - 赤LED 3、オフ 書き込み:0xFF < - 赤LED 4,100%ON 書き込み:0xFF < - Red LED 5,100% 書き込み:0xFF < - Red LED 6,100%ON 書き込み:0xff < - 赤LED 7,100% 書き込み:0x00 < - 赤LED 8、オフ ... <〜もっとも同じです 書き込み:0x00 < - 赤LED 15、オフ バルクライト0x00、0x10回< - すべての緑色のLED バルクライト0x00,0x10回<-ALL BLUE LEDオフ バルク読み取り0x10バイト:<-READボタンの状態 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF CSが有効になっています RAW3WIRE>

この例は、単一のLEDをアドレス指定する方法を示しています。今回は、実際に赤いカラーフレームの16バイトをすべて書き出す。ボタン0~3と8-15は0(赤オフ)の赤い値を持ち、ボタン4-7は100%赤(255)に設定されています。すべての緑色のLEDと青色のLEDはオフ(0,0%)です。

結論

データシートの最初のバージョンが非常に多くのエラーを持っていたため、このボードが機能するのは本当にイライラしました。 Sparkfunのエンジニアとサポートは本当に役に立ち、日々の訂正されたデータシートを投稿しました。更新されたデータシートがある限り、これは簡単なボードです。

CSを上げる前にクロック信号をハイに保つ必要がなくなるファームウェアのアップデートを見たいのです。このQuirkは、ボードを多くのハードウェアSPIモジュールと互換性がなくなります。唯一のインターフェイスオプションとして遅いビット-bangルーチンを残します。幸いなことに、ソースコードはオープンで、この変更を加えたい人は誰でも利用できます。

ボタンパッドコントローラは本当にきちんとしたボードであり、将来のプロジェクトでそれを使用するのを楽しみにしています。

1日のレビュー開示:私たちは無料の理事会とスパークファンを求めました。私たちはそれが最初のバージョンのデータシートの指示を扱うようにそれが働くことができました、我々はここでその経験を文書化しました。

Author: mzgtw

Leave a Reply

Your email address will not be published. Required fields are marked *