« STM8Sでグラフィック液晶に日本語文字が表示できた | トップページ | STM8Sでグラフィック液晶に漢字をスクロール表示する »

2013年4月14日 (日)

STM8Sとモノクログラフィック液晶を基板に実装する

 今年の正月以来取り組んできたSTM8Sでの日本語フォント表示に、やっとのことで成功し、重い荷を肩から下ろしたときのように、暫く力が抜けて前へ進む気力を失った。記念すべきブログ200本めの記事なのだが、焦点が定まらない。

 当初、このSTM8Sとモノクログラフィック液晶(GLCD)の組み合わせは、電波時計のプラットホームにするつもりだった。しかし、これだけ日本語フォントの表示に苦労したのに、時計は日本語テキストを殆ど使わないというのは、いかにも勿体ない気がする。

 ハードウエアも、まだバラックである。GLCD(JCG12864A37)のインタフェースはブレッドボードで動くように自作のピンソケットをつけたものの、STM8S-Discoveryとの接続は基板のソケットからのジャンパーコードを差しただけで移動することもままならない。

S_p3265778_200top バラックで実験していたのは、電波時計でない他の適当なアプリケーションが見つからなかったためである。しかし、だからといって簡単にばらしてしまうのは、これだけ長い間付き合ったセットに何か薄情のような気もする。使うあてがないにしても、少しはまともな形でSTM8SとGLCDを動く形に残しておくことにした。

秋月の新商品パワーFET(FKV757)を買ってきた(4/1/2013)
 実装するとは決めたが急に方針が決まるわけでもない。手を動かしていないと落ち着かない性分になっている。手は勝手に、このあいだのMOS-FETスイッチ制作の続きに移った。

 念願のサトー電気からフォトボル型カプラー(TLP590B)は手に入れたが、スイッチに使えるようなパワーFETの手持ちがない。部品箱を漁っていたら、2年前のガイガーカウンターづくりのときに秋月で買った高圧用のFET、FQPF3N90(900V 2A)が出てきた。S_p4135804 GM管(SBM-20)やパルストランスなど自作のための高圧パーツはあのとき全部揃えたのだが、あれからガイガーカウンター制作熱はすっかり下がったままである。

 このFETはデータシートを見るとオン抵抗は数オーム近くありスイッチ用には適さない。それでもフォトカプラーを試したくて、ブレッドボードに組んでみた。導通テストは普通のマルチテスターの導通モードで確かめる。ブレッドボードなので組むのに10分もかからない。

 単三を3つ並べた4.5Vを入力側に入れてテストする。おお、無限大を差していた抵抗値が、一気に0Ω近くに下がる。LEDのON/OFFも問題ない。調子に乗って、1.5Vのモーターの入り切りをやってみる。これはさすがに動かなかった。

 やはりオン抵抗の低いFETが欲しい。ウェブ上で色々物色していたら、おあつらえのように秋月電子からサンケン電気のMOS-FET、FKV575が新商品として売り出された。DS間の最大電圧と電流が60V 75Aで導通時のDS間の抵抗が何と8mオーム、しかも値段が¥120と安い。久しぶりに仕事の帰り、秋月に寄った。

 新商品なので、陳列棚には出ていなかった。今日は月曜日。秋月は、月、木はバーコードのついた商品しか売らないということでカウンターのウインドウケースには白いシーツがかかっている。でも、店員に商品名を言えば出してくれることがある。まあ、急ぐものではないが折角ここまで来たのだがらと、だめもとで店員に聞いてみた。

 最初、ないようなことを言っていたが、事情通の別の店員が、奥からリールに入った現物を出してくれ無事手に入れることが出来た。とりあえず4つ買う。帰って夕食もそこそこにわくわくしながらテストに入る。実に安上がりな娯楽だ。

S_p4135810 例のフォトボル型カプラー(TLP590B)をゲートにつないでまずテスターで導通テスト。おお、このあいだのFETは数オームだったが、今度は測定限度の0オーム。1.5ボルトのモーターは快調に廻る。

