ユーザ用ツール

サイト用ツール


softdev:msp430:lcd2

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
softdev:msp430:lcd2 [2013/10/11 21:23] kingsoftdev:msp430:lcd2 [2014/04/18 00:33] (現在) – [I<sup>2</sup>C仕様書] king
行 1: 行 1:
 ====== MSP430でI2C液晶をいじる ====== ====== MSP430でI2C液晶をいじる ======
-デジタルノギスの表示部を取り出そうと思い、小さい液晶を探した所、秋月さんにI2Cタイプの小型の物があり、それを使う事にしました。ところで、I2Cでどうやって使うのって所から始めました。う〜ん実は判っていたようでいざ使おうとすると、う〜んよくわからん。設定に有るいくつかの事が実際わからなかった。+[[..:degitalnogisu]]の表示部を取り出そうと思い、小さい液晶を探した所、秋月さんにI<sup>2</sup>Cタイプの小型の物があり、それを使う事にしました。ところで、I<sup>2</sup>Cでどうやって使うのって所から始めました。う〜ん実は判っていたようでいざ使おうとすると、う〜んよくわからん。設定に有るいくつかの事が実際わからなかった。 
 + 
 + 
 +===== I2C仕様書 ===== 
 +http://www.nxp.com/documents/user_manual/UM10204_JA.pdf
  
 ===== I2Cを動かす ===== ===== I2Cを動かす =====
行 10: 行 14:
 </blockquote> </blockquote>
  
-特に最後の「データを複数送る場合Co=1で、最終データはCo=0です。」の部分。言っている事は判るのだが、データって0~FFまで有るわけだから、連続で送ったらコントロールかデータかなんて判らんやんか。+特に最後の「データを複数送る場合Co=1で、最終データはCo=0です。」の部分。言っている事は判るのだが、データって0~FFまで有るわけだから、連続で送ったらコントロールかデータかなんて判らんやんか。これはつまり、<color RED>最終データのときはCo=0としなはれということで、連続してデータを送る場合は、最後のデータを送りきったら、STOP状態を作ってのみ終了できるということ。と理解しておこう。</color>下の表が参考になるのだろう
  
   * 一つのバスに複数デバイスをぶら下げる事が出来るのと、MasterになったりSlaveになったりするので、SDA,SCLともOpenDrain。PullUpする必要がある。   * 一つのバスに複数デバイスをぶら下げる事が出来るのと、MasterになったりSlaveになったりするので、SDA,SCLともOpenDrain。PullUpする必要がある。
行 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.\\ <color blue>最後の制御バイトが送信される。\\ データ·バイトのストリームのみをたどることができる。\\ このストリームはのみSTOP条件で終了させることができる。</color>
-|  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.\\ <color blue>STOP条件を受信しない限り、別の制御バイトはデータバイトに従います。</color>| 
 +===== StartとStop ===== 
 +データ列の最初にStart状態があって、最後にStop状態があるということらしい。そのStartとStopを作り出すための手順がある。 
 + 
 +{{:softdev:msp430:i2c_start-stop.png?400|}}\\ 
 +ユーザマニュアルから、 
 +  * START 条件とは、SCL が High のときの SDA の High から Low への遷移です。 
 +  * START 条件は、シフト・レジスタの MSB を 0(ゼロ)にセットすることにより生成されます。 
 +  * USIGE ビットおよび USIOE ビットをセットすると、出力ラッチがトランスペアレントになり、シフト・レジスタの MSB がただちに SDA に供給され、ラインを Low にします。 
 +  * USIGE をクリアすると、クロック供給ラッチ機能が再開され、データが SCL でシフト・アウトされるまで SDA 上で 0(ゼロ)を保持します。 
 +<code> 
 +void i2c_start(void){ 
 +  while(!(P1IN & BIT6)); 
 +  USISRL = 0; 
 +  USICTL0 |= USIGE + USIOE; 
 +  USICTL0 &= ~USIGE; 
 +
 +</code> 
 + 
 +  * STOP 条件とは、SCL が High のときの SDA の Low から High への遷移です。 
 +  * シフト・レジスタの MSB をセットし、USICNTx に 1をロードします。 
 +  * USIGE ビットおよび USIOE ビットをセットすると、出力ラッチがトランスペアレントになり、USISRL の MSB は SDA をアイドル状態に解放します。USIGEをクリアすると、出力ラッチに MSB が格納され、出力は USIOE をクリアすることによりディスエーブルにされます。 
 +<code> 
 +void i2c_stop(void){ 
 +  USICTL0 |= USIOE; 
 +  USISRL = 0; 
 +  USICNT = 1; 
 +  while(!(USICTL1 & USIIFG)); 
 +  USISRL = 0xff; 
 +  USICTL0 |= USIGE; 
 +  USICTL0 &= ~(USIGE + USIOE); 
 +
 +</code> 
 + 
 +===== データを送る ===== 
 +データを送る場合は、最初のほうで説明があるように、RS=1になる。それで、連続してデータを送ることになるから、Co=0となる。 
 +  - Start状態 
 +  - Slaveアドレス送信 
 +  - Co=1,RS=0でコマンドSet指定(80h) 
 +  - Set DDRAM Addressコマンド(80h+Addr) 
 +  - Co=0,RS=1でデータSet指定(40h) 
 +  - データ、データ、、、、、 
 +  - Stop状態 
 + 
 +途中で、DDRAMアドレスを変えるときは、Start状態からはじめる。。。。。う~ん、めんどい。 
 + 
softdev/msp430/lcd2.1381494214.txt.gz · 最終更新: 2013/10/11 21:23 by king