ちょっとTea Time!? PICの開発環境を更新しよう! 2021.10.12

C言語でPICを使いだしてほぼ10年が経ちます。その前はアセンブラをやろうとしたときがありましたが、すぐに挫折です。
そりゃ、C言語とはいえ高級言語に慣れた体にはアセンブラは耐えられません。
 で、つかっているコンパイラはCCS社のもの。メジャーなものはMicrochip社の純正と思いますが、
最初に読んだPICの教本で使っていたのがCCSなのでそれを使うことになりました。
すこし癖もありますが、ライブラリーも充実しているので意外と使いやすいと思います。
それに、コマンドコンパイラタイプのものだと、値段もそれほど高くありません。
 
PICのC言語は最初にこれを教本にしました。この中でCCS-Cを知りました。

PICの書き込み器はもっぱら秋月のPICKIT2です。最初のころは、秋月のAKI−PICプログラマーを
使っていましたが、RS232での通信なので、書き込みに結構時間がかかりました。そのため、
USBで使えるPICKIT2にすぐに移行しました。


長年これを愛用しています。秋月のPICKIT2です。ZIFもついているので便利です。

コンパイラーもライターも古いなあ〜
 コンパイラを最初に購入したのはPIC12F,16F用でいまから10年前。そして、容量の大きなPIC18F用は5年前に購入です。
でも、さすがに5年の間にはPICも色々なラインアップが増えてきます。とくに新しいPIC18Fでは64kW(128kByte)のものがあります。
以前にFESP5142でパラメトリックとグラフィックイコライザを同居させようとして32kW(64kB)では結構苦労しました。64kWあれば
余裕で入ったはずです。
 とにかく、今の古いコンパイラやライターでは、あたらしい大容量のPICに対応できません。すぐに大きなプログラムを組むことは
ないと思っていますが、今後、もうちょっと容量が必要になったときのことも考えてすこし開発環境を更新したほうがよさそうです。

ついでに半導体不足にも対応?

 コンパイラやライターを更新すれば、使えるPICの幅も広がります。
とくに、最近半導体不足のせいなのか秋月をみていても、PICの購入制限が厳しいです。ほぼすべてのPICに対して
購入制限がかかっています。「購入個数1個まで」とか書いてあると、もうそろそろ在庫が無くなるのだな〜という気がします。
それと、秋月とて型古のPICなんて、在庫がなくなればそれっきりでしょうから、いつまでも同じPICがあるとは思わないほうがよさそうです。

ピン数 PIC(秋月リスト) 用途など コンパイラ
PCM
PIC12,16用
2011年購入
v4.119
コンパイラ
PCH
PIC18用
2016年購入
v5.062
PICKIT2 〇使える
×使えない
8Pin PIC12F615(1kW,4MHz)
EEPROMなし
▲在庫小(1個制限)
MUTE基板などに使っています。
無くなったら代替品考えなくてはいけませんが、
PIC12F1822が最有力でしょう。
PIC12F1822(2kW,32MHZ)
どうやらPIC16F1827の親戚筋のようで、かなり強力です。
当面は秋月にも在庫ありそうです。
18Pin PIC16F819(2kW,8MHz)
▲在庫小(1個制限)
初期の電子ボリュームに使用していましたが、
いまはPIC16F1827に移行しています。
PIC16F1827(4kW、32MHz)
▲在庫危ない(50個制限)
18PinのPICはこれを主につかっていますが、
なくなったらどうしよう?18Pinはあまり代替品がありません。
今のうちに買っておくかな?
28Pin PIC16F886(8kW、8MHz)
★在庫切れ
初期のDAC基板によく使っていました。
いまはPIC16F1938に移行しています。
PIC16F1938(16kW、32MHz)
▲在庫危ない(45個制限)
そろそろ在庫が危なそうなので、PIC18Fへ移行したほうがよさそうです。
PIC18F25K22(16kW、64MHz)
◎まだ大丈夫?
まだ在庫はありそうだけど、容量が寂しい。
PIC18F26K22(32kW、64MHz)
▲在庫危ない(1個制限)
5Vも使えるし、容量的にはこれが28PINのスタンダードにしたかったけど、
在庫があやしい。
PIC18F26K20(32kW,64MHz)
5V不可
いまはこれを主につかっていますが、結構秋月の在庫が不安定。
3.3Vまでしかつかえないのも制約です。
PIC18F27Q43(64kW,64MHz)
5V対応