MOSFETのスイッチ回路と遅延回路(4/5/2013)
 MOSFETスイッチの目的は、オーディオアンプとスピーカーの間に入れて電源投入時のポップノイズを避ける遅延スイッチである。フォトカプラーやFETの部品は揃ったが、回路をどうするかが悩ましい。スピーカーに流れる電流は交流なので、単純なスイッチでは動かない。

 ウェブなどを見ていると、オーディオ製品のこうしたソフトスイッチは、結構おおがかりで、回路がどうなっているかわからないがFETを4つも使って一回路を切ったりしている製品もある。

 こちらは、そんな大げさにするつもりはない。フォトボル型カプラーのおかげでFETをドライブする部分は非常に簡単になったのだが、スピーカーの接続を遅らせる遅延回路と、実際のスピーカー回路に入れるFETの組み合わせになかなか良い回路例が見当たらない。

 FETを対称に並べるスイッチは、片側のFETは寄生ダイオードを利用して導通している。寄生ダイオード(ボディダイオード)の順電圧降下はデータシートによれば、1V以上で、折角、片側がミリオーム台でも、トータルとしては結構な損失になる。

 仮に100Wの最大電力がスピーカー負荷(8Ω)にかかったときの電流は、3.5Aで、このときの損失は順電圧降下が1Vとすると3.5W、ヒートシンクが必要になるレベルになってしまう。

 片側をボディダイオードで導通させない回路を探しているが見つからない。FETを4つ使ったスイッチは恐らく、ボディダイオードを使わない方式だとは思うけれど、どうして実現するのかあれこれメモに書いては見るがうまくいかない。ここも奥が深い。S_p4135805

 遅延回路の方は、最初からCR時定数で組むつもりをしていたが、フォトカプラーの入力電流をCRで遅延させるのは、大容量のコンデンサーが必要で何か資源の無駄のような気がする。トランジスタをかませばもっと簡単になることに気が付いた。電流の少ないベース側にCRを入れコレクター負荷でフォトカプラーをドライブする。

 早速、ブレッドボードに組み込む。定番の2SC1815でベースに4KΩ、220μFの遅延回路を入れて0.8秒程度の遅延時間が得られた。こういう、ちまちました実験も楽しい。

STM8Sとモノクログラフィック液晶を実装する(4/7/2013)
 FETスイッチはさておき、そろそろ本来のプロジェクトに戻ろう。これまでブレッドボードにジャンパーでつながれていたSTM8S-Discovery基板とAitendoのGLCD(JCG12864A37)を基板に固定する工作を始めた。

 まだ何に使うか決まっていない。とりあえずは、STM8S-DiscoveryのST-LINKの部分も切り取らず、秋月の両面C基板の上下に液晶とCPU基板をソケットでつけることにする。STM8S-DiscoveryのCPU周りには、2X6のピンヘッダーが4つ出ており、C基板には、それぞれそれに見合うソケットをつけて固定する。

S_p4135822 GLCDは四隅のビス穴とスペーサーで固定する。インターフェースケーブルにはブレッドボード用のmilピッチのピンをつけてあるので、これを基板にハンダ付けしてしまう。抜き差しは、前々回に紹介したリード線のソケットで出来る(あまりやりたくないが)。忘れずにSPIの逆流防止のSBD(ショットキーダイオード)の1S4もつける。

 UARTは例によって、3ピンソケットでUART線をUSBアダプターにつなぎ、アダプターは共用する。久しぶりのハンダ付けが楽しい。目的がはっきりしているときの作業は捗る。テニスから帰って風呂に入ったあと、少し根を詰めて作業に熱中し、終わった時はさすがに腰が痛くなっていた。

 チェックもそこそこに通電した。よっしゃー、全く誤配線なしでWelcome画面が出た。苦労したあとの成功も嬉しいが、こういう一発で動くというのも爽快なものだ。ただ、これを何に使うかということが決まっていないと言うのがつらいところである。S_p4135820

SPIの不具合再発とその解決(4/9/2013)
  ところが一発で動いた後、思わぬトラブルに巻き込まれた。このあいだのフラッシュメモリの読み出しエラーが再発したのである。ブレッドボードではSBDをGLCDとフラッシュメモリの間にはさんで直ったのだが、今度はSBDが入っていても直結のときと同じようなエラーがでる。

 エラーの状況は、どこかで、SPIのクロックの1ビット程度が抜け(または余分に入る)、それ以降がすべて狂う。フォントデータだと少しずれるだけで済むが、漢字だとフォントデータに辿りつくデータブロックアドレスが目茶目茶になるので全く字にならないゴミが表示される。これでは使い物にならない。

 配線が長くなったからなのだろうか。どこかと干渉しているのだろうか。UEW線で結線した配線の長さが特に大きくなったわけでもない。ブレッドボードよりハンダ付けなので明らかに抵抗値は下がっているはずだ。

 ダイオードをとりかえてみても駄目。配線の位置を変えても駄目。オシロで波形を見る。確かに、GLCDのSPIのクロック線は、フラッシュを読みに行く時にわずかな波形が出ている。このSPIのクロックは、CPUクロックの1/2の8Mhzである。トランジスターや、普通のフォトカプラーでは高速すぎて分離できない。

 ここで、サトー電気で高速フォトカプラーTLP552を買ってあったのを思い出した。おお、先見の明があった。買ってきたのが無駄にならなかったぞ。早速使ってみた。しかし、こいつは10mA以上を入力側に流す必要があり、つないだだけでSPIそのものが動かなくなった。まあ、考えてみたらこんなことに¥200以上する高速フォトカプラーを使うのは明らかに資源の無駄遣いだ。

