ユーザ用ツール

サイト用ツール


softdev:msp430:lcd1

差分

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

この比較画面へのリンク

次のリビジョン
前のリビジョン
softdev:msp430:lcd1 [2013/01/12 22:19] – 作成 kingsoftdev: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制御して、タイマー割り込みを使って起きるようにした。
-  * LaunchPadには32.768KHzの水晶が1個付いてくるので、外部発振を使って時計を作ってみた。+  * [[softdev:launchpad]]には32.768KHzの水晶が1個付いてくるので、外部発振を使って時計を作ってみた。
   * 外部SWでLCDコントラストを変えるようにする。(外部割り込み使う)   * 外部SWでLCDコントラストを変えるようにする。(外部割り込み使う)
  
 +===== 初期化部 =====
 +コアクロックはデフォルトの内部クロック、1MHz。
 +<code c>
 +void main(void)
 +{
 +  WDTCTL = WDTPW + WDTHOLD;   // Stop watchdog timer
 +  P1SEL = 0x00;
 +  P1SEL2= 0x00;
 +  P1DIR = 0x01;               // Set P1.0 to output direction
 +  P1OUT = 0x38;
 +  P1REN = 0x38;               // Set 出力HしてからRENをセットするとPullUpになる模様  
 +  P2DIR |= 0x3F;              // Set P2 Out
 +----
 +LCD初期化し表示(省略)
 +----
 +  lcd_puts("LCD Watch");
 +</code>
  
 +===== 端子割り込み =====
 +SWを3つ、P1に割り振る。
 +<code c>
 +//  Pi interrupt enable
 +  P1IE  = 0x38;
 +  P1IES = 0x38; // P1.3-5 エッジ割り込みH->L
 +  P1IFG &= ‾0x38; // P1.3-5 割り込みフラグクリア
 +</code>
  
 +===== タイマ =====
 +タイマを外部の低周波数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
 +</code>
  
 +===== Sleepモード =====
 +ここまで書いたら、割り込み有効で、LPM3モード(ACLKのみ生きてて、MCLKもCPUもsleepしている)へ移行する。下記一文でその場で停止。後は割り込み処理で動作を継続する。
 +<code c>
 +  _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/interrupt
 +</code>
 +{{:softdev:msp430:msp430_mode.png?350|各モードの消費の比較}}
 +
 +ちなみに、LPM4はACLKまですべてのCLKとCPUが停止するモードで、外部割り込みのみresumeできる。
 +===== 割り込み部 =====
 +<code c>
 +//A0_VECTOR : Timer0_A CC0
 +#pragma vector=TIMER0_A0_VECTOR
 +__interrupt void Timer_A (void)
 +{
 + jikan += 1;      // 1秒進める。jikanは秒数で、24時間を考慮してlongで定義
 + if(jikan==86400)jikan=0;// 24:00:00 → 00:00:00
 +
 +   ここに時計データの表示処理が入る。
 +}
 +</code>
 +
 +<code c>
 +// Port 1 interrupt service routine
 +#pragma vector=PORT1_VECTOR
 +__interrupt void Port_1(void)
 +{
 +  P1IFG &= ‾0x38;       // P1.4 IFG cleared
 + ポート処理を入れる。
 +}
 +</code>
  
softdev/msp430/lcd1.1357996746.txt.gz · 最終更新: 2013/07/15 20:28 (外部編集)