2013年10月21日月曜日

SPI 液晶ディスプレイ

秋月電子通商で扱われるようになった SPI 接続のグラフィクスディスプレイ.コントローラチップ ST7565 の Arduino 用ドライバは,Adafruit が公開しているものがある.
初期化シーケンスが違うためかコントラスト設定がうまくいっていないようだが,なにか表示されるようにはなる.商品説明書のとおりに変更すると,コントラストもきれいになる.ディスプレイの上下やピクセル数をあわせる必要もありそうだ.

しかし,RAM の小さいマイコン,たとえば Arduino の ATMega328P の 2KB 程度,では実用にならないことに気がついた.ディスプレイコントローラ ST7565 へはデータまたはコマンドの書き込みのみなので,表示されているピクセルの状態を読み出せない.グラフィックディスプレイとしてピクセル単位でアクセスするには,描画する側にスクリーンバッファが必要になる.128x64 ビットで 1KBytes を消費してしまう.

SPI インターフェースで高速なので残念だが,RAM の多いチップ向き.
Strawberry Linux の 102x64 グラフィクス LCD も SPI バスで,商品ページにリンクされているデータシート?を見る限り,スレーブデータアウトの端子がないので,これもビットマップアイコン/キャラクタディスプレイということのようだ.

2013年6月9日日曜日

Strawberry Linux の lpclcd 用コードを Keil mdk で開発できるのか

lpclcd はM0でフラッシュのサイズは32kB、LPCXpresso や評価版でコンパイルできるが、C++ が使えない。デバッガも使えるほうがいいので、mdk で使いたい。

まず、JTAGピンをつけてULINK/MEやST-Link2をつないでみたが、プログラミングアルゴリズムとして NXP LPC11xx 32kb を選んだだけでは、アップロード後の verify で失敗する。
とりあえずあきらめ、USB ストレージとしての flash 書き込みを試みる。

まず、.axf (elf) から.bin に変換する。
Keil に fromelf というコマンドがついていて変換に使えるらしいが、パスが変わっていた。
ビルド時に変換もするよう、Project オプションの User コマンドに追加する。
C:\Keil\ARM\ARMCC\bin\fromelf.exe --bin "#L" -o "$Poutput.bin"
#L と $P は、パス変数のようだ。

これでできたファイルを USB ストレージにコピーしても書き込みまれておらず、動かない。実行可能にするには、チェックサムを付加する必要があるらしい。LPCXpresso のプロジェクトの makefile に書いてあるものを参考にすればいいと思うが、ARM が配布している CHECK8.EXE コマンドは 64bit Windows 7 では動かない。ので、PCXpresso に用意されている checksum コマンドを使う。

解説ページ

C:\nxp\LPCXpresso_5.2.4\lpcxpresso\bin\checksum -p LPC11U24_401 -d "$Poutput.bin"

とりあえず、LPCXpresso プロジェクトのコードを(コードプロテクション CRP のマクロはコメントアウトして)ビルドして、書き込んで動いたのでよしとしよう。

2013年4月28日日曜日

avr-gcc/g++ の link で flash イメージがやたら大きくなる

自分でコンパイルしてビルドする場合,イメージがやたら大きくてアップロードでエラーが出ていた.
リンカがフラッシュ書き込みイメージに不必要な部分をふくめないようコンパイラには
--ffunction-sections --fdata-sections
オブションを,リンカ avr-gcc/g++ には
--gc-sections
を-Wl,-Map,avrfreertos.map,--gc-sections のように入れる必要があるようだ.
Eclipse の auto makefile でビルドするときは Properties/C/C++ Build/Tool Settings の AVR C++ Linker/General で Map filename の最後に , をつけてムリヤリ入れる.

Arduino IDE でコンパイル/リンクメッセージの表示をさせて,同じにすればいいようだ.