PIC16F84A はすばらしい

[Previous] [Next] [Index]
 PIC12C509A でとりあえずプログラムが動いたのでほっとした。何とか動いたというレベルなのでまだまだこれからである。ところがいろいろ調べていくうちに PIC16F84A なら何度もプログラムの書きなおしができるということがわかった。 EEPROM というらしい。前にも書いたが水野さんに作ってもらった自動バッテリ切り替え装置にも使われている。とわかればプログラミングの勉強にはこの PIC16F84A おいてほかにない(おいおい決めつけていいのか)。

 ということで、次なるプログラムの題材を自動バッテリ切り替え装置にした。しかも水野さんが作ってくれたものをいきなりグレードアップしようという試みである。

 どうしてもグレードアップしたい理由がある。現在の仕様は、タイマが 30 分に固定されている。もっともニッカド容量が 500mAh の電池を多用する電動飛行機では、通常 20 分もあれば充電が完了してしまうので 30 分のタイマは適切なセッティングなのだ。 6 組のバッテリをセットできるようになっているので放っておいても述べ 3 時間ほどで充電ができてしまう。それはそれでいいのだが、最近 2400mAh のニッカドバッテリを多く使うようになってきた。この電池は充電に 35 分近くかかる。現在 6 組のバッテリを持っているので、できればこのバッテリも自動バッテリ切り替え装置で充電したいというのがその理由である。

 しばらく自動バッテリ切り替え装置を眺めているうちに妙案を思いついた。 PIC16F84A に外付けされている発信回路に 10MHz のセラロックが使われている。そうだ、このセラロックを変更すればタイマーを変更できるはずだ。早速セラロックの差し替えができるように 3 ピンのソケットを取り付け、何種類か調達したセラロックの中から 6MHz のものをセットしてみた。こんな風にである。10MHz / 6MHz x 30min = 50min と計算どおり 50 分タイマーに簡単に変更できた。我ながら賢い知恵が働いたものである。

 実用上は上記の方法でほぼ解決したわけだが、これではプログラミングの勉強にならない。そこで 10 分単位で切り替えられるタイマーを考えてみた。

 たまたま SCSI の外付け CD-R ドライブを PC 本体に内蔵したときに余った電源とケースがあり、 ID 設定用のサムホイールスイッチ(デジタルスイッチ)がそのケースについているのを見つけた。 3 ビットの切り替えができる。つまり 0 から 7 までの切り替えができるのである。これは使えそうだ。

 1 から 7 までの数値を 10 倍すれば 10 分から 70 分までのタイマーが 10 分刻みでセットできるはずだ。ということで早速 PIC16F84A における初めてのプログラミングを開始した。

 プログラムが何度も書き直せるという安心感は実に大きい。しかも 380 円と安価だ。実際にプログラムを書くにあたり、ネット上でのさまざまなソースの公開と解説も多く、手元に関連書籍はないものの PIC12C509A のときよりもかなり楽にプログラムを書くことができた。

 書いたプログラムがうまく動かなくて何度も書き直したが、 35 ある命令のごく一部を使って自分の考えていた仕様を比較的簡単に実現することができた。

 4 サイクル 1 命令で実行されることが理解でき、 4MHz のクロックで動作させれば 1 命令が 1μsec で実行されるのでタイマ計算も楽だと思い、 4MHz のセラロックを使うことにした。

 デバッグでは秒単位の時間でも途方もなく時間がかかってしまうので、短い時間に置き換えてデバッグした。スイッチが ON か OFF かによる条件分岐も Modify 機能でその都度分岐条件を設定してシミュレーションできることを知った。つまり今回のタイマーセットをこの Modify 機能を使ってソフト上で自由に設定できてしまうのだ。 Program Memory も Register も Special Function Register も Watch できる。ストップウオッチ機能もとても便利だ。

 プログラムのときにバンク切り替えが必要なことも学んだ。変数として使えるレジスタのアドレスは 0CH - 2FH までの 36 個だ。スタックは 8 段、 PIC12C509A では 2 段だ。

 初心者なので見せるのも恥ずかしいが、これが PIC16F84A で初めて作ったプログラムである。そのプログラムを書き込んだ PIC を装着し、4MHz セラロックをセットしてサムホイールスイッチを取り付けて改造したのがこちら。サムホイールスイッチは表面から見るとこんな感じだ。基板裏側にはサムホイールスイッチから RA0、 RA1、 RA2 への配線とグランドへの配線、それにプルアップ抵抗 10KΩ 3 本を追加してある。コンフィグレーションビットは PIC ライターで書き込むときに設定した。

 水野さんに作ってもらったものだが、グレードアップのため自らプログラミングした PIC を搭載した実用機第 1 号である。初めてのプログラミングが成功して大満足。途中 PIC を反対向きに差し込んでしまったり、ライタに反対向きに差し込んで書き込みをしたりしたが壊れなかった。これは実際に 7 セル 2400mAh のバッテリを 40 分にタイマセットして充電しているところである。

   EEPROM はプログラムミスを犯しやすい初心者にとって、何回も書き直しができるので特にありがたい。 PIC12C509A も同じように書き直しができたらいいと思うのは私だけだろうか?

 窓付きの紫外線消去できるタイプがあるようだが消去に結構時間がかかるようだし値段も高い。ところで紫外線消去できる PIC も、 1 度しか書き込みのできないワンタイムプログラマブル PIC も中身は同じ物だと知って驚いた。後者の PIC も消去可能だという。 X 線で消去するそうだ。まあ一般人には無縁だが...。小黒さんにこの話をしたら知っていて、電子レンジで消せないかなぁといっていた。誰か試した人がいたら教えてほしい。


  • PIC16F84A が何度もプログラムを書きなおせるのを知った。
  • PIC16F84A による初めてのタイマ操作プログラミングが成功。
  • 汎用レジスタは 0CH - 2FH までの 36 が使用できることを知った。
  • 統合環境 MPLAB でシミュレーションの仕方を習得。
    [Previous] [Next] [Index]
    2002/05/06
    2003/12/17 プログラムソースを html 形式に書き直したときに転記ミスがあったのを訂正