2014年7月号
連載記事
ディジタルを楽しもう
JH1NRR 辻岡哲夫
(JL3YMC 構成員)
第3回 メモリキーヤを作る 1
1. メモリキーヤとは
モールス符号の定型文を記憶させ、電鍵の操作なしに、ボタン操作だけで記憶させた定型文を送信する装置をメモリキーヤ(Memory Keyer)といいます。特に、コンテストでは、何度も同じ文章を打電しますので、1台あると重宝します。今回からは、PICを使ったメモリキーヤを製作します。
2. MCUの選択
最近は、安価なワンチップマイコン(マイクロコントローラ)や組み込み用CPUボードを利用して、比較的簡単にスタンドアローン装置を製作できるようになりました。かなり以前は、CPU、RAM、ROM、I/Oが別々のICになっていて、アドレスバス、データバスの多量の配線が必要でした。しかし、ワンチップマイコンの普及によって、それらが1個のIC(ワンチップ)にまとめられ、回路規模が劇的に小さくなりました。また、ワンチップマイコンと周辺回路が搭載された組み込み用CPUボードを使うと、やや高価になるものの、更に高度なことができるようになります。本記事では、広義の意味で、これらを、MCU(マイクロコントローラユニット)と呼ぶことにします。
現在、入手が容易なホビー向けのMCUとして、PIC、AVR、Arduino、mbedなどがあります。それぞれの特徴を以下に整理します。
- PIC: マイクロチップテクノロジー社のワンチップマイコンで、8ビットCPUを搭載したPIC12(8pin)やPIC16,PIC18(18,28,40pin~)、16ビットで超低電力化に適したPIC24(28pin~)、32ビットのMIPSアーキティクチャが採用されたPIC32(28pin~)などがあります。チップ単価は200~1500円程度と安価です。共用ピンが多く、信号のピン配置に制約があります。設計のための参考資料は大変豊富です。PICkit3やICD3を使ってプログラムします。(※ CPUのビット数は、命令幅ではなくレジスタ幅で示しています。)
- AVR: Atmel社のワンチップマイコンで、メモリ容量が大きいことと高速であること(1クロックで1命令を実行できる)が特徴です。ただし、PIC32MXが出回りだした頃から、性能差はなくなっているように思います。PICと比較して、ICの入手性がやや悪く、資料や書籍が少ないというハンディがあります。AVRISPを使ってプログラムします。
- Arduino: AVRとUSBインタフェースが搭載されたボードです。あらかじめブートローダが書かれているので、プログラマが不要で、USB接続だけでプログラムできます。開発しやすいプログラミング環境が秀逸で、非常に少ない行数で高度なプログラミングができます。学生フレンドリーなMCUです。ピン間隔が特殊で(1/10インチピッチではない箇所がある)、専用のユニバーサル基板が必要になります。価格は3,000円程度ですが、トラ技Jr. 2014年5月・6月号で「マイコン基板Arduinoを1,000円で手作り」という記事が紹介されました。
- mbed: NXP社のLPC1768という96MHzの高性能プロセッサが搭載されたボードです。ネットワーク経由でプログラム開発をする必要があります。開発環境は強力で、Arduinoと双璧かも知れません。価格は5,500円程度です。
- Raspberry Pi(ラズベリーパイ): 700MHzのARMプロセッサが搭載された組み込みLinuxボードで、Model Bでは、100MHz Ethernetの口を備えています。ネットワーク接続が必要な場合は、非常に有力な候補となります(XBee Wi-Fiの出現で、差は埋まりつつあります)。消費電流が700mA(5V)である点が難点です。価格は4,500円程度です。トランジスタ技術2014年7月号で特集が組まれています。
3. PICについて
PICは、コストパフォーマンスに優れた組み込み用途向けのワンチップマイコンです。本記事では、PICを使って製作を進めます。PICは上位のものでは「全部入り」と呼べるほど多くの機能を備えています。基本となるDigital I/Oの他、アナログ入力(A/D変換入力)、SPI、I2C、UART、USBなどのインタフェースで周辺回路と接続できます。この他、TIMERやPWM変調などの機能を備えています。
PICには、PIC12、PIC16、PIC18、PIC24、PIC32の各シリーズがありますが、シリアル通信(UART)とSPIを利用することを考えますと、PIC18、PIC24、PIC32を選択するのが良いでしょう。PIC24とPIC32は、ピン数が多く、リマッパブルピン(Remappable Pins)の設定が複雑ですので、今回は、PIC18F2550を使うことにします。価格差が無ければ、ピンコンパチブルなPIC18F2553を選択すると良いでしょう。A/D変換器が10bit(値の範囲 0~1023)から12bit(値の範囲 0~4095)に高精度化されています。
下図は、PIC18F2550のピン配置です。ほとんどのピンが共用ピンとなっています。共用ピンは、どれか一つの機能でしか使えません。例えば、2番ピンは、アナログ入力AN0として使用すると、Digital I/OのRA0としては使えません。どの機能が有効なのかはレジスタの設定値で決まり、プログラムの冒頭に初期設定を書いておきます。
下の写真は、実際のPICの例です。ホビー用途では、DIPパッケージが使いやすいでしょう。変換基板を使えば、TQFP44、TQFP64、TQFP80の多ピン数のPICの利用も可能です。ICの型番が同じ場合は内部のコアは共通であり、ピン数が少ないパッケージでは一部のピンが外に配線されていないだけとなっています。
もし、将来的に、P板COMなどのPCB業者にプリント基板製造やはんだ付け実装を注文する場合は、開発時はDIP(または、TQFP+変換基板)パッケージのPICとユニバーサル基板を使って試作し、動作確認を終えてから、TQFPやQFNパッケージに変更して小型化を図ると良いでしょう。
左は、PIC18F4550(40pin)、PIC18F2550(28pin)、PIC16F819(18pin)。右は、PIC32MX250(TQFP44、0.65mmピッチ)、PIC32MX664(TQFP64、0.5mmピッチ)。
4. PICのプログラマについて
PICのプログラマとしては、PICkit3やICD3などがあります。下の写真はPICkit3で、8,000円程度で販売されています。商用品ではPICkit3は非推奨となっていますが、ホビー用途ではPICkit3で十分です。シリアル番号の直前にリビジョン番号が書かれています。現時点の最新版は「R7」です。開発用プログラム(MPLAB、MPLAB X)は無料で提供されています。また、C言語(C18、XC8など)は無料で使えるバージョンが存在します。
PICにプログラムを書き込む(プログラムする)には、昔のEEPROMライタのように、ゼロプレッシャソケットにICを装着して書き込む方法と、PICkit3やICD3をターゲットコネクタ(Target Connector)に接続してオンボードでプログラムする方法があります。前者が手軽ですが、プログラムの書き換え頻度が多い開発・デバッグにおいては後者の方法が良いでしょう。なお、ボードごとに、ターゲットコネクタを配線しておく手間と基板スペースが必要になります。
自作したゼロプレッシャソケットのアダプタです。これを使うとターゲットコネクタが不要になり省スペース化が図れます。抜き差しのとき、ICの足を痛めないように注意して下さい。
PICkit3に付属の取扱説明書(英文)は必読です。結構、重要なことが書かれています。例えば、PGC/PGDはPICkit3の内部でプルダウンされているので、プルアップしている回路には使えないことや、電源のパスコンは100μFを超えてはいけないこと(例えば、220μFはダメということです)などです。「Recommended Settings」も読んで指示に従って下さい。上のアダプタの配線図も載っています。
5. 基本回路の製作
まず、基本回路部分を製作し、動作確認をします。動作確認が終わったら、メモリキーヤの周辺回路を追加していきます。基本回路部分の部品リストと回路図を以下に示します。
- プリント基板 ICB-504 ※他のものでも良い
- PIC18F2550
- 28pin ICソケット 1個
- セラロック 20MHz 1個
- 電解コンデンサ 100μF 1個
- 積層セラミックコンデンサ 0.01μF 1個
- LED 1個
- 抵抗 390Ω 1本
- 抵抗 10kΩ 1本
- 6pin L型端子 1個 ※長い端子を切って使うと良いでしょう。例えば、RSコンポーネンツ 品番674-2321など。
- スズメッキ線 0.5mm径など
- ラッピングワイヤー R30Y-1000など
部品配置の例(TOP VIEW)
配線の例(BOTTOM VIEW)
下の部分に周辺回路を追加予定ですので、上に詰めて実装しています。
5. テストプログラムの書き込みと動作確認
PICの最新の開発環境ソフトウェアは「MPLAB X」ですが、やや不安定ですので、今回は「MPLAB」を使います。MPLABは、PICkit3に同梱されているCD-ROMに入っていますが、Webからダウンロードしてインストールすることもできます。ダウンロード手順は以下の通りです(2014年6月末時点の情報です)。
- Microchipのホームページ( http://www.microchip.com/ )にアクセスして下さい。
- 上部のメニューから「設計サポート」にマウスオーバして「開発ツール」をクリックします。
- ページの右下に「Latest Software Releases」の枠があり、その中の「Legacy Software」をクリックします。
- Dev Tools Partsのページが表示されますので、「MPLAB IDE v8.92」をクリックして、インストールファイルをダウンロードして下さい。
- ZIPファイルを解凍して、インストールします。
インストールが終わったら、MPLABを起動します。それでは、LEDを点滅させるテストプログラムを書き込んでみましょう。「File」→「New」(またはCTRL-N)で新規ファイルを作成します。今回は、練習としてアセンブリ言語(機械語)を使います。ここにあるテストプログラムを開いて、先ほど開いた新規ファイルにコピーペーストして下さい。続いて、ファイル名をつけて保存します。このとき、拡張子を「.ASM」にすることと、ファイルを保存する場所のパス名に日本語が含まれないこととに気を付けて下さい。ファイル名は「BLINKLED.ASM」でいいでしょう。ドライブ名(例 C:)から保存場所のフォルダまでの途中に日本語のフォルダが1箇所でも含まれていると、うまくコンパイルできないことがありますので、要注意です。
続いて、PICの型番を指定します。「Configure」→「Select Device...」でポップアップを開き、「Device」で「PIC18F2550」と入力し、「OK」を押して下さい。
それでは、アセンブルしてみます。「BLINKLED.ASM」がフォーカスされている(選択されている)状態であることを確認し、「Project」→「Quickbuild BLINKLED.ASM」を実行します。すると、「Output」のウィンドウが開いてアセンブルが開始されます。最後に「BUILD SUCCEEDED」と表示されていれば成功です。エラーの場合は、ミスを修正して、再度、Quickbuildを実行します。
さて、いよいよ書き込んでみます。PICkit3をPCにUSB接続し、「Programmer」→「Select Programmer」→「PICkit3」を選択します。今回は、電池を使わずに、電源供給をPICkit3から行うことにします。「Programmer」→「Settings...」を選択し、「PICkit 3 Settings」ポップアップを開きます。「Power」タブに切り替えると、「Power target circuit from PICkit 3」というチェックボックスがありますので、チェックを入れて下さい。「Voltage」は5Vのままで大丈夫です。「OK」を押すと、「5Vが加わると、3.3VのICは壊れることがあります」と警告されます。今回は、3.3Vデバイスを使っていませんので「OK」を押します。もし、3.3Vデバイスを使っている場合は、先の画面の「Voltage」が約3.3Vになっていることを確認してから、「OK」を押して下さい。このとき、PICkit3の先端に製作回路を接続していなければ「Target Device IDが0です」という警告が表示されますが、無視します。ここまでの設定操作は、1回だけ実行すれば大丈夫です。
PICkit3を、製作した回路の6pin Target Connectorに接続します。間違ってずらさないように注意して下さい。接続が終わったら「Programmer」→「Program」を実行します。すぐにプログラムが始まって、完了直後から、LEDが点滅し始めれば成功です。
PICkit3側の端子から5Vが出力されています。ずれないように慎重に取り付けて下さい。
PICを初めて使う方にもわかりやすいように書かせていただきました。次回は、今回製作した基本回路に周辺回路を追加して、メモリキーヤを完成させます。