レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

はじめてのPIC

2020年01月18日 | 電子工作

前回紹介した秋月電子のお楽しみ袋に入っていたPICですが、その内訳は以下の通りでした。

PIC16C712-20/P  x 10
PIC16C73B-04/SP x  1
PIC16F57-I/P    x  1
PIC16F648A-I/P  x  3
PIC16F819-I/P   x 15
PIC16F874A-I/P  x  2
PIC16F876A-I/SP x  5
PIC16F877-20/P  x  1

この中でPIC16C712とPIC16C73Bのように型番にCが付いている物はワンタイム書き込みタイプで、プログラムを一度しか書き込めないそうです。

元々PICを扱うつもりはなかったのですが、大量にあるので使ってみることにしました。
とりあえずは、



LCDとか、



ダイソー電卓を利用したキーパッドとかのドライバに仕立てて、ピン数が少ないATtiny13AやATtiny85の周辺デバイスにしたいと思います。

まずは開発環境の構築です。
ソフトウェアに関してはPICのメーカーからMPLAB X IDEという無料の開発環境環境とXC8という無料のコンパイラが入手できます。この辺りの情報はネットにたくさんあるので導入は簡単です。

問題なのはPICにプログラムを書き込むためのライターです。調べてみるとArduinoを利用したライターが幾つかあったので、手持ちの中で一番数の多いPIC16F819を使って試してみるこにしました。



書き込みの回路はArduinoをISPにしたときと大差なくそれほど難しくはなかったのですが、問題は書き込みスケッチの方でした。
探してみてもPIC16F819に対応したArduinoのスケッチはなかったので、PICならどれでも同じように書き込めるだろうと思い別の型番用のスケッチを使ってみました。でも、上手く書き込めません。別途入手したスケッチも試してみましたが、こちらも書き込み出来ません。

調べてみるとPICは型番によってプログラム書き込みモードにするときや、書き込みやフラッシュメモリ消去のときに使うコマンドなどに微妙な違いがあったりしてスケッチを少し修正しないとうまく動作しないようでした。

そこでPIC16F819のデータシートをじっくり眺めてみると、たしかにコマンドの一部が違っていました。試しにフラッシュメモリ読み出し部分を修正してみたのですが、5ビットのコマンドは6ビットにして送ったり、送受信データは14ビットにスタート・ストップビットを付けて16ビットで送ったりという感じで馴染みのない手順でデータを扱わなければならず、送受信のタイミングチャートを眺めながらスケッチを書いていくのは面倒でした。
最終的にはメモリ内容を読み出すことは出来たのですが、PICのコマンド全てを調べて必要に応じて修正していくのは手間がかかります。これを手持ちの別の型番のPICについても繰り返さないといけないと思うと、自分でスケッチを作ろうという気持ちが萎えました。
それにワンタイム書き込みタイプのPICでは書き込みの失敗は致命的になりそうなので、PICライターの自作は断念しました。

そこでこれ。





PICkit4。



PICのメーカーMicrochip社のPICライターです。事前にマニュアルをダウンロードして、手持ちのPIC全てに対応していることを確認できたので購入することにしました。秋月電子で5700円でした。
これでも安価な方らしいのですが、Arduinoと比べると初心者が導入するにはちょっと敷居が高いですね。Arduinoがいかに手軽に扱えるものだったのかがよく分かります。

ライターが手に入ったので、まずは基本のLチカです。

PICkitを使っての開発手順はネットにたくさんあります。今回特に参考にしたのは以下のサイトです。(PICkit3で説明されていますがPICkit4でもほぼ同じです。)

Windows環境の場合
http://toboli.hatenablog.com/archive/category/PIC

Ubuntuの場合
https://asukiaaa.blogspot.com/2017/12/ubuntupic16f1829l.html

PICkit4
https://wireless-network.net/pickit4/

最新のMPLAB X IDE v5.30の利用でWindows、Ubuntuどちらでも問題なく動作するのは確認しました。

Lチカに使用するPICは上記にもあげたPIC16F819です。PICkit4とPICの接続は上記サイトの通りです。
PICのMCLR端子(PIC16F819では4ピン)には10kΩの抵抗をはさんでVdd(ArduinoではVcc表記でしたね)につなぎプルアップします。これはArduinoのリセットピンと同じですね。LEDは1kΩの抵抗をはさんでRA2(PIC16F819では1ピン)につなぎました。
電源はPICkit4から取ります。

プログラムですが、上記サイトなどを参考に以下のようにしました。

newmain.c

プログラム中#pragma configの部分はPIC16F819用で、内容はPICによって少し異なります。詳細はインストールしたXC8コンパイラのdocsフォルダーにあるpic_chipinfo.htmlを参照して下さい。
クロックは内部クロック4MHzで動作させています。

このプログラムをコンパイルして動作させると、ちゃんとLチカ出来ました。



これでやっとPICを扱えます。



最新の画像もっと見る

コメントを投稿