Darkside(https対応しました) |
2018年8月18日(土) 20:56
STM32F4 では成功しているが、必要な機能に比べて大袈裟過ぎる。
ならば、PIC16F88 でI2Cは実用的だろうか?
これは、意外に多くの前例がある。特に、I2Cマスターとして動作させる場合はソフトウェアで簡単に出来る・・・ようだ。
ここで、少し簡単な計算をしてみる。
I2C標準には 100KHz と 400KHz がある。低速の 100KHz を使うとすると、1周期10μ秒。つまり、Hが5μ秒でLが5μ秒という波形をソフト生成せねばならない。
PIC16F88 は4クロックあたり1命令。20MHz動作だと5MIPSすなわち1命令あたり0.2μ秒。HとLそれぞれに25命令を使う余裕がある。8MHz動作でも、10命令ずつだ。
つまり、100KHz のソフトウェアI2Cであれば、8MHzでも充分に可能と判断できる。
400KHz だとHとLそれぞれ2.5命令となって無理っぽいが、100KHz では通信速度が遅いようなら16MHz動作にすれば良いだろう。HとLそれぞれ5命令ずつで、400KHz のクロックを生成できる。
そこで、dsPIC で使用したI2C接続LCDを持ち出した。これを接続できるPIC基板を作成し、動作試験してみよう。
PIC16F88 で問題になるのは、ソフトウェア作成の厄介さ。マクロが使い物にならないアセンブラなので、精神がガリガリ削られる。
コンパイラなんか使いものにならないし・・・と思っていたがI2Cの前例はみんなコンパイラーを使っている。そこで、試しにXC8を落として来た。
PicKit2 を発見したのだが、MPLAB X IDE 4 は対応していない。最近買った PicKit4 だと、PIC16F88 の方が対応していない。
MPLAB X IDE 2 を使うと、PicKit2 と PIC16F88 の両方が使える。しかし、そもそも PicKit2 と PIC16F88 は相性が悪く、書き込み失敗し易いようだ。
ここは MPLAB X IDE 4 でコンパイルだけ行い、でき上がったHEXファイルを秋月基板でPICに書き込むのが無難だろう。手間が掛かるが。
Cコンパイラーなんか論外だと思っていたが、想像以上にコードが小さい。PIC16F88 ってRAMは少ないが、プログラム領域はむしろ dsPIC よりでかいじゃないか!
if文や引き算や多倍長演算で疲弊せずに済むメリットが極めて大きいので、I2CついでにCコンパイラーの実用性も測るとしよう。
written by higashino [カメラ] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4