ArduinoでグラフィックLCDを動かす(AQM1248A編)ArduinoでグラフィックLCDを動かす(AQM1248A編)(4)このページをスマートフォンなどでご覧になる場合は、画面を横長にする方が読みやすくなる事があります。図18の間違いを訂正。Unoでは図12と図13が電気的に同じ結線になるこ事を説明。3-6.5VのArduinoと接続する方法I/O電圧が5VのArduinoの場合は、AQM1248Aとの間に、5Vのデジタル信号(論理信号)を3.3Vのデジタル信号に変換する、レベル変換回路を挿入する必要があります。ここでは、抵抗分圧方式の簡易的なレベル変換回路と、レベル変換用のICを用いたレベル変換回路の2種類を2種類を紹介します。2種類の抵抗を組み合わせるだけの簡易な回路で、信号レベルの変換ができる。(抵抗8本)消費電流が大きい。(高速の信号を扱えない)5V→3.3Vのレベル変換回路を入れると、3.3VのArduinoでは動作しなくなる。(IC1個とパスコン1個)消費電流が少ない。高速の信号をレベル変換できる。5V→3.3Vのレベル変換回路を入れた状態で、5VのArduinoでも、3.3VのArduinoでも接続ができる。レベル変換用ICを用意する必要がある。それでは、それぞれの方式のレベル変換回路を使って、AQM1248Aを5VのArduinoに接続する方法について、説明します。3-6-1.抵抗分圧方式のレベル変換回路を使う方法まず、抵抗分圧方式のレベル変換回路を使う方法を説明します。図9、抵抗分圧回路の原理図この回路は2つの抵抗からなりますが、左の端子V1を入力すると、右の端子に、V2が出力されます。出力電圧V2は、次の式で求まります。(1)ここで、抵抗値をR1=510[Ω]、R2=1000[Ω](1[kΩ])とすると、V2≒0.663V1となります。この時、V1=5[V]とするとV2≒3.31[V]となり、出力がHの状態の5Vの論理回路を図9の入力端子につなぐと、出力端子から3.31[V]の出力が出る事が分かります。V1=0[V]の場合はV2=0[V]となり、出力がLの0Vの状態の論理回路を図9の入力端子につなぐと、出力端子から0[V]の出力が出る事が分かります。以上の事から、図10の様に、510Ωの抵抗と1kΩの抵抗を用いて分圧回路を構成すると、5V→3.3Vのレベル変換回路が構成できる事が分かります。図10、抵抗分圧型の5V→3.3Vのレベル変換回路なお、式(1)を見て分かるように、V1の係数の分子(R2)は分母(R1+R2)よりも必ず小さくなります。よって、このレベル変換回路は、高い電圧を下げる用途にしか使えません。この記事では510Ωと1kΩの抵抗を使いましたが、R1:R2=0.515:1がおおむね成立していれば、他の抵抗値でもうまく動作します。いえ、極端に小さい抵抗値(例:5.1Ωと10Ω)や極端に大きな抵抗値(例:510kΩと1MΩ)にするのは良くありません。(コラム「抵抗分圧型レベル変換回路はなぜ消費電流が大きく、動作速度が遅いのか」を参照)電子工作をある程度続けていると、部品箱に余った抵抗が残っているでしょうから、それらを使って、簡易型のレベル変換回路を作れます。比が0.515:1の抵抗の組み合わせを見つけられなくても、同じ抵抗値の抵抗が3本あれば、図11の様に5V→3.3Vのレベル変換回路を作れます。図11、同じ抵抗値の抵抗を組み合わせて作る、5V→3.3Vのレベル変換回路ただし、この回路はレベル変換ICを使ったレベル変換回路より消費電流が多く、動作速度も遅いため、レベル変換用のICが入手できる場合は、そちらを使う事をお勧めします。図10のレベル変換回路を利用して、AQM1246Aを5VのArduinoに接続し、ハードウェアSPIを用いる場合は、図12の様に配線します。この場合、動作テスト用のスケッチは、前のページのリスト1となります。1.0.X、1.6.Xおよび1.7.Xで動作します。Mega2560を用いて、図12の配線をした場合の写真を、それぞれ写真11および写真12に示します。図10のレベル変換回路を利用して、AQM1246Aを5VのArduinoに接続し、ソフトウェアSPIを用いる場合は、図13の様に配線します。この場合、動作テスト用のスケッチは、前のページのリスト2となります。1.0.X、1.6.Xおよび1.7.Xで動作します。Mega2560を用いて、図13の配線をした場合の写真を、それぞれ写真13および写真14に示します。Unoの場合は、11番端子とSPI-4端子、および13番端子とSPI-3端子が、内部でつながっていますので、図12と図13は、電気的に等価な結線になります。よって、ハードウェアSPIとソフトウェアSPIで配線のつなぎ方を変える必要はありません。【コラム】抵抗分圧型レベル変換回路はなぜ消費電流が大きく、動作速度が遅いのか「とにかくAQM1248Aを5VのArduinoで動かしてみたい」という人は、図12や図13の通りに配線をすれば、うまく動作します。「自分で抵抗値を変更して、回路をアレンジしたい」という方もいらっしゃるでしょうから、もう少し詳しい理論的な説明をしておきます。理論的な話に興味がなければ、このコラムを読まなくても問題ありません。抵抗分圧型レベル変換回路は、ICを使ったレベル変換回路と比較した場合、消費電流や動作速度の点で劣っている事が、このコラムを読むと分かるでしょう。抵抗分圧型レベル変換回路の動作原理は、中学校で習うオームの法則が分かっていれば理解できる簡単なものですが、きちんと設計したいなら、意外とやっかいである事が理解できるでしょう。抵抗分圧型レベル変換回路は消費電力が大きいと表4に書きましたが、その理由について考えてみます。図14の様に、510Ωと1kΩの抵抗でできた抵抗分圧回路において、入力端子に電圧V1を加えたときの電流Iを考えます。図14、抵抗分圧回路に流れる電流Iは次の式で与えられます。(2)ここで、V1=5Vの場合を考えると、I≒3.31[mA]となります。V1=0[V]の場合を考えると、I=0[mA]となります。場合は問題ありませんが、V1=5[V]の場合は、3.31[mA]もの電流が、抵抗分圧回路で消費されてしまいます。AQM1248Aの消費電流は1[mA]と少ないのですが、これではAQM1248Aの低消費電流性を活かせません。この様に、抵抗分圧回路は、入力端子に電圧をかけた時に、分圧抵抗に比較的大きな電流が流れるのが欠点です。一方で、後に詳しく紹介するSN74AHC244というICを用いたレベル変換回路の場合、入力電圧が変化しない条件では、消費電流は40[μA]以下(0.04[mA]以下)となります。IC1個で4つの信号のレベル変換を行えることを考えると、信号1つあたりでは10[μA]以下と、極めて少ない消費電流になります。(ただし、入力電圧が変化する場合は、信号の周波数が高いほど消費電流は増えていく)なお、ふたつの抵抗値を例えば51kΩと100kΩという具合にそれぞれ100倍すれば、出力電圧V2を変化させる事なく、電流Iを1100にする事ができます。この様に抵抗値を極端に上げると、後に説明するように、回路がうまく動作しなくなります。UnoとAQM1248Aを図15の配線図で接続した場合に、赤色で示した点Aと点Bの電圧波形を測定した結果を、図16に示します。図15、抵抗分圧型レベル変換回路の波形測定点この図は、図13に、赤色でAとBの2点を書き加えたもの。図16、図15の点Aと点Bの波形CH1(黄色)が点Aの波形。CH2(水色)が点Bの波形。INSTEKのGDS1062という60MHzのオシロスコープを使い、純正プローブを1:10のモードに設定して行った。図16を見ると、確かに5Vの信号が3.3V(実測値では3.28V)の信号に変換されているのが分かります。レベル変換後の波形(水色)の波形の立ち上がりがなまってしまい、遅いのが少し気になります。抵抗分圧型レベル変換回路の伝搬遅延時間(入力の論理が変化してから出力の論理が変化するまでの時間)を測るために、時間軸方向に拡大して測定した波形が図17になります。図17、図16の波形を時間軸方向に拡大して測定したもの入力波形(黄色)がHの電圧の50%(2.5V)に達してから、出力波形(水色)がHの電圧の50%(1.65V)に達するまでの時間を伝搬遅延時間と定義して、図17より伝播遅延時間を測定すると、5.6nsとなります。図18に示す74AHC244をレベル変換に用いた回路(詳しくは次のページで説明)で、点Aと点Bの波形を測定すると、図19の様になります。図19、図18の点Aと点Bの波形CH1(黄色)が点Aの波形。CH2(水色)が点Bの波形。時間軸目盛りは図17と同じ10ns/DIV。図19と図17のCH2(水色)の波形を比較すると、図19の方が波形の立ち上がりが急峻になっている事が分かります。伝播遅延時間についても、5.6ns→4.0nsと、図19の方が少し短くなっています。この様に、抵抗分圧型のレベル変換回路は、レベル変換用のICを使う場合と比べて、波形の立ち上がり・立ち下がりがなまってしまいます。してこのような波形のなまりが生じるか、考えて見ましょう。高速のCMOSロジックICの出力部の等価回路を図20に示します。図20、高速のCMOSロジックICの出力部の等価回路この等価回路で分かるように、出力がHの場合は、VDD(CMOSの電源電圧)と出力が抵抗R0を介してつながります。出力がLの場合は、GNDと出力が抵抗R0を介してつながります。R0の値はICの種類により変わりますが、おおむね数Ωから数十Ωのオーダーで、高速なIC程R0が小さい傾向にあります。(厳密に言うと、Hを出力している時の抵抗値とLを出力している時の抵抗値は異なりますが、おおむね同じ値になる様にICが設計される場合が多いです。出力がL→H、あるいはH→Lに切り替わる瞬間は、図20の様な単純な等価回路で表わせませんが、極めて短時間の出来事なので、無視して差し支えない場合が多いです)ここで、図20の等価回路で表わせるCMOSロジックICの出力端子に、R1とR2のふたつの抵抗からなるレベル変換回路を接続し、図21(a)の様な回路を構成した場合を考えましょう。図21(a)の回路の、テブナンの等価回路は、図21(b)の様になります。R0がR1より十分小さい場合は、図21(c)の様に近似できます。図21、CMOSロジックICの出力にレベル変換回路をつないだ場合の等価回路ここで、寄生容量の影響を考慮します。レベル変換回路の先には別のロジックICの入力端子が接続されますが、実はロジックICの入力端子には、数pFないし十数pF程度のコンデンサが寄生(設計者が意図的に入れた訳でないのに存在する事)しています。例として、図22にTC74HC00のデータシートの一部を示します。図22、TC74HC00のデータシートから入力容量(入力端子の寄生容量)の記述を抜き出したもの他にも、配線にも寄生容量があります。ブレッドボードを使って配線する場合は寄生容量が大きくなります。ブレッドボードのコンタクト(ワイヤを差し込む電極)は、隣の列のコンタクトとの間に数pFないし10pF程度の寄生容量を持ちます。(そのため、ブレッドボードは高周波や高速の回路に向いていません)また、波形を測定する場合はオシロスコープを使用することになりますが、オシロスコープのプローブにも、数pFないし数十pFの寄生容量があります。プローブに1:1と1:10の切り替えスイッチ(写真15参照。×1と×10と表示してある場合が多い)がある場合は、1:10側(×10側)に切り替えると、感度が110になることと引き換えに、寄生容量が激減します。高い周波数や高速の信号の測定を行う場合は、1:10に切り替えて使用すべきです。1:10でプローブを使用する場合は、プローブ補正が必要になります。写真15、1:1と1:10の切り替えスイッチこれらの寄生容量の合計をCSとし、図22(c)の回路にCSを接続したのが図23の回路となります。図23、寄生容量CSを考慮した回路ただし、EとRPを次の様に定義しています。(4)最初出力がLであるとして、時刻t=0で出力がHに変わると仮定すると、寄生容量CSの影響により、出力電圧はいきなり0からEには変化できません。抵抗RPを介して寄生容量CSを充電しながら徐々に電圧が上昇していきます。具体的には、出力電圧v(t)は、次の式で与えられます。(5)式(5)のグラフの概形は図24の様になります。図24、図23の回路の出力電圧の立ち上がり波形v(t)がEに向かって徐々に上昇していく様子が、このグラフから分かります。図16や図17のCH2(水色)の波形を見ると、図24のグラフに似ている事に気づくでしょう。この様に、抵抗分圧型レベル変換回路を使うと波形の立ち上がり(と立ち下がり)がなまるのは、寄生容量を充電するのに時間がかかるからなのです。図24からは、t=CSRPの時に、出力電圧が最終値(収束値)の63.2%まで上昇している事も分かります。CSとRPの積が大きいほど、波形の立ち上がりに時間がかかることから、CSRPが、波形の立ち上がりにかかる時間の指標になる事が分かります。このCSRPを時定数と呼びます。レベル変換用のICを使う場合、そのICの出力部は図20の様になっており、抵抗値R0が抵抗分圧型レベル変換回路の抵抗値RPよりも小さいため、時定数も小さくなります。その結果、図19のCH2(水色)の波形の様に、立ち上がりが早い波形が得られます。・抵抗分圧型レベル変換回路の抵抗値を大きく設定する場合に生じる不都合(その1、波形のなまりの悪化)抵抗分圧型レベル変換回路の消費電流を減らすため、図9のR1とR2の比を保ったまま、これらの値を上げると何が起こるでしょう。図10ではR1=510[Ω]、R2=1[kΩ]の場合を紹介しましたが、これらをそれぞれ100倍にして、R1=51[kΩ]、R2=100[kΩ]とする場合を例に考えます。5Vの電圧を印加したときの消費電流は、3.31mAから33.1μA(0.0331mA)と、1100になります。一方で、式(4)で定義されるRPは、338Ωから33.8kΩ(33800Ω)へと、100倍に上がります。時定数CSRPが100倍になるのです。これは、波形が立ち上がるのに100倍の時間がかかることを意味します。図25に示す様に、51kΩと100kΩでレベル変換回路を組み、同図の点Aと点Bの波形を測定した結果を図26に示します。図26、図25の回路で点Aと点Bの波形の立ち上がりを測定した結果CH1(黄色)が点Aの波形。CH2(水色)が点Bの波形。図26を見ると、CH2(水色)の波形が図17よりも大きくなまっているのが分かります。それに伴い、伝播遅延時間も、5.6nsから860nsへ、大幅に長くなっています。伝搬遅延時間は、860÷5.6=154倍と、丁度100倍にはなっていません。UnoのGPIOの出力)がLからHへ切り替わる時間が無視できない事、nsオーダーの伝搬遅延時間を測定するにはオシロスコープの帯域(60MHz)が不足している事、抵抗を取り替えた事により微妙に寄生容量が変化した事など、いくつか原因が考えられます。図26の様な変化のゆっくりした波形では、比較的正確に伝搬遅延時間が測定されていると推測されます。この様に、抵抗分圧型のレベル変換回路において、抵抗値を極端に大きくすると、波形がなまってしまい、高い周波数の信号は正しく伝達できない事が分かります。CMOSのICになまった波形を入力すると、誤作動したり、消費電流が大きく増えたりする事があり、この点にも注意が必要です。(3.3×0.632≒2.09[V])に上昇するまでの時間(時定数)を測定した結果を図27に示します。図27、時定数を測定するために点Bの波形を拡大した結果このグラフより、時定数は1.20[μs]と求まります。R1とR2の並列合成抵抗RPは33.8[kΩ]と分かっていますから、これより寄生容量CSは1.20×10-6÷(33.8×103)=3.55×10-11[F]=35.5[pF]と求まります。・抵抗分圧型レベル変換回路の抵抗値を大きく設定する場合に生じる不都合(その2、プルアップ/プルダウン抵抗のドライブ電流不足)先ほどはAQM1248AのSCLK信号(図25の点Aと点B)を観察しましたが、今度は/CS信号(図25の点Cと点D)を観察してみましょう。観測された波形を図28に示します。図28、/CS信号のレベル変換前後の波形CH1(黄色)がレベル変換前(図25の点C)の波形。CH2(水色)がレベル変換後(点D)の波形。この波形より、レベル変換がうまくできていない事が分かります。レベル変換前の電圧が0[V]の時に、レベル変換後の電圧が2.56[V]までしか落ちていません。そのため、AQM1248Aには/CS信号がLと認識されず、液晶画面には何も表示されません。してこの様になったかは、図1のピッチ変換基板の回路図を見れば理解できます。/CS信号には、プルアップ抵抗(R1)が入っている事が分かります。このプルアップ抵抗は10kΩであり、レベル変換回路に使われている51kΩや100kΩに対して小さいため、レベル変換回路がプルアップ抵抗をLに引っ張るだけの十分な電流を供給できなかったのです。図1(再掲)、AQM1248Aに必要な周辺回路ピッチ変換基板には、この図に示した周辺回路が実装されている。ピッチ変換回路に使われているプルアップ抵抗(R1とR2)は10kΩ。プルアップ抵抗を考慮して、図25の点Cが0[V]になったときの点Dの電圧を計算すると、51//10010+(51//100)×3.3=2.55[V]となり、実測値の2.56[V]とよく一致します。図29、プルアップ抵抗がある場合の、レベル変換回路通過後のLレベル電圧の計算510Ωと1kΩでレベル変換回路を構成する場合は、10kΩのプルアップ抵抗があっても、点DのLレベルの電圧の計算値は0.51//110+(0.51//1)×3.3=0.108[V]となり、十分Lレベルとして認識されます。一般に、プルアップ抵抗やプルダウン抵抗が信号線に入っているときは、レベル変換回路のふたつの抵抗の並列合成値RPがプルアップ抵抗よりも十分小さい必要があります。510Ωと1kΩの抵抗でレベル変換回路を組むと、RP=338[Ω]となりますが、通常プルアップ抵抗には数kΩないし数十kΩの抵抗が良く使われますので、この分圧抵抗なら十分プルアップ抵抗やプルダウン抵抗をドライブできる計算になります。今回の様にプルアップ抵抗(やプルダウン抵抗)が10kΩだと決まっている場合は、分圧抵抗を10倍の5.1kΩと10kΩにまで大きくしたあたり(この時、LレベルがAQM1248Aの電源電圧の25.3%までしか下がらない)から、だんだん動作が怪しくなるでしょう。4.7kΩや3.3kΩなど、もっと小さい抵抗をプルアップ抵抗(やプルダウン抵抗)に使うなら、それに応じて分圧抵抗を下げる必要があります。今度は逆に、波形のなまりを抑えるために、抵抗分圧型レベル変換回路の抵抗値を小さくする場合に何が起こるかを考えてみます。510Ωと1kΩのレベル変換回路の抵抗を、51Ωと100Ωに、それぞれ110にした場合は、5Vを入力した場合の消費電流が3.31mAから33.1mAへと10倍に増えます。ICの出力部の抵抗の影響が無視できなくなり、33.1mAより少ない電流が流れます)マイコンのGPIOピンが出力できる電流は、通常数mAです。よって、ほとんどのマイコンにおいて、33.1mAの電流は、スペックをオーバーしてしまいます。過大な電流を出力すると、出力電圧が異常になったり、最悪の場合、マイコンが故障してしまいます。Unoに使われているATmega328Pというマイコンは、1ピンあたり最大40mAも出力できる強力なGPIOを持っているので、その点では33.1mAの電流を許容できます。それでも4つの信号線(/CS、RS、SCLK、MOSI)で同時に33.1mAずつ流すとすると、それだけで132.4mAもの電流を消費します。Unoに搭載している電源回路に余裕がなくなってきます。以上の事から、510Ωと1kΩというのは、あまり下げる余地のない値である事が分かります。今回は抵抗分圧型のレベル変換回路を説明しましたが、次のページではレベル変換用ICを用いた回路について説明します。ページMGLCDライブラリArduino用グラフィックLCDライブラリ。AQM1248Aも対応している。AQM1248Aを使ったArduino用シールド2種(1)AQM1248Aを使ったArduino用シールドの製作。サンプルゲームもある。ArduinoでグラフィックLCDを動かす(SG12232C編)(1)秋月電子で手に入る、バックライト付きで122X32ピクセルのグラフィックLCDモジュールをArduinoで動かす方法。ArduinoでグラフィックLCDを動かす(S12232ZA編)(1)バックライトはないものの、非常に安価な122X32ピクセルのグラフィックLCDモジュールをArduinoで動かす方法。ArudinoでグラフィックLCDを動かす(SG12864ASLB-GB編)(1)秋月電子で手に入る、バックライト付きで128X64ピクセルのグラフィックLCDモジュールをArduinoで動かす方法。Arduino用ヘッダシールドの製作(3)AQM1248Aの信号をロジックアナライザで解析した例が載っている。電子工作ISBN:978-4-7775-1941-5→工学社の書籍の内容の紹介ページ本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。このサイトの中の人が書いた本です。本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。