工作と競馬

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

タグ:dsPIC30F2012

要旨

 dsPIC30F2012内蔵のUART(非同期シリアル通信)モジュールによるRS-232通信に関する記事である。内蔵モジュールを使用してPCと通信するためのプログラムを作成し、正しく動作するか調べた。


背景と目的

 以前の記事において、トランジスタ技術2007年8月号付録のdsPIC30F2012実験基板を用いた実験環境を整えることができた。しかし、実用的なデバイスを作るには、PICに用意された各種機能の使用方法を習得する必要があると考えている。そこで、今回はPIC内蔵機能の一つであるUARTモジュールについて使用方法を習得し、RS-232インターフェースによるPCとの通信を行えるプログラムを自ら作成してみる。


詳細
1.PIC内蔵のUARTモジュール

 アマチュア工作での使用に限って簡単に言ってしまえば、PCとRS-232通信を実現するための回路である。このモジュールをプログラムにより制御すれば、PCとの通信が比較的簡単に実現できるのである。dsPIC30F2012では11,12番ピンがUARTで使用するピンであり、これをRS-232インターフェース回路を介してPCと接続すれば、ハードウェアの準備はOKである。ちなみに、トランジスタ技術2007年8月号付録基板では、受信側12番ピンについてはすでにインターフェース回路が実装されているので、図1のような接続を行えば準備が整う。


picserial1
図1 トラ技2007-8付録基板を用いたUART通信の準備

2.PIC内蔵のUARTモジュールの使用方法

 UART通信には受信と送信があるが、本記事ではまず受信にしぼって使用してみる。送信については別の機会とする。使用方法は、マイクロチップテクノロジージャパンのWebサイトよりdsPIC30Fマニュアルなるものをダウンロードし参照した。簡単にまとめると以下のとおり。なお、以下に出てくるレジスタ名はdsPIC30F2012 のデータシートを見ればわかる。

  1. ボーレートの設定
  2. U1BRGレジスタにボーレートに対応する数値を設定する。
    U1BRG=命令サイクルクロック周波数÷(16×ボーレート)-1である。たとえば19200bps、命令サイクルクロック29.48MHzなら、UxBRG=29.48×10^6÷(16*19200)-1≒95である。

  3. データビット数、ストップビット数、パリティ有無の選択
  4. U1MODEレジスタの各値を設定する。データビット8,ストップビット1,パリティなしなら、下位3ビットを000とすればよい。

  5. 代替入出力ポートの選択
  6. U1STAレジスタのALTIOを設定する。PORTCの13,14を使用するには1とする。

  7. 割り込みの設定
  8. 受信割り込みを有効にするには、IECレジスタのUxRXIEビットを1にする。そのとき、優先順位はIPCレジスタ内のUxRXIPで設定できる。また、U1MODEレジスタのビット7,6で割り込みの発生する条件を指定できる。受信を検出した場合割り込みフラグを立たせるにはビット7を0にすればよい。

  9. モジュールを有効化する
  10. U1MODEの最上位ビットを1にすればよい。

  11. 受信を検出する
  12. 検出方法は2種類ある。割り込みかU1STAレジスタ内のURXDAビットをポーリングで読み取るかである。

  13. 受信バッファからデータを読み取る
  14. U1RXREGレジスタを読めばよい。


3.プログラム作成

 作成したプログラムは以下のとおり。通信の設定は、RS-232の19200bps,8ビット,1ビット,パリティなしとし、文字列'a'を受信したら緑LEDが点灯する。

picserial2

4.動作確認

 PCよりターミナルソフトTera Termを用いて文字列'a'を送信したところ、赤LED点灯が緑LED点灯に変わった。また、'a'以外の文字を送ってみたらLED点灯状態に変化がなかった。これにより、作製したプログラムは正しく動作していることがわかり、UARTモジュールを用いたRS-232受信を実現することができた。ちなみに、'a'をPCから出力したときのケーブル中の波形をオシロスコープ(USBオシロ PicoScope2300)にて観察してみた。図では論理が反転しているように見えるが、そもそもRS-232通信では1なら-15~-3V、0なら+3~+15Vとなっており図の状態は正しい。これをマイコン等に信号として取り込むには5V/0Vのような論理レベルに変換する必要がある。

picserial3

まとめと今後の課題

 dsPIC30F2012内蔵のUARTモジュールを使用し、PCとのRS-232受信を行うことができた。これにより、UARTモジュールを使用したRS-232受信機能を今後作製する機器へ組み込むことができるはずである。ただし、今回は送信については触れていないので今後送信についても使用方法を習得したい。


要旨

 マイクロチップテクノロジー社のマイコンdsPICを用いた工作に関する記事である。今回は、トランジスタ技術2007年8月号付録のdsPIC基板を用いて開発環境整備と動作確認を行った。


