softdev:msp430:lcd2
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン最新のリビジョン両方とも次のリビジョン | ||
softdev:msp430:lcd2 [2013/10/11 07:57] – king | softdev:msp430:lcd2 [2014/04/18 00:33] – [I2C仕様書] king | ||
---|---|---|---|
行 1: | 行 1: | ||
====== MSP430でI2C液晶をいじる ====== | ====== MSP430でI2C液晶をいじる ====== | ||
- | デジタルノギスの表示部を取り出そうと思い、小さい液晶を探した所、秋月さんにI2Cタイプの小型の物があり、それを使う事にしました。ところで、I2Cでどうやって使うのって所から始めました。う〜ん実は判っていたようでいざ使おうとすると、う〜んよくわからん。設定に有るいくつかの事が実際わからなかった。 | + | [[..: |
+ | |||
+ | ===== I< | ||
+ | http:// | ||
+ | |||
+ | ===== I2Cを動かす ===== | ||
秋月の説明書に有る、ここの部分 | 秋月の説明書に有る、ここの部分 | ||
< | < | ||
- | スレーブアドレスは、0xC7です。(アドレス0111110+0(R/ | + | スレーブアドレスは、0xC7です。(アドレス0111110+0(R/ |
コントロールバイトで「データ、コマンドの指定」RSと「連続データの指定」Coを送信します。\\ | コントロールバイトで「データ、コマンドの指定」RSと「連続データの指定」Coを送信します。\\ | ||
コマンドの場合RS=0、データはRS=1になります。データを複数送る場合Co=1で、最終データはCo=0です。 | コマンドの場合RS=0、データはRS=1になります。データを複数送る場合Co=1で、最終データはCo=0です。 | ||
</ | </ | ||
- | 特に最後の「データを複数送る場合Co=1で、最終データはCo=0です。」の部分。言っている事は判るのだが、データって0~FFまで有るわけだから、連続で送ったらコントロールかデータかなんて判らんやんか。 | + | 特に最後の「データを複数送る場合Co=1で、最終データはCo=0です。」の部分。言っている事は判るのだが、データって0~FFまで有るわけだから、連続で送ったらコントロールかデータかなんて判らんやんか。これはつまり、< |
* 一つのバスに複数デバイスをぶら下げる事が出来るのと、MasterになったりSlaveになったりするので、SDA, | * 一つのバスに複数デバイスをぶら下げる事が出来るのと、MasterになったりSlaveになったりするので、SDA, | ||
行 19: | 行 23: | ||
^Co^ Description | ^Co^ Description | ||
- | | 0 |Last control byte to be sent.\\ Only a stream of data bytes is allowed to follow.\\ This stream may only be terminated by a STOP condition.\\ 最後の制御バイトが送信される。\\ データ·バイトのストリームのみをたどることができる。\\ このストリームはのみSTOP条件で終了させることができる。| | + | | 0 |Last control byte to be sent.\\ Only a stream of data bytes is allowed to follow.\\ This stream may only be terminated by a STOP condition.\\ |
- | | 1 |Another control byte will follow the data byte unless a STOP condition is received.\\ STOP条件を受信しない限り、別の制御バイトはデータバイトに従います。| | + | | 1 |Another control byte will follow the data byte unless a STOP condition is received.\\ |
+ | ===== StartとStop ===== | ||
+ | データ列の最初にStart状態があって、最後にStop状態があるということらしい。そのStartとStopを作り出すための手順がある。 | ||
+ | |||
+ | {{: | ||
+ | ユーザマニュアルから、 | ||
+ | * START 条件とは、SCL が High のときの SDA の High から Low への遷移です。 | ||
+ | * START 条件は、シフト・レジスタの MSB を 0(ゼロ)にセットすることにより生成されます。 | ||
+ | * USIGE ビットおよび USIOE ビットをセットすると、出力ラッチがトランスペアレントになり、シフト・レジスタの MSB がただちに SDA に供給され、ラインを Low にします。 | ||
+ | * USIGE をクリアすると、クロック供給ラッチ機能が再開され、データが SCL でシフト・アウトされるまで SDA 上で 0(ゼロ)を保持します。 | ||
+ | < | ||
+ | void i2c_start(void){ | ||
+ | while(!(P1IN & BIT6)); | ||
+ | USISRL = 0; | ||
+ | USICTL0 |= USIGE + USIOE; | ||
+ | USICTL0 &= ~USIGE; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | * STOP 条件とは、SCL が High のときの SDA の Low から High への遷移です。 | ||
+ | * シフト・レジスタの MSB をセットし、USICNTx に 1をロードします。 | ||
+ | * USIGE ビットおよび USIOE ビットをセットすると、出力ラッチがトランスペアレントになり、USISRL の MSB は SDA をアイドル状態に解放します。USIGEをクリアすると、出力ラッチに MSB が格納され、出力は USIOE をクリアすることによりディスエーブルにされます。 | ||
+ | < | ||
+ | void i2c_stop(void){ | ||
+ | USICTL0 |= USIOE; | ||
+ | USISRL = 0; | ||
+ | USICNT = 1; | ||
+ | while(!(USICTL1 & USIIFG)); | ||
+ | USISRL = 0xff; | ||
+ | USICTL0 |= USIGE; | ||
+ | USICTL0 &= ~(USIGE + USIOE); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== データを送る ===== | ||
+ | データを送る場合は、最初のほうで説明があるように、RS=1になる。それで、連続してデータを送ることになるから、Co=0となる。 | ||
+ | - Start状態 | ||
+ | - Slaveアドレス送信 | ||
+ | - Co=1, | ||
+ | - Set DDRAM Addressコマンド(80h+Addr) | ||
+ | - Co=0, | ||
+ | - データ、データ、、、、、 | ||
+ | - Stop状態 | ||
+ | |||
+ | 途中で、DDRAMアドレスを変えるときは、Start状態からはじめる。。。。。う~ん、めんどい。 | ||
+ |
softdev/msp430/lcd2.txt · 最終更新: 2014/04/18 00:33 by king