Arduino UNO R4 MINIMAやArduino DUEを改造した理由 

 

 以前、Arduino UNO R4 MINIMAボードやArduino DUEボードを改造した記事を書いた。

読んでいないという人は、そちらから読んでくれるとありがたい。

 

Arduino UNO R4 MINIMA改造計画のことの発端は、ここから。

 

Arduino DUE改造計画のことの発端は、ここから。

 

 

 改造した理由は、マイコンの全く使っていない端子がもったいないから、ということになっているが、実はそうではない。

本当の理由は、連続した16ビット分の端子が欲しかったから。

何の為かと言うと、これだ。

 

 

4インチ 800x480ピクセル IPS液晶ディスプレイ For Mega2560 だっ。

制御ICは NT35510。 今までさんざんこねくり回した2.4インチの液晶ディスプレイでは制御ICが不明だったので最初は苦労したが、今回のディスプレイは買うときにすでに明記されていたので付属品が無くても情報はネットからダウンロードすればいいだけだった。 ありがたい。

そして、この液晶ディスプレイの制御は16ビットの信号線で行うことができる。 基板上の設定を変えることで8ビット仕様にすることも可。 だがここはあえて16ビットを使っていきたい。

 

 ちなみに、この液晶ディスプレイは、Arduino MEGA2560と一緒に使う事を前提に設計されている。 が、MEGAは8ビットマイコンを使っているので、16ビットの制御はちょっと苦手なのよね。 やはりここは32ビットマイコンを搭載したヤツらでこねくり回したいよね。

というわけで、このディスプレイをArduino UNO R4やDUEで使ってみようというのが今回の趣旨だ。

 

 今までのILI9341制御ICの液晶ディスプレイで、どうやったら最速に描画できるのかは理解してくれていることと思う。

もし、わからん、って人がいたら、過去記事を読んでもらいたい。

 

 

 

これらの記事の中でも書いてあるが、8ビット連続した端子を使う事が高速化のカギであった。

では、今回の液晶ディスプレイで高速に表示させるには、とうぜん16ビット連続した端子があるのが望ましい。

そこで、マイコンの各端子がどのように使われているか確認してみよう。

そのことを書いている記事がこれらになる。

 

 

 

 なんか今回の記事はリンク集みたいになってしまっているが・・・

まぁいいや。 この中の端子機能の一覧表で、水色のマスが横に16個連続している所を使えばいいのだが・・・無い。 残念ながら無い。 I/Oポートの鬼のようなArduino DUEでさえ無いのだよ。

MINIMAはしょうがない。 32ビットマイコンとはいえ、制御用のレジスタは16ビットずつ使うようになっているのでね。 それに端子の数もそれほど多くないし。

DUEは32ビットレジスタなので期待したのだが・・・残念な結果に。

 

 16ビットに一番近い所はというと、DUEのPIOAの6ビット目から20ビット目までの連続15ビット。 惜しいあと1ビットなのに。

何が16ビットを阻んでいるかというと、5ビット目はオープン端子で何も繋がっていない。 21ビット目はTX LEDの制御用端子。

 

 そこで私キャッスルは考えた。「このTX LEDを制御している端子は特に重要な役目を持っているわけではないので、このLEDのカソードに直接ワイヤーをはんだ付けして無理やりI/Oポートにすればいいのでは。」と。 そうすることによって、PIOAの6ビット目から24ビット目までの19ビットが連続して使えることに。 なんならピンのオスメスが逆だけど、SPI用のポートも使えば29ビット目までの連続24ビットが使用可能に。

つまりだ、TX LEDのカソードから信号を取り出すだけでかなり使い勝手がよくなる、ということだ。

それをやったのがこの写真。

 

 これを活用することで液晶ディスプレイの描画速度は爆速になったのはいうまでもない。

これで満足して終わっていればよかったものの、このやり方ではある問題が発生した。 それは、PIOAの8ビット目と9ビット目に割り当てられてるポートが、デジタルポートの0と1なのだ。 Arduinoを長く使っている人はすぐにわかるだろう。 そう、この二つのデジタルポートはパソコンと繋げる際のシリアルインターフェイスとしても使っていて、これらをI/Oポートとして使ってしまうと、シリアルモニターが使えなくなってしまうのだ。 それはデバッグする時に不便よね。

 

 じゃあデジタルポートの0と1を避ければいいじゃん、ってなるがそうすると今度はSPI通信インターフェースをI/Oポートとして使わなければならなくなる。 もしかするとディスプレイ表示とSPI通信を同時に使いたくなるかもしれない。 というか、SDカードやタッチパネルの制御はSPIを使っている。 なのでできるだけ特別な機能があるポートは避けたいところ。

 

 じゃあじゃあどうすればいいんだ、ってことになるのだが、他に16ビットを連続させるには、マイコンのオープン端子を使う他ない。 つまり、どこにも繋がっていないマイコンの足に直接ワイヤーをはんだ付けしてI/Oポート化するってことだ。 上記リンク先の端子機能一覧で、ピンク色で塗られたマスがそうだ。

 最低でも2つはオープン端子からの信号が必要になる。「それだったら全部ヤッちゃえばいいじゃん。」 で、今に至るわけだ。

 今ではピンクのマスと赤字じゃない緑のマスを全ての端子をI/Oポート化しているので、何ヶ所かで16ビット連続している。 PIOCの0ビット目がEEPROM消去機能を持っているのが目の上のタンコブだが、その後ろは30ビットが連続している。 このあたりを使うのが無難じゃなかろうか。

 

 では次に、Arduino UNO R4 MINIMAではどうだろうか。

こちらもピンクのマスと赤字以外の緑のマスの端子は改造してI/Oポート化しているのだが、残念ながら16ビット連続して使えるところはない。 というか、そもそも物理的に16ビットが連続しているレジスタが無い。 なんちゅー設計のマイコンなんだ。

妥協して、P1の0~13ビット目とP0の14・15ビット目を使う方法だが、これだとSPI通信インターフェースとダダ被りしている。

 もしこの液晶ディスプレイをArduino UNO R4で使いたかったら、8ビットパラレル通信モードにして使うのがいいかもしれない。

MINIMAを改造した意味なくなるけど・・・。