マグネットアクチュエータドライバ NO.2

[Previous] [Next] [Index]
PIC16F84A のプログラムを PIC12C509A に移植
 プログラムの移植は命令の違いを書き換えるだけで簡単に済むと思っていたがそうはいかなかった。 PIC12C509A 用に移植したプログラムを MPASM でコンパイルしてみたら山のようにエラーが出てしまった。

 エラー内容を確認するとそのほとんどがページ切替えに関するエラーメッセージのようである。両者の PIC とも 1K バイトのプログラムエリアがあるはず。マニュアルを見直したが間違いない。

 行数にして約 560 行と今までになく大きな(冗長なだけだの)ソースファイルになってはいる。しかし PIC16F84A では問題なくコンパイルできた。今回も小黒さんに助けを求めた。 PIC12C509A の場合はページを切替えないと 1K バイトのプログラムエリアを使うことができないということであった。ページをいちいち切替えながらプログラミングするのがかなり面倒なので 1 ページに収まるようにプログラミングしているという。なるほど、そういえば昔 MS-DOS のプログラミングでも EMS で苦労したっけ。

 せっかく 12 ステップの分解能で出来上がった前回のプログラムを何とか移植したいという思いから、 ページ切替えによるプログラミングを何とかして勉強しなければならない。小黒さんから何回かにわたってプログラミングする上での注意点とヒントをもらった。ページをまたぐプログラムはかなり面倒。切替えの方法についていろいろと試行錯誤を繰り返しながらシミュレーター上で何とか動くプログラムができた。

 プログラミングのシミュレート中に GPIO の GP4 と GP4 の出力がスペシャルファンクションレジスタの表示に反映されていないことに気づいた。

とプログラム中に記述してあるのにどうしてなのか悩んだ。MPLAB の Development Mode で Clock 設定にある Oscillator type で Internal RC を設定する必要があることが後でわかった。

 ここで紫外線消去のできる PIC に書き込んでテストできればいいのだが、前回テスト中に壊れてしまったので、 PIC12C509A にプログラムを書き込んでみた。今回は外付け部品がバイパスコンデンサとコイルのみ(回路図)なので 8 ピンソケットを使って空中配線し、受信機に接続して動作確認してみた。おおっ! PWM らしく動く。

 紫外線消去のできる PIC12C509A/JW を新たに調達したいが、それだけを通販で調達するのも面倒だ。壊れてしまった手持ちの PIC は書き込みツール上では正常に動作しているかのように振舞っているが実際に出力が出ない状況だった。念のためにもう一度試してみようと思い、紫外線消去に 10 分の時間をかけてみた。書き込みツールで確認したらちゃんと消去されている。次に今回プログラミングした HEX ファイルを書き込んでみた。勿論オッシレーターの校正値も一緒に。 8 ピンのソケットにセットしてテストしたところ今度はちゃんと出力されるようになった。

 内部 4MHz の発信周波数は校正値をセットしたものの PIC16F84A の時とは大幅にずれがある。手持ちの個体は校正値が 64 だったが、念のため 00 と FF を書き込んで試してみた。結果はどちらも目に見えた変化はなかった。何かプログラミングの方法が間違っているかもしれない。しかし PIC が復活したので今後の実験はやりやすくなった。紫外線による消去時間は十分にかける必要があるようだ。

 紫外線消去 PIC が復活したので、早速 2 ページにまたがるプログラムを見直ししながら何度か書き込みテストを繰り返してみた。確実に自分のものにできたわけではないが、上記 12 ステップの PWM もどきプログラムを 16 ステップで実現できようになった。これだけの分解能があれば十分実用レベルで使えそうだ。

 マグネットアクチュエータ搭載飛行機の製作も並行して進めているので、早速搭載する 800t 170Ω のコイルを取り付けた飛行機のラダーに繋いで動作テストを行ってみた。発信周波数の校正ができないためかニュートラルにずれはあるものの、左右各々 8 ステップの動作がきちんと確認できた。

 ここまでくれば後はフラットパッケージにプログラムを書き込めばいい。いよいよフラットパッケージアダプタの出番だ。


  • 紫外線消去には十分な時間をかける必要がある
  • PIC12C509A の 1K バイト空間をプログラムで使うにはページ切替えが必要
  • プログラム中にコンフィギュレーションビットの設定をしてもシミュレータに反映されない
    [Previous] [Next] [Index]
    2002/06/12