▲在庫危ない(15個制限)
最近商品リストに載りました。容量も大幅UPしているので
これを使いたいけどコンパイラーが対応していません。
× × ×
40PIN PIC16F887(8kW、8MHz)
▲在庫危ない(10個制限)
ジッタクリーナに使っていますが、これもPIC16F1939へ移行しています。
PIC18F46K22(32kW,64MHz)
▲在庫危ない(1個制限)
FESP5142に使っています。これも在庫危ないなあ〜。
また容量的にも32kWはかなり厳しい場合もあります。
PIC18F47K42(64kW,64MHz)
▲在庫危ない(69個制限)
上と型番が似ていたので使えると思っていましたが・・・・残念 × × ×
PIC18F47Q10(64kW,64MHz)
5V対応

▲在庫危ない(15個制限)
最近商品リストに載りました。
容量が大幅UPで64kWまで使えます。5Vまで使えるのがいいですが、
コンパイラーが対応していません。
× × ×

PICKIT3を動かそう!

まずは、ライターから更新です。最新のライターはPICKIT4ですが、すこし(かなり?)前にPICKIT3を買ったことがあるのを
思い出して、それを動かしてみることにしました。なんで、使わなかったのだろうかと考えましたが、おそらくZIFソケットが
なかったので、使う前に面倒になったのでしょう。買っただけ〜ですね。よくあることです(笑。
そのため、今回は本格的な更新のためZIFソケットのアダプターも作っておきました。

かなり前に購入したものですが、ついに日の目をみそうです。


ZIFのアダプタも作っておきました。

新しいCコンパイラーを購入しよう

CCSのCコンパイラは国内に代理店があるので、そこからも購入できますが、一番の安上りは
米国のCCS社のWEBショップからオンラインでの購入です。CD-ROM/DVD版もありますが、
$15ドル高くなるのと、なによりも送料が結構かかります。それにオンラインなら、次の日にも
ダウンロードキーを送ってきてくれます(一応、米国の営業時間内の対応なので、オンラインだからといって、
すぐに使えるわけではありませんでした)。

ちょっと失敗したのは、最近はすこし円安が進んでいるので購入価格がちょっとだけ高くなってしまいました。

さっそくPIC18F27Q43を動かしてみましょう!・・・あれ・・・動かない・・・・

さて、コンパイラもライターも揃ったことなので、さっそく新しいPIC18F27Q43を動かしてみます。
簡単なプログラムを作成して書き込みにかかりますが、何度やっても書き込み失敗のエラーがでてきます。

なんでだろう?

一応、デバイスリストにはPIC18F27Q43がでてくるので大丈夫だと思うのだけどな・・・。

一応、デバイスリストにはPIC18F27Q43があるので、動くと思っていましたが・・・・

折角、PICKIT3まで準備して、新しいコンパイラも購入したのにちょっと凹みます。
そこで、ちょっとネットを探ってみることにしました。
どうやら
PICKIT3はPIC18F27Q43に対応していない
ということのようです。ちょっとガックリです。
書き込むためにはPICKIT4が必要になるみたいです。
え〜さらに出費が必要なの・・・・どうしようかな・・・・
でも、乗りかかった船です。とりあえず、秋月には在庫がないようなので
マルツオンラインで購入しました。早くとどかないかな〜。

折角なのでPIC18F47K42を動かしてみる!

このPICは以前に間違えて買ったものです。32kWのPIC18F46K22がつかえたこともあって、
あまりよく確かめずに近い型番だから使えるだろうと思って64kWに容量に魅せられて買ったのですが、
コンパイラもPICKIT2も対応していませんでした。そのため放置していましたが、
今度買ったコンパイラとPICKIT3はどちらも対応していました。


PIC18F47K42は無事書き込みできて動作しました。

とりあえずは新しいPICが使えることが確認できたことで良しとしましょう。
まずはPICKIT4の到着待ちです。

新しいコンパイラは速くなったかな?・・・ガビーン・・・・・ 

コンパイラを新しくすることで、使えるPICを増やすことが一番の目的ですが、
実行コードも洗練されて速度も上がっていることが期待できます。
そこで、以前からつかっているPIC18K26K22をつかって速度比較を行ってみました。

ベンチマークにつかったのは、単純な浮動小数点(単精度)の割り算です。a=1.0; b=3.0;
としたときの c=a/b; の計算時間を測定してみました。ちなみに動作クロックは64MHzです。
結果は下記の通りです。最初は、少なくとも同等以上を想定していましたが、
なんと17%も遅くなっていました。

古いコンパイラ 今回購入したコンパイラ
PCHバージョン 5.062 5.105
計算時間(us) 63.8 75.1
(17%低下)

もうちょっと、色々なプログラムで評価してみる必要がありそうです。
まあ、浮動小数点なんてあまり使わないから遅くてもいいけど・・・・でも、
イコライザでは浮動小数点だけでなく、三角関数の計算もあるんだよな〜。

まあ、悩んでいないで色々と調べてみましょう!

PICKIT4到着 2021.10.13

PICKIT4が届きました。結構大きな箱でしたが、中に入っていたのは本体とUSBケーブルだけでした。
箱のサイズからCD-ROMや取説が入っていると思いましたが、何もなしです。
あ、あとシールが一枚入っていました。本体に貼るのかな?

マツルオンラインで注文したPICKIT4が届きました。デリバリー速いです。

動作は簡単です。いま接続してあるPICKIT3と入れ替えるだけです。USBを差し込んだら、
勝手にファームウエアをダウンロードしたようです。


これで動かしています。

動作確認を行ってみましたが、問題なくPIC18F27Q43にも書き込みできました。
書き込み速度ですが、いままでのPICKIT2やPICKIT3に比べると、かなり速くなっている感じです。

おそらく、PIC18F27Q43などの新しいPICは容量も増えているので書き込み速度を向上させる必要があり、
それで書き込みH/Wが変更されたので、古いPICKITでは対応できなかったのでしょう。

それほど書き込み速度を問題にしたことはないので、古いPICKITでも書き込めたら嬉しかったのにな〜。

コンパイラ最適化・・・・

新しいコンパイラをつかったら、すこし実行速度が遅くなっていてちょっと凹んでいましたが、
こんな書き込みをいただきました。



この10年間、コンパイラのオプションなんかつかったことなかったです(汗。 
なんせ購入しているのは一番安いコマンドラインコンパイラですが、ソースファイルを実行ファイルに
ドラッグ&ドロップするだけのお気楽使用でしたので、オプションを入れるときがありません。
で、コンパイラの取説みてみたら最適化が0-9で選択できるようです。

最適化はEWSのCコンパイラで、呪文のように”−02”って付けていたような気がします。
そういえば、昔の話ですが使うEWSによって、同じ解析条件でも出てくる答えが違うということがあったなあ〜。
どれが正しいかわからないので、違う3台のEWSで計算させて間違い探しなんかもやりました.
ただ、結果が異なるEWSが一番計算速度が速かったのが残念でしたが・・・・

さて、話を戻してPICのCコンパイラでの最適化の効果をしらべてみましょう。
単なる浮動小数点の計算だけでは、ライブラリーのアクセスだけだから最適化の効果
がわからないかもしれないので、すこしプログラムを組んでみました。

100個の整数(16bit)の最大値、最小値、平均値と、行列のX^2、XY、Y^2の総和を求める

というようなプログラムを組んでみました。

最適化にはコード最小化と、実行速度最大化があると思うので、最適化オプションによって
コードサイズと実行速度を調べます。新しいコンパイラでの調査結果は次の通りです.

新しいパージョンのコンパイラ(PIC18F27Q43,64MHz)
最適化レベル 生成コード
(Byte)
実行速度
(回/秒)
備考
設定なし 808 192.4 いつもはこれ
0 1022 163.3
1 1016 163.3
2 1016 163.3
3 1016 163.3
4 1016 163.3
5 1016 163.3
6 1012 163.9
7 1008 163.9
8 880 190.5
9 808 192.4


結果的には、何もオプションを指定しないとレベル9の最適化がかかるようで、生成コードがもっとも短くなり、
実行速度ももっとも速くなりました.最大で生成コードは-21%、実行速度で+18%になるようです.

でも、残念なことに、古いコンパイラでの生成コードは754byteでした. さらに7%も短いです.
実行速度もコードが短い分、速いだろうな〜(見たくないので調べません(笑))

.古いコンパイラの方が、生成コードも短いし実行速度も速いのは解せないな〜.
ひょっとして、型変換などを厳格にしているため、余分なコードが生成されているのかもしれません.
速度はすこし犠牲になるが、信頼性を高めたということかな?
まあ、とりあえずはそう思いましょう.

まとめ
 PICの開発環境を更新しました.これで、現状流通しているほぼすべてのPICに対応できるでしょう.
  CCS-Cコンパイラ PCH v5.105
  PICライター     PICKIT4

 PICKIT2とPICKIT4用のライターソフトは別なので同時実行が可能です.すなわち2個のPICの
 ICSP(In-circuit serial progamming) 接続ができます.
 ということで、RELAY ATTENUATORのマルチ化のソフト開発はマスター側とスレーブ側を
 同時にできるので、かなり効率がよくなりそうです.

(おしまい)

独り言---
 いま使えるPICはPIC12F,16F,18Fだけですが、さらにPIC24やdsPIC33も使えたらいいな〜.
 でも、そのためにもコンパイラを買わないといけないしな〜. とりあえず、用途が出てきたら考えよ〜.

使いやすく 2021.10.14

ZIFアダプターとPICKIT3,4を繋いで使うときは、ZIFにPIC用の電源を接続する必要があります。
その度に、電源とクリップで接続するのも面倒なのでバッテリーを持たせることにしました。
秋月で100円売っていた3.6Vのバッテリーパックを使います。
 充電した後の電圧は4.2Vくらいあるので、3.6V動作までのPICでは少々心配ですが、
データシートから絶対最大定格は5Vなので大丈夫でしょう。勿論PIC18F27Q43などは5.5V使用も
可能ですから全く問題ありません。ちなみに、PIC18F27Q43の絶対最大定格は6.5Vのようです。

ZIFアダプタにバッテリを抱かせることにしました。


組み立てて充電中です。

残念ながら8PinタイプのPICには対応していませんが、その場合はZIFもあるPICKIT2
を使います。それにしても8PinのPICってPIC12F以下しななくて、PIC16Fは2種類だけで
PIC18Fとかないいんすよね〜。大容量の8PinPICって需要ないのかな〜??

PIC18F27Q43あれこれ 2021.10.30

いままではPIC18F26K20やPIC18F26K22をつかっていましたがメモリー容量が32kWしかありませんが、
PICKIT4と新しいCコンパイラの導入で64KWのROM容量のあるPIC18F27Q43がつかえるようになりました。
これは、動作電圧は最大で5.5Vまで使えるのでPIC18F26K20とPIC18F26K22の代替にもできそうです。
さらに、PIC18F27Q43では色々な機能が拡張されてます。

1)8BitDACが搭載された

8bit分解能とはいえ、DACがあると色々とできそうです。ただDACは1CHだけで、使えるポートはA2あるいはB7だけです。
で、どのくらいのセットリングタイムがあるか調べてみました。単純な鋸波をだすだけのプログラムを作ってテストです。
結果としてセットリングタイムは10us程度を準備すればよさそうです。

セットリングタイム 出力波形
ほぼなし
かなり波形ががたがたします。そりゃセットリングタイム無視しちゃ
だめですね。
3uS
かなり綺麗になりましたが3usdでは少ないかな〜
10uS
このくらいになるとかなり綺麗です。セットリングタイムは10usくらい
設定した方がよさそうです。


レールtoレール出力のようです

8ビット分解能のDACの下位3ビットだけつかって出力させて、どのくらいゼロ電位まででるかを
調べてみましたが、ほぼゼロ電位が得られるようです。すなわちレールtoレールで動くということですね。

ほぼゼロ電位までの出力がでるようです。

2)ADCが12ビットになった

いままで使っていたPICのほとんどは10Bit分解能でしたが、PIC18F27Q43では12Bitに拡張されています。
ただ、懸念事項はいままでのソフトと互換性がなくなったりしないかという点です。
でも、色々と調べるとコンパイラでの宣言で

#device ADC=10

と宣言しておけば、12BitのADCであってもサブルーチンのリターン値は10Bitになるようにコンパイラが調整するようです。
そうであれば、いままでのソースを変更しなくて済みそうです。

ちなみに、12ビット分解能としてつかいたい場合は

#device ADC=12

とすればいいようです。

3)全ポートがプルアップできるようになった 2021.10.31

以前はBポートしかプルアップ設定ができませんでしたが、PIC18F27Q43では全てのポート(A,B,C,E)がプルアップ設定
できるようになっているようです. ということは、いままでスイッチを取り付ける時はプルアップ抵抗が不要となるように
Bポートになるようにしていましたが、このPICだたおどのポートを使ってもいいことになります. これは便利です.