softdev:msp430:lcd1
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| softdev:msp430:lcd1 [2013/01/12 22:24] – king | softdev:msp430:lcd1 [2013/07/15 20:25] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 4: | 行 4: | ||
| 今回使ったのは、有る所から入手した4bit転送のLCDでした。初期化とか説明書通り。\\ | 今回使ったのは、有る所から入手した4bit転送のLCDでした。初期化とか説明書通り。\\ | ||
| 気をつける必要があるのは、「MSP430の電源は上限3.3V(公称)」と言う事。PICの様に5Vでも3Vでもというわけには行かず、LCDを5V品にすると、LDOなんぞが必要になる。\\ | 気をつける必要があるのは、「MSP430の電源は上限3.3V(公称)」と言う事。PICの様に5Vでも3Vでもというわけには行かず、LCDを5V品にすると、LDOなんぞが必要になる。\\ | ||
| - | * 回路図は作らずに、適当に配線した。 | + | * 回路図は作らずに、適当に配線。ポート足りるので外部品もRESET端子のPU抵抗だけ。 |
| * MSP430の低消費電力を体験したかったので、Sleep制御して、タイマー割り込みを使って起きるようにした。 | * MSP430の低消費電力を体験したかったので、Sleep制御して、タイマー割り込みを使って起きるようにした。 | ||
| * [[softdev: | * [[softdev: | ||
| * 外部SWでLCDコントラストを変えるようにする。(外部割り込み使う) | * 外部SWでLCDコントラストを変えるようにする。(外部割り込み使う) | ||
| - | 初期化部 | + | ===== 初期化部 |
| + | コアクロックはデフォルトの内部クロック、1MHz。 | ||
| <code c> | <code c> | ||
| void main(void) | void main(void) | ||
| 行 26: | 行 27: | ||
| </ | </ | ||
| + | ===== 端子割り込み ===== | ||
| + | SWを3つ、P1に割り振る。 | ||
| + | <code c> | ||
| + | // Pi interrupt enable | ||
| + | P1IE = 0x38; | ||
| + | P1IES = 0x38; // P1.3-5 エッジ割り込みH-> | ||
| + | P1IFG &= ‾0x38; // P1.3-5 割り込みフラグクリア | ||
| + | </ | ||
| + | ===== タイマ ===== | ||
| + | タイマを外部の低周波数CLK、ACLKだったかな、にする。ここに、32768Hzの水晶振動子を付けて、15bitカウントしたら時計を1秒進ませる。 | ||
| + | <code c> | ||
| + | // Timer A setting | ||
| + | TACTL = TASSEL_1 + MC_1 ;// ACLK, up to ccr, interrupt | ||
| + | TACCR0 = 32768; | ||
| + | TACCTL0 |= CCIE; // enable interrupt | ||
| + | </ | ||
| + | |||
| + | ===== Sleepモード ===== | ||
| + | ここまで書いたら、割り込み有効で、LPM3モード(ACLKのみ生きてて、MCLKもCPUもsleepしている)へ移行する。下記一文でその場で停止。後は割り込み処理で動作を継続する。 | ||
| + | <code c> | ||
| + | _BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/interrupt | ||
| + | </ | ||
| + | {{: | ||
| + | |||
| + | ちなみに、LPM4はACLKまですべてのCLKとCPUが停止するモードで、外部割り込みのみresumeできる。 | ||
| + | ===== 割り込み部 ===== | ||
| + | <code c> | ||
| + | //A0_VECTOR : Timer0_A CC0 | ||
| + | #pragma vector=TIMER0_A0_VECTOR | ||
| + | __interrupt void Timer_A (void) | ||
| + | { | ||
| + | jikan += 1; | ||
| + | if(jikan==86400)jikan=0;// | ||
| + | |||
| + | ここに時計データの表示処理が入る。 | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <code c> | ||
| + | // Port 1 interrupt service routine | ||
| + | #pragma vector=PORT1_VECTOR | ||
| + | __interrupt void Port_1(void) | ||
| + | { | ||
| + | P1IFG &= ‾0x38; | ||
| + | ポート処理を入れる。 | ||
| + | } | ||
| + | </ | ||
softdev/msp430/lcd1.1357997091.txt.gz · 最終更新: (外部編集)
