--/--/--  --:--    スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2009/03/01  00:41    LCDプログラムの改善案
昨日の夜、BLOGを更新したあとにどうすれば一定のクロックをだせるか考えてみた。
結果、割り込みとリングバッファを使って出力する方法を考え出した。

やり方はいたって簡単。
256byteのリングバッファ(配列)を3色分+フラグ用で4つ作っておいて、
mainでは、ひたすら解凍したデータをリングバッファにデータを格納してゆく。
一定周期でタイマ割り込みをかけ、リングバッファからデータを抜き出して出力する。
これだと、解凍していないCPUのアイドル状態を利用して、
今表示しているよりも先のデータをバッファに出力できる。
CPUが解凍で忙しいときは、バッファからどんどん出力していって、
またアイドルのときにはバッファにどんどん溜めていけば、
CPUを無駄にアイドルにすることなく効率的に解凍・出力ができると考えたものです。

実際に動作させたところ、確かに方法はあっていたし、画期的な方法だったのですが、
どうしても動作周波数が16MHzでは遅く、
色データが連続しない(文字の辺りなど)辺りでは、バッファの溜めも使い切ってしまうため、
CPUのバッファに溜める動作速度が出力動作速度に間に合わない現象が発生いました。
この方法を改善するには、どうしてもCPUの周波数をあげてバッファに蓄える速度をあげるか、
割り込みの発生周期を遅らせて、リフレッシュレートをさげるかのどちらかしかできません。
ある程度はリフレッシュレートをさげましたが、やはりバッファへの出力は追いつかず、
0.5fpsほどで動かしてもうまく文字のあたりが表示されないという現象がおきました。
ATMEGA128の周波数限界が16MHzなので、これ以上の動作は無理です。
よって、この方法でも綺麗な画像の表示はできませんでした。

現在思い浮かぶ方法としては、
・容量はかさばるが、非圧縮データを使えば解凍する手間がはぶける。
・すべてアセンブラで書いて、動作をできるだけ早くする。
のどちらかだと思います。
まぁ可能な方では非圧縮データの方が現実的かもしれません。

非圧縮データを出力して、AVRで表示させるプログラムも書きたいのですが、
ロボカップのロボットのお披露目?が7日にせまってきているので、
とりあえずLCDはいったん保留にして、ロボカップの回路をつくりたいと思います。
7日には形だけでもいいので、ボールを追う程度にしないと、
いろいろまずそうなので、がんばってみたいと思います。
ただ、まだ回路が全部完成していなかったりするので、あと一週間が追い込みですね。
テスト終わったとおもったら、今度はロボカップで忙しい。
なんとも忙しい春休みが訪れそうです。
ちなみに来週は、テスト返し+終業式+卒業生を送る会があるそうな。
実質春休みは6日からになりそうです。
Secret

TrackBackURL
→http://amenotiyukizora.blog76.fc2.com/tb.php/268-073192d0
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。