8ドット漢字電光ニュース
漢字電光ニュースの完成(7/1/08)
5月の末から遊んでいたLEDマトリックスは、本日、遂に8ドットながら第二水準までの漢字と半角のカナ英数字をUARTからの入力で表示する電光ニュース版となって当面の最終ゴールに到達した。文字フォントは昔のPDA(携帯端末)で使われたフリーの美咲フォントを活用させてもらった。
SDカードに入った8バイトのフォントデータのみのバイナリファイルは、コードから換算したファイルポインタでランダムアクセスしているので、一字あたり数ms、半角は同じフォーマットをEEPROMに入れたので1ms以下で読み出すことが出来る。LEDの描画タイミングはファイルアクセスを優先しファイルを読み終わるまで待つしかけで、表示中にアクセスすると一時的に止まるが読み込みが終わると再開する。 追加メッセージも可能である。
ファイルフォーマットは1文字当たり10 バイト、頭の2バイトはデバッグや編集のため、文字コード(JIS)が入り、その後の8バイトに縦方向にスキャンしたフォントグリフが入っている。配布されているフォントは行方向なので縦横変換がしてある。これは、LEDの横スクロールのためである。
第二水準まで入れたバイナリファイルのサイズは200キロバイトと少し大きいが、これはランダムアクセスのロジックを簡単にするため、コードの指定のない部分を詰めずにそのまま飛ばしているからである。実用的には全く問題がない。今、実験に使っているSDカードは一昔前のデジカメについていたカードでわずか16Mバイトしかないが、それでもマイコンには十分すぎる容量だ。それにしても最近のメモリの低廉化はすさまじい。2GのSDカードが¥1000以下で売っている。10年程前、仕事で、苦労して導入した背の高いラック一杯の画像蓄積用の磁気ディスク装置の容量が200ギガで数千万円したことを思い出す。あれから10年しかたっていないのである。余りの変化の激しさに肩の力が抜ける。
プラットホームはMega128だが、出来上がってみるとフラッシュのサイズは、TinyFatFSをReadOnlyにしたため、11Kバイト少々に納まった。これならMega168クラスでも十分入る。ただ、Mega168は1ポートで連続したピンをとれないので、パラレル8ビットでトランジスタアレイをドライブしているところを変更するか、もうひとつシフトレジスタのICを追加して、すべてをシリアルにしてしまうほうが簡単かもしれない。
いやそれにしても、最高の気分だ。これまでの漢字表示のプログラムとLEDマトリックスのプログラムをひとつにしたのだが、これがとても順調に進んだことが余計気分を良くしている。プログラムの機能の切り分けが合理的だったからと自画自賛する。それに両方ともかなり念入りにデバッグをしてあったため初期トラブルも殆どなかった。
表示させたら文字の天地が逆だったのと、文字ポインタを進めるのを(例の++)デバッグの途中で今度は消してしまい、リセットがかかって突然動かなくなって慌てたくらいで、問題なく漢字カナ交じり文が表示された。半角のフォントのあとは文字間隔をつめるロジックも上手くいった。本来は個別文字単位にカーニングをしないと本式ではないが、フォントファイルのフォーマットにその情報を入れずに作ったのですぐには出来ない。ついでに、直近の表示データを必ずEEPROMにセーブして電源を入れなおすと、そのデータが表示されるようにする。
思いついた色々なテキストを入れて視認性を確かめる。わずか7ドット×7ドットの美咲フォントだが、何となく読めるというのが不思議だ。半角の8あたりは全部で7ドットしかないのでいささか苦しいが、なにしろこのフォント、第二水準の漢字まで入っているのである。
で、用途は、と聞かれると笑ってしまうしかないというのがこのプロジェクトの最大の問題なのだが、まあ、これは今2枚しかないLEDマトリックスを拡張してどんな感じになるか確かめてから考えることにする。H8 にメールサーバのスタックがあるそうだから、外出先から携帯でメールを送り、これをチャイム付きで自宅に表示するなどのしかけを作ったら雑誌あたりで取り上げてくれるかもしれない。
LEDマトリックスを増設(7/7/08)
ここ数日、買ってあった8×8の2色のLEDマトリックスの3つめを基板に増設することに熱中していた。このあいだ秋月でさらに2つ買ってしまって今さら置いておくわけにもいかなかったのと、やはり電光掲示板というからには最低でも3つはいるだろうと思ったからである。
この基板は最初2つのLEDマトリックスで赤色の8×16を出すだけだっただが、緑色を出すためさらにフトレジスタを追加し、今度の増設で3つ(8×24ドット)ともなると、シフトレジスタが6つも乗り、ちょっとした壮観である。配線も同じ繰り返しとはいえ、UEW線は交叉させないというルールはとても守れない。少しづつ増やしていったから、ここまで来たので、もしこれを最初から半田付けしろと言われたらとても手の出るものではない。
こういうこともあってか、このごろCPLDとかFPGAの記事にやたら目が止まるようになった。そうなのだ。こういうことが簡単に出来るようになるという説明は、実際にこうした面倒な配線をしてみると実感として身にしみる。半田付けなどの実装も目先が変われば楽しいが、LED基板などは同じことの繰り返しですっかり倦きてしまった。
フラットケーブルの圧接コネクタの導入で外観はちょっと玄人っぽくなった。いや、これは言い過ぎで、ハイアマチュアというところか。ケーブルの圧接は、秋葉で買う予定だった圧着ペンチではなく、近在のDIY店で万力を買ってきてそれですませた。圧着ペンチが思ったより高かったのと(¥3000以上)、万力なら他の用途に使えそうだったからである。最初、まともな万力にしようと思ったが、みな大きすぎて工作机に大きなボルトで固定するものしかなく、余りにも大げさなので¥2500 の卓上万力(テーブルバイス)にした。まあ、機械工作の予定は今のところないのでこれで十分だろう。
リボン(フラット)ケーブルはこれまでの自作PCパーツについてくるIDEケーブルやFDDケーブルが山ほど残っている。暫くはこれを活用することにする。買う必要もない。先だって買ったロジアナのプローブもこれを利用している。長さが10センチということもありアナログと違ってそう問題はないようだ。ちゃんとNICコントローラの25MHzのクロックが観測できている。
3個のLEDマトリックスは少しデバッグに手間取ったが、無事3色を使い分けて日本語テキストを表示するようになった。2つのときと比べれば確かに視認性ははるかに高くなる。大体の感じは類推で読めるが、躊躇(ちゅうちょ)とか躑躅(つつじ)などは流石に全く判読不能になる。しかし、魑魅魍魎(ちみもうりょう)などは文脈がわかれば何となく読めそうである。
デバッグに時間がかかったのは、2つのときは(結果的に)誤魔化していたダイナミック表示が3つになるといい加減なコーディングでは動かなかったためである。2つのころ既にあったバグ(ゴミが時々出る)が中々とれない。結局、解明に役立ったのは、前に作ってあったワンステップ毎の表示コマンドであった。これでひとつづつ動かしてみて、バッファー全体の境界で1ビットずれていることがわかった。ダイナミック表示しているときはちょうど画面の切れ目にあたるので今までわからなかったバグである。3つになったため、スキャンの折り返し点が増えて顕在化した。ただ、どこで1ビットずれているのかが最後までわからなかった。わかってみれば、何のことはない、基本的なところがみな1ビットおかしかったのである。全部がずれていたため表面化せず結局最後のデータのところでゴミになっていた。
今度こそ、1ヶ月余りのLEDマトリックスプロジェクトは大団円を迎えた。収穫は、SDカードのアクセスにすっかり慣れたこと、表面実装部品を使いこなせるようになったこと、そうだ、スタック領域のトラブルを解明したことを忘れていた。CPLD、FPGAの意義が良く理解できたこと、これも大きい。いやいやお遊びとはいえ大きな収穫だった。
ここに、AVRstudioのプロジェクト単位のフォルダー2つを置きます。ひとつは、美咲フォントをバイナリにして、SDカードとEEPROMに収容し、その内容をUARTで確認できるF_EP_LOAD128と、本体のENEWS128です。このままAVRstudioのプロジェクトとして使えます。ただ余り整理しておらず読みにくいのはご勘弁ください。試行錯誤のあとです。
SDカードの回路は、chaN氏のものと殆ど同じ、LEDのピンアサインはソースのコメントを参照してください。また美咲フォントファイルは再配布、加工がフリーなので、私が使ったファイル(このほかにも沢山ある)を、F_EP_LOAD128のフォルダーに入れてあります。
| 固定リンク
「AVR」カテゴリの記事
- ソフトI2Cはクロックストレッチまで手を出してあえなく沈没(2017.09.02)
- オシロのテストどころかソフト開発で大はまり(2017.07.26)
- 超音波方式の人感センサーI2C化と新しいオシロ(2017.06.29)
- motionの動体検知はRaspi3の電源が安定しない(2017.04.16)
- 赤外線学習リモコンはデータ再現で挫折したまま進まず(2016.07.21)
コメント