PICマイコンを使って測定ツールを作ってみよう(2) ―― クロック周波数やモータの回転数を測れるカウンタを作る(後編)

中西 紫朗

 列の最初のアドレスまで変わっていないので,最初のポジションは1列目と2列目とでは0x40も離れています.一番大きい液晶パネルに合わせたのでしょう.で,8文字以上の文字列をあるアドレスから連続して書いても,次の列に移りません.ここは今どちらの列にいて,何文字目だということを意識しておく必要があります.任意の列,文字位置を指定できるようにLCDlocate()という関数も用意しました(リスト6).文字を実際に書くLCDwrite()というルーチンも用意しています(リスト7).ここらへんは定番です.

リスト6 LCDlocate()関数の記述(user.cの487~517行目)

void LCDcontrol(byte data)
{
              byte db;
 
              PORTBbits.RB3 = 0;
              db = data&0xF0;
              PORTB = db;                                   // set high niblle
              PORTBbits.RB2 = 1;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              PORTBbits.RB2 = 0;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              db = (data&0x0F)<<4;                   
              PORTB = db;                                   // Set low nibble
              PORTBbits.RB2 = 1;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              PORTBbits.RB2 = 0;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
}
 

 


リスト7 LCDwrite()関数の記述(user.cの456~486行目)

void LCDcontrol(byte data)
{
              byte db;
 
              PORTBbits.RB3 = 0;
              db = data&0xF0;
              PORTB = db;                                   // set high niblle
              PORTBbits.RB2 = 1;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              PORTBbits.RB2 = 0;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              db = (data&0x0F)<<4;                   
              PORTB = db;                                   // Set low nibble
              PORTBbits.RB2 = 1;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              PORTBbits.RB2 = 0;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
              _asm NOP _endasm;
}
 
 

 


 文字列を連続表示できるように,表示文字数を与えて文字列を表示するLCDstring()という関数も用意しました(リスト8).C言語であれば最後に0x00をつけた文字列がよく使われ,0x00に出会うと表示を停止するような関数も使われています.今回は文字表示数が少ないこともあり,用意しませんでした.好みの人は自分で作ってください.簡単にできるはずです.

リスト8 LCDstring()関数の記述(user.cの412~425行目)

void LCDstring(char *ptr, byte n)
{
              byte i,a;
 
              PORTBbits.RB3 = 1;                      
              for(i=0; i<n; i++){
                            if(*ptr==0){
                                          LCDwrite(0x20);
                            } else {
                                         LCDwrite(*ptr);
                            }
                            ptr++;
              }            
}
 
 

 


 液晶パネルの初期処理は重要です.液晶パネルは最初4ビット・モードで走っており,それ以降も4ビット・モードを続行するための処理と液晶パネルの画面設定を行います.ここでは表示行数や表示フォント・サイズ,カーソル位置,カーソル・ブリンク(点滅)などを設定します.

 文字キャラクタ液晶の場合はこうした機能を比較的簡単に使えます.難しいのはグラフィックス液晶の場合です.フォントから用意しないと文字列を表示できません.グラフィックス液晶だから表示するものは図とかチャートだけでいいだろうと思うのは早計です.たいてい文字表示も求められます.

 グラフィックス表示なので漢字も表示できます.漢字表示があると,日本人には一挙に分かりやすいメッセージになります.ただしPICマイコンについてはROM容量の大きいものが必要になります.漢字フォントを外部のEEPROMやフラッシュROMに記憶させておく手もありますが,簡単な構成の基板では望むべくもありません.文字データ転送量も8倍とか16倍とかになり,重いタスクになります.しかし機会があれば,この連載の番外編として使ってみたいと考えています.

●次回はRS-485モニタを製作

 以上が簡単なプログラムの説明です.実際にはUSBで使われているMicrochip社純正のソース・リストも含まれているのですが,ここまで説明するとUSBの基本仕様に触れなければならなくなります.今回は簡単な説明にとどめ,本連載の後半で,必要がでてきたらUSB関連の動きも説明したいと思います.

 次回は,RS-485のモニタとして使える基板に仕上げます.モニタだけでなく,ネットワークの一員として動作できる機能を追加する予定です.8×2文字液晶パネルだけでは表示文字数が少ないので,Visual Basic 6.0(VB6)でパソコン上にモニタ内容を表示するアプリケーション・プログラムを作成します.PICマイコンとVisual Basicをどのように組み合わせればうまく通信できるかを説明します.

 RS-485ネットワークのプロトコルは,トランジスタ技術 2006年9月号のものを使用します.一般に公開されているので,著作権さえ気をつければ,個人の使用は問題ありません.RS-485を使う利点は,EthernetやUSBの場合と異なり,ツイスト・ペアで数珠つなぎにしていくと,途中にハブもルータも必要ないことです.最低限のコストでセンサ・ネットワークなどを構築できます.ご期待ください.


なかにし・しろう
(有)NSL

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日