S_p4105801 それにしても、何故ブレッドボードで動いて、実装するとおかしくなるのだろう。何が悪さをしているのかわからない。こんな些細なことでも上手く行かないと言うのは、不愉快なものである。SPIを複数ディバイスで共用するときのノウハウをウェブで探すが、そういう話はどこにもない。

 そのうち、Vccの違いを吸収するレベルシフターICを使えば、ハード的な干渉を避けられるような気がしてきた。いわゆるバスバッファーICというやつである。こういうICは出力側をHiZ(ハイインピーダンス)にして完全に接続を切ることもできる。

 バスバッファーのICならFPGAのドングルを作ったときの予備のTC74VHC244がピッチ変換基板に取り付けたまま残っている。ブレッドボードにつけて、ジャンパーピンを実装面に無理やりハンダ付けし、空中配線でテストしてみた。

ビンゴ!であった。フラッシュメモリは全くエラーなく読み出せるようになった。今のプログラムのUARTはテスト用に、日本語フォントのフォントブロックテーブルをコンソールに表示するコマンドがあるのだが('q')、これがいくら繰り返しても、全く同じデータを表示する。

Kanjicodeblock ANK文字表示('d')も、今までは、どこかしら字が欠けていたのだが、全く変わらない。いやいや嬉しい。今までの鬱陶しい気分がすかっと抜けて気分は日本晴れだ。達成感で体が軽い。はい、完全に中毒にかかっていますな。

 バスバッファーで問題は解決した。しかし、8チャンネルもある3ステートバスバッファーを使うまでもない話だ。世の中には、1チャンネルだけのバスバッファー(74LVC1G125GW)もあるようだが(Digiで¥15)、これだけ買うわけにもいかない(共立電子の通販でも発見。2ヶ¥60)。

 実際の実装には、昔々、電子工作を始めて最初にChaNさんのシリアルプログラマーを作ったときの予備、74HC126を使うことにする。この石は4回路をチャンネルごとにHiZ(ハイインピーダンス)に出来る。特にHiZにする必要はなさそうだ。enableのままで問題なく動いた。

 1回路しか使っていないけれど、16ピンDIPくらいならあっても邪魔にならない。基板にハンダ付けする。これでやっと実装版が完動した。

ZAZ(ザーズ)にはまる(4/10/2013)
 全く電子工作とは違う話題でちょっと失礼。珍しく感動したことがあって記録を残しておくことにする。この世界に詳しい人には旧聞に属すると思うが、NHK-BSの番組(再放送らしい)でパリのストリートミュージシャンから一気にフランスで大評判の歌手になったZAZという女性歌手(正式名 イザベル・ジュフロワ)を知った。

 所長は音楽と言えばクラシックしか聴かないのだが、これが、このあいだのポルトガルのファドと同じように、何故か心を引き込まれてしまったのである。ジャンルは、シャンソン、ジャズの範囲に入るのだろうか。

 声は美声ではない。むしろハスキーで、メジャーになって本式の伴奏がついたものより、ギターとベースだけのストリート時代の録音の方が訴える力が強い。伝説的なシャンソン歌手、エディットピアフの再来と言われている。日本にも1回来たようだ。

 歌詞(彼女は作詞作曲もする)は、放送の時は字幕がついていて、結構、歌詞でも引き込まれるのだが、不思議なことに全く理解できないフランス語だけのときでも気持ちが伝わってくる。ファドの時と同じだ。PCの前で例の雑誌付録のUSB-AUDIOからYouTubeの音をカマデンのデジタルアンプで再生する。

Zaz  良い時代になったものだ。CDを買ってこなくてもとりあえず自由に音楽が聴ける。ファドと違って気分が落ち込まないのが良い。音楽を聴きながら、このブログの原稿を書いたり、電子工作の資料を検索したりする。至福の時間である。

