「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



昨日に続き、美咲フォントを利用する作戦です。

昨日はpng画像をbmp画像にしたモノを、
HSPを使ってavr用アセンブラのソース形式
にするところまでやりました。

で、実際にAVRstudio上でmega128
用にアセンブルしてみたら…上手く行きました。
まぁ、容量さえ足りるなら特に難しいところは
ないでしょう…


次。インテルhex形式用のHSPスクリプトも
書いてみました。昨日のを流用してチョイチョイと。

で、吐き出したhexファイルを秋月のeeprom
ライター用ソフト(PICライターに付属のソフト)
で読み込んでみたところ、エラーも無く上手く読み
込めました。
容量としては60KBを超えているので512kビット
タイプ(64KB)以上のeepromじゃないと
入りきりません。

買い置きのeepromを漁ったら、約10個全部が
256kビット(32KB)タイプだったので、
書き込み確認は出来ませんでしたが…

そうそう、秋月とかで売っているSG12864Aのような
LCDの場合、ビット列が横じゃなく縦方向で
用意しないといけないので、そういう用途の場合は
ハードにあわせてスクリプトを直す必要が
あるかもしれません。

まぁ、直すのはチョイチョイだから後回し。


次。C言語ソース形式にもしてみたいな。
AVRであればWIN-AVR(AVR-gcc)
で使えるようにしたいところ。

以前デカイデータをプログラム領域(.cseg)に
押し込んでgccのプログラム組もうとした時に
散々トラブった記憶があるので、ちょっといやな
予感ですが…

とりあえず方針的にはchar型の2次配列にして、
1バイト単位でメモリ上に配置されるように
考えてみます。

で、スクリプトはすぐに出来ました。

実行して、出来たCソースをAVRstudio
のCプログラム中に取り込んでコンパイル…。

でかすぎるというエラー。あ、.dsegに配置しようと
してるな。間違えた。入る訳無い。SRAMは
4KBしかありませんからね。
あらためて.cseg上に配置するようにソースを修正…。

またしてもでかすぎるというエラー。うーん、
今回は間違えは無いはずなんだけどな…

でかいというのなら、極端に削ってみよう…
3行程度(24バイト分)にしてみた。
コンパイル通った。(あたりまえ)

これをシミュレーションに掛けてみて、プログラム
メモリ、SRAM、EEPROM、レジスタの
それぞれをメモリダンプ取ってみると…
うん。やっぱりプログラムメモリにしか配置
されてないよな。(以前の実験ではプログラムと
SRAMの両方にメモリを確保に行ってしまい、
全然ダメだったんですが、今回はそれは大丈夫
みたい)

うーん、方針は合ってるのか。

データ量を半分くらいに削ってみる…
お、コンパイル通った!

うーん、30KBくらいならOKか…
オリジナルは60KBくらいになっちゃう
ので、ここから少しずつ削りながらコンパイル
を繰り返してみると…

およそ32KBを割ったところでコンパイルが
通るようになるみたい。


うーん、AVR-gccって、32KBの壁
なんて有ったんだったっけなぁ?記憶に無いな…
あとで調べなおしてみよう…
(16FシリーズのPICは面倒くさいのが
 イロイロあった気がするけど…)

いずれにしても、このままでは8ビット版AVR
には載せられそうに無いな。


というわけで、スクリプトを書きまくったので、
あとでサイトに纏めておきたいと思います。


ちなみにeepromに格納しておけば、メモリが
ちっちゃいマイコンでも充分使い物になるかと
いう気がします。I2Cで読み出してLCDに転送
みたいに…。

SG12864Aみたいな128×64ドットLCDだと
1ドット=1ビットでも1024バイトが必要に
なるはずなんですが、テキスト文字表示だけに
特化するならマイコン側にグラフィックVRAM
を持つ必要は無いので、マイコン側に必要なのは
テキストVRAMと変換処理ロジックだけ。

128×64ドットを1キャラクターあたり
8×8ドット単位とすれば128バイトで済んで
しまいます。
tiny2313じゃぁ厳しいけど、もうちょっと
大きいマイコンなら何の問題も無いでしょう。

忘れてはならないのは、jisとshift-jis
の変換とか、その辺りに待つわる文字化けとか、
そのあたりかな。

ハヤニエLCDを工作に引っ張り出すか、
もしくはMEGA128のオンメモリに組み込んで
リアルタイムのビデオ表示に使うか…

イロイロ使い道は有りそうな予感。
( ̄ー ̄)



コメント ( 0 )