PICマイコンを使って測定ツールを作ってみよう(2) ―― クロック周波数やモータの回転数を測れるカウンタを作る(後編)
tag: 組み込み 電子回路 ディジタル・デザイン
エレキ系DIY 2009年9月28日
このCOMM_USB()はmain.cに登録したタスク(task)の一つで,主にソフトウェアの検出や液晶パネルへの表示を担当しています.USBの処理はポーリング(polling)といって,グルグル回るループの中で毎回USB割り込みフラグがたったかどうかをチェックしています.
ホスト・パソコンのUSBからは,1ms(ミリ秒)ごとに"生きているかどうか"の問い合わせがあります.毎回きちんと答えてやらないと,ホスト・パソコンの画面の下のほうに「USBから応答がありません」というメッセージがでて,通信不能になります.ですから,どんなに長いタスクでも1ms以内に処理が終了するようにプログラムを作らないといけません.
それを可能にするのが,割り込みとステート・マシンです.処理を細かい単位に分け,識別番号をふり,1回のループごとに順番に細かい処理を実行していくのがステート・マシンです.今回はまだ実装していませんが,割り込み処理ルーチンの中のI2Cなどの処理はステート・マシンで記述しています.これは,本連載の後半で実際に使われます.ここではスレーブ処理しかありませんが,今後マスタ処理が追加され,どちらかのデバイスとして実行できるようになります.
割り込み処理ルーチンはISR(Interrupt Service Routine)と呼びます.これは,たいていのコンピュータで使われている便利な機能です.図6に,ここでの割り込み処理の内容を示します.user.cではISRを最後に配置しています.最初に書く人も多いのですが,筆者はすぐに探せるように最後に持ってきています.C言語の関数では,main.c以外はプロトタイプ宣言を行っておかないとコンパイル・エラーが出ます.ただしISRだけは別の扱いで,プロトタイプ宣言を行う必要はありません.
図6 割り込み処理の流れ
さて話を戻して,メニューに自分の名前を追加する方法を説明しましょう.リスト2でメニューの設定を行っています.ここのどれかを変えることにより,自分の名前を表示できます.ためしに4番目のメニューを初期値の「4 SPI」から「xxxxxx(xxxxxxはあなたの名前.アルファベットでも半角カタカナでもOK)」に変えてみましょう.プログラムの先頭部でいろいろな変数と定数の設定を行っており,ここを変える方法もあるのですが,せっかく表示部分を探し出しているのでそこを変更しましょう.
リスト2 メニュー設定の記述(user.cの263~306行目)
if(menu_change){ switch(menu){ case 1 : LCDstring(mn1,8); break; case 2 : LCDstring(mn2,8); break; case 3 : LCDstring(mn3,8); break; case 4 : LCDstring(mn4,8); break; case 5 : LCDstring(mn5,8); break; case 6 : LCDstring(mn6,8); break; case 7 : LCDstring(mn7,8); break; } LCDlocate(0x40); } if(menu_change){ PORTAbits.RA0= 0; LCDmenu2(); LCDlocate(0); } if((menu_selected)&&(dsp_on)){ switch(menu){ case 0 : case 1 : dsp_on=0; LCDlocate (0x40); LCDstring(" ",8); freq=(cnt01*0x10000+TMR0H1*0x100+TMR0L1)*256/100; sprintf(va1,"%8ld",freq); LCDlocate(0x46-strlen(va1)); LCDstring(va1,strlen(va1)); // LCDwrite(0x30); // LCDwrite(0x4B); break; case 2 : case 3 : case 4 : case 5 : case 6 : case 7 : LCDlocate(0x40); LCDstring(mn0,8); break; } } |
switch文の上に mn4="xxxxxx"; という文を追加するだけです.これでProjectメニューの下の「Build」を選択すると,コンパイル・リンクが始まります.PICマイコンに書き込んで基板にUSBケーブルをつなぐと,最初のメニューが液晶パネルに表示されます.表示スイッチのUPーを押し続けると,4番目にあなたの名前がでてきます.簡単でしょう.
全体の制御を変更するには,まだまだ覚えることがたくさんありますが,プログラムの修正・書き込みはこんなに簡単だということを実感してください.