PIC32MM0064GPL028 + SSD1306(GM009605)

参考
2017/11/15「Arduino NanoでGM009605の動作テストをする
2017/11/16「PIC24FJ64GB002 + SSD1306(GM009605)
2017/11/21「PIC32MX470F512H + SSD1306(GM009605)
2017/11/28「ESP8266 + SSD1306(GM009605)

なぜかこのモジュールが好きなようだ。
I2C接続なので、初期化さえ出来るようになればあとは簡単だからってのもある。

今回はPIC32MM0064GPL028とのコンビだが、今までとちょっと違うのは、このPICにはI2Cが無いということ。
MCCが吐くコードにおんぶにだっこで楽してきたので、久しぶりにBit BangでI2Cというのも楽しそうだ。

Bit BangのI2Cはだいぶ前にやったので、それを引っ張り出してきてやろうと思ったのだが…。
別件でPIC32MMについて見ていて、「I2C無いんだよねえ。」「でも、Microchipのサンプルコードがあるよ。」てな話を聞きつけた。
http://www.embeddedcodesource.com/codesnippet/i2c-bit-bang-code-for-pic32mm-devices
本家のサンプルならもらって来てみるかと思って、もらってきた。
一部、ASMで書いてある。
ASMは理解できんなあ。
同じことを書いてる人がいて、そこに「んじゃあ、おいらのコードあげる。」って言ってる人がいた。
https://www.microchip.com/forums/m1013083.aspx
せっかくなのでいただいた。

というような経緯で、また、今回も、人様のコードを拝借することになった。
根性ねえなあ。
上のPIC24のときのコードのうち、I2Cとのデータのやり取りの部分だけを書き換えて、他はそのままのコードで作ったら一発で動いてしまった。

具体的には以下をもらってきたコードに合わせた。
[crayon-6717483d55ae7915338101/]
以下のコードは使ってないので変更してない。
[crayon-6717483d55af3983741785/]
getはいいにしても、Initは必要そうだよなあ。
あとは、使うピンとクロックに合わせてHardwareProfile.hを以下のように作った。
[crayon-6717483d55af5592456193/]
ロジアナで眺めてみても、問題なさそうだ。

ただ、そのままだとクロックがえらく遅い。

私の勘違いでなければ1.3kHzとかなので、待ちを作っている部分を変更してみた。

83.2kHzになった。

追記(2018/07/08)
その後、件のASMを眺めていたら何となく必要な設定については読めたので導入してみた。
[crayon-6717483d55af7221452112/]
を使うように書き換え、Main()に
[crayon-6717483d55afb132238224/]
を追加しただけでそのまま動いた。
また、
[crayon-6717483d55afd792009411/]
のように書き換えただけで転送速度も速くなった。
こうするとクロックも500kHzを超えた。


ちなみに、この画像はBlenderで作った3Dの30枚のアニメーション画像だ。
128×64ピクセルの2値画像に変換したものを順に表示している。
30枚一巡するのに0.56秒かかっているので約53fpsとなる。

表示するデータについては以下で
PIC32MM0064GPL028 + SSD1306(GM009605) で表示させるアニメーションの準備
PIC32MM0064GPL028 関連記事一覧