ハードウエアのスクロールを研究する(4/12/2013)
 大分前に、この液晶のコントローラーST7565のデータシートに画面をハード的にスクロールできるDisplay Start Command(0x40でlowerアドレスが位置アドレス)という命令があることを知り(データシートP26とP42)、いつかそのテストをしたいものだとブログに書いた。

 実は、前回発表したソースコードには既にこのコマンドを動かす機能が入っている。UARTモニターの「s」というコマンドがそれで、sn(nは1桁の数字)とやると、nドット分ずれて画面が表示されるようになっている。

 実装はコントローラーのコマンドたったのひとつで、VRAMのY軸(縦)1ドット単位に任意の場所を画面の最初に持って行くことが出来る。残りの画は巻絵のように上に折り返して表示される。ハードなので表示の切り替えは一瞬である。

 ただ、これを使って、12ドットの漢字をスクロールさせようとコードを入れてみたが、全くうまくいかなかった。液晶がFSTNで残像が大きく、100ms以上の待ちを入れないとちゃんと絵がでないということもあるが、うまくいかなかった理由はそれだけではない。

 このGLCDの縦のサイズは64ドットで、12ドットの漢字を5行表示すると、下に4ドットの余りが出来る。これを単純に12ドット単位にスクロールさせると、この4ドットの余白がずれて動くので、文字が無駄に動いてスクロールしたように見えなくなるのだ。

 理屈はわかったが、これをどうやって解消してスムーズなスクロールに出来るかうまい方法が見つからない。画面下の4ドットの余白を残しながら、画面60ドット分だけをスクロールさせるのは、簡単なロジックでは実現できない。

 ということで、スクロール機能は放ってあったが、実装が一段落したので、これも何とか実現させてみようと取り組んでみた。少し考えれば出来るだろうと思っていたのだが、これが思いのほか手強い。

S_p4135823 どうも、フォントを画面の下段から上段にかけて分離して描画しないと、余白をなくすことは出来なさそうだ。そうなると相当基本的な部分まで手を入れないとスムーズなスクロールは出来ない。しかし、問題が難しいとわかると、余計燃え上がるのが性分である。

 ブログの原稿を書きながら、ロジックに頭をひねる。擬似コーディング以前に考え方を整理しておく必要がある。メモに図を描きながら、何度も発想を換えて一番合理的な方法を研究する。

 その結果、やはり当初のやりかた通り、文字フォントの描画、画面の領域(レクタングル)のクリアなどの関数を、Y軸についてシームレス(最大幅まで来たら折り返して0に戻る)に動くようにすれば、画面のスクロールの部分は単純な演算だけ(フォントを書き出すVRAMアドレスは16回も変わって元へ戻るが)で、表示できることを擬似コーディングで確かめた。

 実装はこれからで、文字フォント描画関数がはたしてシームレスに動くように改装できるか確認できないが、とりあえず何とか動きそうな感じである。ささやかだがこういうときも達成感がある。本当は動いてから報告するべきだが、ちょっと時間がかかりそうなので、このあたりでブログに上げることにする。動いたかどうかは次記事をお楽しみに。

|

« STM8Sでグラフィック液晶に日本語文字が表示できた | トップページ | STM8Sでグラフィック液晶に漢字をスクロール表示する »

電子工作」カテゴリの記事

STM8S」カテゴリの記事

コメント

kugaさん、お久しぶりです。

>>(ここが間違っている?)。
>はい、間違っています。

やっぱり。実は数日前から、オシロと信号発生機でACをFETにかけて
実験しているのですが、出力がACのまま出てくるので頭を抱えて
いたところでした(半波波形を期待していたのですが)。
ただし、ACなのでFETを切って(ゲート0V)も、脈流らしいものが流れます。
これが寄生ダイオードの分なのでしょうか。
これを止めているのが、2つ背中合わせにしたFETスイッチだと
言われれば納得がいきます。

投稿: がた老 | 2013年4月22日 (月) 23時01分

がた老さん、こんにちは。
>FETはゲートでオンにしても、逆方向には流れませんよね
>(ここが間違っている?)。
はい、間違っています。
逆方向にも流れます。(寄生ダイオード経由ではなく)

Sam_Yさんが、15日のコメントで以下のように指摘してます。
>MOS-FETを ONにした場合、逆方向(Nchだと S->D方向) にも ONになりますよ。

投稿: kuga | 2013年4月22日 (月) 19時01分

shuji009さん、こんにちは。
ハードスクロールの実装は先週完成し、今、動画をどうやって
アップロードするか思案中です(まともな音が録れない)。