背景と目的

 dsPICはマイクロチップテクノロジーのDSPを内蔵した16ビットマイコンであり、通常のマイコンに加えてディジタル信号処理もワンチップで行うことができるため、アマチュア電子工作家としてもこの面白そうなデバイスをほっとくわけにはいかない。そこで、開発環境がそろえられないか検討したところ、トランジスタ技術2007年8月号にdsPIC30F2012を搭載した基板と開発環境一式を納めたCD-ROMが付録となっており、これで簡単に始められることがわかった。今回はトラ技付録を用いてdsPIC開発環境を整え動作確認をしてみる。


詳細
1.必要アイテム

 トランジスタ技術2007年8月号(以下、トラ技2007-8)の記事に沿って環境整備、動作確認を行うのに必要なアイテムは以下のとおり。なお、筆者は過去にPICマイコン開発環境をそろえたことがあるので新規にそろえる必要があったのはCコンパイラだけであった。


表1 必要なアイテム
名称入手方法使用目的備考
MPLABトラ技付録CDマイクロチップテクノロジー社マイコン製品の統合開発環境マイクロチップテクノロジー社Webサイトから無料DLも可能
C30コンパイラトラ技付録CDdsPIC30シリーズをC言語で開発するため評価版はマイクロチップテクノロジー社Webサイトから無料DLも可能
シリアルケーブル秋月電子などPCとシリアル通信するため、プログラム書き込みもシリアル通信でできるため有用D-sub9pinのストレートケーブル
シリアル-USB変換秋月電子などシリアルポートを持たないPCでシリアル通信をするためデスクトップPCなどシリアルポートがあれば不要
乾電池3本と電池ボックス-マイコン基板に電源を供給するため5V100mA程度が取れれば何でもよい。

2.動作テスト

 動作テストはトラ技2007-8の第一章にあるLED点滅プログラムの点滅テストである。(マイコン工作ではLED点滅プログラムはお決まりである。)これは、記事にしたがって単に電源をつなげばOKなので問題なく終了した。面白くもなんとも無い。


3.通信テスト

 dsPICはシリアル通信インターフェースを内蔵しており、簡単にシリアル通信をすることができる。プログラム書き込みもシリアル通信を利用して行うことができるため、(あらかじめデバイスに書き込みに対応するプログラムが書かれている必要があるが)シリアル通信の可否は本デバイス開発において非常に重要である。これも記事にしたがってPCからコマンドを送信し、無事LED点滅パターンが変更されることを確認した。PCから動作が変えられるので動作テストに比べると面白い。


dsPIC11
図3 シリアル通信のテストをしているところ

4.開発環境整備とプロジェクト作成

 開発環境整備は、トラ技2007-8の第2章の内容である。まず、統合開発環境MPLABとCコンパイラのインストールを行うのが、筆者はすでにMPLABがインストールされていたのでC30コンパイラをインストールするのみで無事終了した。次に、プロジェクトを作成し、テストプログラムを記述しビルドしてみたが、これも問題なく済んだ。


5.シリアル通信によるプログラム書き込み

 最後に、シリアル通信によるプログラム書き込みを行った。これは、いわゆるブートローダを使用したプログラム書き込みである。トラ技掲載の手順に従い4.で作成したテストプログラムを書き込んでみたところ無事書き込みは終了し、正しくプログラムが動作していることが確認できた。これでブートローダを使用した書き込みが正しく行えることが確認できた。今後も新たに書き込むときにはブートローダを使用するのが手っ取り早いので使用していくことにする。
 なお、ブートローダについて少し説明しておく。ブートローダとは通常の実行対象プログラムとは別のメモリ領域に書き込んであるプログラムで、電源投入直後まずこれが起動されるが、シリアル通信によりプログラム書き込みを行おうとしていない場合は、すでに書き込まれている通常のプログラムにジャンプする。しかし、プログラム書き込みを行おうとしていると判断した場合は、シリアル通信によって送られてくる新しいプログラムをメモリに書き込む。したがって、新たに書き込むプログラムには大きさに制限がある。すなわち、自分自身を書き込んでくれるブートローダを消してしまうような大きなサイズのプログラムは書き込みできないのである。もし、そうなってしまうと書き込んでいる最中に書き込みを制御してくれるプログラムが消えてしまうからである。


まとめと今後の課題

 トラ技2007-8付録のdsPIC基板を用いて、動作テスト、通信テスト、ブートローダによるプログラム書き込みテストを無事行うことができた。これにより、dsPICへの任意のプログラム書き込みができることになった。今後は、独自プログラムを作成し動作させてみたい。


このページのトップヘ