ikkei blog

電子工作やパズルのブログです。主にLEDを使った電子工作をやっています。

LoL Shield (爆笑シールド)その5

2010年09月15日 03時18分20秒 | Arduino
LoL Shield のサンプルで文字を表示させる fonttest がありますが、
用意されているのがアルファベットの大文字しかありません。
さらに、 Japanino ではなぜか動きません。

いろいろやってみたら、
どうやらフォントデータをRAM上に置いているようです。
Arduino では、RAMの使用量がオーバーしても何も言わずに動作しなくなってしまいます。
警告を出すとか、使用量を表示するとかやって欲しい物です。

また、Arduino では flash ROM に配置するためには PROGMEM を使わないといけないみたいです。
さらに、それをアクセスするには用意された特別な関数を使わないとダメみたいです。

Font.cpp を見てみるとフォントデータを2次元座標で1ドットずつ配列に入れています。
つまり、1ドットにつき2バイトも浪費しているのです。1文字平均20バイトです。
フォントデータだけでRAMを700バイトくらい使っている訳です。
RAMが1KBしか無いJapanino(ATMega168)では無理だった様です。

そこで、私はLCDのフォントをビットマップで入れてみることにしました。
5x7ドットなので1文字5バイトで済みます。
このデータは手作業で入れると大変なので、Excelで作ることにしました。


こちらはオリジナルのフォントですが、
ベータ版だからかSTRANGE BUG のせいか小文字には魂が入っていませんね。


こうやって作ったフォントをflash ROMに配置してやってみました。
ご覧の通り、Japaninoでも動くようになりました。


Fontやスケッチはこちら

90°回転する関数も用意されていますが、
やってみるとアルファベットには向いていないような気がしますが、なんのために用意したのでしょうか?
カタカナでも縦書きフォントにしないとうまくいきません。



最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
ATmega168 (cook-chant)
2010-09-20 22:45:36
japaninoで表示されるようになりました。ありがとうございます。パターン作成用のEXCELシート、EXCELのこんな使い方もあるということを再認識させていただきました。と同時に感心しました。
返信する
Excel (ikkei)
2010-09-21 02:32:49
いやー、マクロが使えないので全部コピペで作ります。
以前作った16セグメントのDIP SWのパターンもExcelでした。
プログラム用に使うにはHEXが使えるようにしておくことが吉です。
返信する

コメントを投稿