やりかたは、当初どおり64ドットの余白4ドットを常に最下部に
残す方法で、フォントを分割する表示は思ったより楽にできたのですが、
勘違いがいくつかあって、まともに出るまで四苦八苦でした。
表示も、一字づつ数十ms時間を置かないとFSTNでは真っ白に
なってしまいますね(スクロールは早いですが)。
いずれ動画をつけてアップします。お楽しみに。

投稿: がた老 | 2013年4月22日 (月) 15時44分

ハードウェアスクロールですが、既に実装済みだと思いますが、先ほど、思いついた方法。

条件:
 縦12ドットのフォント文字の縦スクロール
 文字列は、5行分。

私ならこうする方法
 上から4行を12ドットに、直下1ドット分を空白にする。
 (12ドット + 1) * 4行 + 12ドット* 1行 = 64ドット
 最後の文字列だけは、下の空白無し。

スクロールは1ドット毎13回する(ちらつくようであれば、適当にディレイをいれたり、ハードウェアスクロール値を2-3ドット程度にする必要有りと思います)

SPI速度が十分とれれば、仮想VRAMからの転送でも良いと思いますが(汗;)。

実際にどうされたのか楽しみです。

投稿: shuji009 | 2013年4月21日 (日) 01時17分

Sam_Yさん、たびたびどうも。
そうです。今考えている、スピーカーmute switchは、
まさしく、2個のFETを使ったスイッチです。
ただ、スピーカーに流れる電流は、電源と違って交流なので、
逆方向にもオンの時は流さなければいけません。
FETはゲートでオンにしても、逆方向には流れませんよね
(ここが間違っている?)。

なぜ背中あわせにしたFETスイッチが導通するのかというと、
片側は寄生ダイオードで導通していると理解しているのですが。

投稿: がた老 | 2013年4月18日 (木) 13時29分

はい FETが OFFのときは それでいいと思います。
ただ FET が ONのときは 寄生ダイオードにパラではいった スイッチが ON の状態ですから この時の 寄生ダイオードの損失は考えなくていいです。(VDSが ほぼ 0)

ところで 不勉強で知らなかったのですが フォトボルって ずいぶん便利そうですね。 これならば 2個のFETを使って
|アンプ|--|D (FET) S|--|S (FET) D|--|カップリングC|--|スピーカ|
みたいに繋いで 2個のフォトボルで ON/OFF が出来ませんかね。 (フォトボルの駆動電流がもったいない気もしますが。)
ついでに FETのゲート容量(1000pF位かな)をつかって 時定数をつくってやることができれば ずいぶ簡単な回路になりそうですね。(妄想かもしれませんが 笑)

投稿: Sam_Y | 2013年4月17日 (水) 23時44分

Sam_Yさん、コメントありがとうございます。
すみません、このあたり全くの素人で、回路図も示さずに
色々話を進めてごめんなさい。

寄生ダイオードとは、交流をスイッチするために、2つのMOS-FETを
背中合わせに(ソース-ドレイン--ドレイン-ソース)とつなぐ
スイッチ回路の片側のFETの導通部分のことを言っているつもりです。

MOS-FETは、ゲートに電圧を加えなくても逆方向の電圧(ソースよりドレインが
高いとき)はつねに寄生ダイオードで導通していると
思っていたんですが、勘違いですかね。

あ、デカップリングなどの回路変更の方は既製品の
アンプの出力を切りたいので、考えていませんでした。

投稿: がた老 | 2013年4月15日 (月) 22時40分

こんにちは FET スイッチの件 回路も見ないで脊椎反射的書き込みなので 勘違いしていたらごめんなさい。
MOS-FETを ONにした場合、逆方向(Nchだと S->D方向) にも ONになりますよ。
テスター(デジタル)の ダイオードレンジ(VFが計れるもの)で 寄生ダイオードのVFを測定しながら ゲートをONにすると すぐ判ります。(というか そういう話ではないような予感 -> 自分)
どちらかと言うと 寄生ダイオードがある故に 半波が切れないというのが 回路が複雑化する要因なのでしょうね。
ちなみに "http://118.243.179.248/PAmp.htm"の デカップリング方法は 試されましたでしょうか。

投稿: Sam_Y | 2013年4月15日 (月) 15時22分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: STM8Sとモノクログラフィック液晶を基板に実装する:

« STM8Sでグラフィック液晶に日本語文字が表示できた | トップページ | STM8Sでグラフィック液晶に漢字をスクロール表示する »