MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
MSP430G2553 - LCDのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
MSP430G2553 - LCD
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == SC2004 / I2C通信 == ==== ATmega328とI2C ==== MSP430G2553において、I2Cのシリアルクロック線(SCL)とシリアルデータ線(SDA)で一般的によく使用されるピンは、以下の通りである。<br> 原則として、以下に示すピンをI2C通信に使用することが推奨される。<br> ただし、必要に応じて他のピンをUSCIモジュールに割り当てることも可能である。<br> * SCL *: USCIモジュールのUCB0SCLに対応している。 *: P1.6 *: P3.1 * SDA *: USCIモジュールのUCB0SDAの代替ピンである。 *: P1.7 *: P3.0 <br> 使用不可のピンを、以下に示す。<br> * P1.0 * P1.1 *: 外部クリスタル発振器に接続されているため、I2C通信には使用できない。 * P1.5 * P2.0 *: P1.5はXT2IN、P2.0はXT2OUTとして使用される可能性があるため、I2C通信に使用する場合は注意が必要である。 * P2.6 * P2.7 *: デバッグ用のJTAGインターフェースに使用されるため、I2C通信には使用できない。 <br> <u>※注意 1</u><br> <u>ピンの割り当ては、プロジェクトの要件やPCBレイアウトに応じて柔軟に変更できるが、使用するピンが他の機能と競合しないように注意すること。</u><br> <br> <u>※注意 2</u><br> <u>I2C通信を使用する場合は、プルアップ抵抗を適切に配置する必要がある。</u><br> <u>多くのモジュールには、プルアップ抵抗が内蔵されているが、必要に応じて外部にプルアップ抵抗を追加する必要がある。</u><br> <br> ==== MSP430G2553の設定 ==== 以下の設定を適切に行うことにより、MSP430G2553でI2C通信を正常に動作させることができる。<br> * クロック設定 *: I2C通信を使用する前に、MSP430G2553のクロックを適切に設定する必要がある。 *: 通常、SMCLK (サブメインクロック) を使用して、UCB0CTL1レジスタのUCSSELビットでクロックソースを選択する。 *: <br> * ポートの設定 *: I2C通信に使用するポート (例: P1.6とP1.7) を、I2C機能に設定する必要がある。 *: P1SELレジスタとP1SEL2レジスタを適切に設定して、ピンをI2C通信用に割り当てる。 *: <br> * I2C通信の初期化 *: UCB0CTL1レジスタのUCSWRSTビットをセットして、I2Cをリセット状態にする。 *: その後、UCB0CTL0レジスタでI2Cのマスターモード、同期モード、7ビットアドレッシング等を設定する。 *: また、UCB0BRレジスタでI2Cのクロック周波数を設定する。 *: <br> * I2Cアドレスの設定 *: UCB0I2CSAレジスタで、スレーブデバイス(SC2004)のI2Cアドレスを設定する。 *: <br> * 割り込みの設定 (必要な場合) *: I2C通信の割り込みを使用する場合は、UCB0IEレジスタで適切な割り込みを有効にして、割り込みハンドラを設定する。 *: <br> * 通信エラーの処理 *: I2C通信中にエラーが発生した場合、UCB0STATレジスタのエラーフラグを確認して、適切にエラー処理を行う。 *: 必要に応じて、I2Cの初期化やリスタートを行うこと。 *: <br> * 低電力モードの考慮 *: MSP430G2553はデフォルトでは低電力モードになっている。 *: そのため、I2C通信を使用する場合は、適切なタイミングでスリープモードから復帰させる必要がある。 <br> ==== SC2004の設定 ==== SC2004は、I2Cスレーブデバイスである。<br> <br> SC2004のデータシートを参照して、初期化シーケンスやコマンドを確認する。<br> 一般的に、LCDに表示のためには、ファンクションセット、エントリーモード、ディスプレイのON / OFF等の設定が必要となる。<br> <br> ==== I2Cを介したデータ送信 ==== MSP430からSC2004にデータを送信するには、I2Cのスタート条件、SC2004のスレーブアドレス、データ、ストップ条件の順に送信する。<br> 送信データには、SC2004のコマンドやテキストデータが含まれる。<br> <br> ==== サンプルコード ==== # I2Cの初期化 (i2c_init) #* ピンの設定、I2Cモードの設定、クロック周波数の設定等 #: <br> # LCDの初期化 (lcd_init) #* 8ビットデータ、2行表示、5x8ドットの設定 #* 表示ON、カーソルOFF、点滅OFFの設定 #* カーソル移動方向を右に設定 #* 画面クリア #: <br> # 文字列の表示 (lcd_print) #* lcd_data関数を使用して文字データをLCDに送信 <br> I2C通信では、i2c_start関数でスタートコンディション、i2c_stop関数でストップコンディションを発生させて、i2c_write関数でデータを送信している。<br> LCDへのコマンド送信は、lcd_cmd関数、データ送信はlcd_data関数を使用している。<br> <syntaxhighlight lang="c"> #include <msp430.h> #include <stdint.h> // I2Cアドレス #define LCD_ADDR 0x27 // または // #define LCD_ADDR 0x3f // I2C関数 void i2c_init(); void i2c_start(); void i2c_stop(); void i2c_write(uint8_t data); // LCD関数 void lcd_init(); void lcd_cmd(uint8_t cmd); void lcd_data(uint8_t data); void lcd_print(const char *str); int main(void) { WDTCTL = WDTPW | WDTHOLD; // ウォッチドッグタイマを停止 i2c_init(); // I2C初期化 lcd_init(); // LCD初期化 lcd_print("Hello, MSP430"); // 文字列を表示 while (1); } void i2c_init() { P1SEL |= BIT6 | BIT7; // I2C用のピン設定 (P1.6:SCL, P1.7:SDA) P1SEL2 |= BIT6 | BIT7; UCB0CTL1 |= UCSWRST; // I2Cをリセット UCB0CTL0 = UCMST | UCMODE_3 | UCSYNC; // I2Cマスター, I2Cモード, 同期モード UCB0CTL1 = UCSSEL_2 | UCSWRST; // SMCLK, リセット解除 UCB0BR0 = 12; // SCLクロック: 100kHz (12[MHz] / 12 = 100[kHz]) UCB0BR1 = 0; UCB0I2CSA = LCD_ADDR; // スレーブアドレス UCB0CTL1 &= ~UCSWRST; // I2C動作開始 } void i2c_start() { UCB0CTL1 |= UCTR; // 送信モード UCB0CTL1 |= UCTXSTT; // スタートコンディション while (UCB0CTL1 & UCTXSTT); // スタートコンディション完了まで待機 } void i2c_stop() { UCB0CTL1 |= UCTXSTP; // ストップコンディション while (UCB0CTL1 & UCTXSTP); // ストップコンディション完了まで待機 } void i2c_write(uint8_t data) { UCB0TXBUF = data; // データ送信 while (!(UCB0IFG & UCTXIFG)); // 送信完了まで待機 } void lcd_init() { __delay_cycles(50000); // 50ms待機 lcd_cmd(0x38); // 8ビットデータ, 2行表示, 5x8ドット lcd_cmd(0x0C); // 表示ON, カーソルOFF, 点滅OFF lcd_cmd(0x06); // カーソル移動方向を右に設定 lcd_cmd(0x01); // 画面クリア __delay_cycles(2000); // 2[mS]待機 } void lcd_cmd(uint8_t cmd) { i2c_start(); i2c_write(0x00); // コマンドモード i2c_write(cmd); i2c_stop(); __delay_cycles(2000); // 2[mS]待機 } void lcd_data(uint8_t data) { i2c_start(); i2c_write(0x40); // データモード i2c_write(data); i2c_stop(); __delay_cycles(50); // 50[uS]待機 } void lcd_print(const char *str) { while (*str) { lcd_data(*str++); } } </syntaxhighlight>
MSP430G2553 - LCD
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse