アーカイブ

2010 年 4 月 18 日 のアーカイブ

XMEGA-A4(8)

2010 年 4 月 18 日 コメントはありません

なんか、もう、ヘトヘト(なぞ

LCDをサクッと。

つーか、初期化コマンドが多すぎて、ゲンナリなので(T_T)
横着して人様のサンプルを(ぉぃっ

とはいえ、それじゃ癪なので、
昔ながらのBoxFillにしてみました(を

VRAMの書き込み先アドレスに関するレジスタが
X座標とY座標をうまく割り付けてあるので、座標即値で指定できるのはいいね。

つーことで。
LCDの表示まで一応。
XMEGAだろうと、32MHzだろうと、ポートのパタパタではこれが速度限界かな。
まあ、表示領域の矩形を設定してバースト処理にすればもう少しは速くなるかもしれないけど。

今日は疲れたので、ここまで。

何故か次は、PSoCをやらねばならぬようです(なぞ

カテゴリー: Project, 電子工作 タグ:

XMEGA-A4(7)

2010 年 4 月 18 日 コメントはありません

さて。
とりあえず、片方向は出来たので。

LCD側を作りますか。
ネタとしては、MicroSDとかもやらなきゃならないんですが、後回しで。

付属していたタッチパネル用のケーブルがコネクタの根元から抜けてしまったので
仕方なく基板側のコネクタを取っ払い、半田付けになりました。

見ての通り、CPU基板にスタッキングできます。
というか、ウチの製作物で基板サイズにこだわってるのは、
この為なのよね。

秋月電子の95mm x 72mmの基板を基準として考えてる。
今までPCBで起こしたものが大概このサイズになってるのは
CPUでもI/Oでも、スタッキングして使えるから。

で。
LCDの設定としては、買ってきたままだと16bitバスモードになってるらしい。
それを変えるには、キャリーボードからパネルを剥がしてR2をR1へ付け替える。

たしかに、フレキにシルクが入ってた。
この辺は、先駆者たちの情報に感謝。

そういえば、元々XMEGA128A1で16bit接続しようと思ってたから
やってなかったんだ。

そんなこんなで、バックライトぐらいは確認できるかな。

ほいっ。
ただのI/OポートでMOSスイッチをONしてるだけ。
そのうちここもPWMにしてやらないとね。

そんな感じ。

カテゴリー: Project, 電子工作 タグ:

XMEGA-A4(6)

2010 年 4 月 18 日 コメントはありません

やっと本題。

内蔵発振器32MHzで動いてる状態で
ボーレートの設定値を計算すると
10進数で51。

とりあえず、送信レジスタに値を突っ込むだけのコードで実験。
一応、書いていいときはステータスを見て確認。
[code lang=”cpp”]
while(1)
{
if( USARTE0.STATUS & 0x20 )
USARTE0.DATA = 0x41;
};
[/code]
普通、こんなもんでも動くよね。
でも、化ける(爆
どうにも化ける。

イロイロやって、USARTのサンプルプログラム(AVR1307.zip)を参考にして
クロック設定からやり直し。

サンプルどおり内蔵2MHzで9600bpsを設定すると・・・
化けない。

うーん。

32MHzに戻して、もう一度考える。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

まさかね。

[code lang=”cpp”]
while(1)
{
while( !(USARTE0.STATUS & 0x20) );
USARTE0.DATA = 0x41;
};
[/code]
まあ、確かに・・・
こっちの書き方なら、その場でフラグ待ちしてその直後で書いてるから
次にフラグ見るときは、間違いなく動いてるのかも。

フラグの立つタイミングと送信レジスタの中身がなくなるタイミングが
重なって、まだ最後の数ビット残ってるところに書き込んでた・・・・のか?

この2つのコードにそれほど違いがあるようには思えない。
もしくは、最適化で何か起きてるのかも。
まあいいや。

そんな感じで。
解決。

とりあえず、ここまで出来たらあとは
LCD側の配線をしてしまわねば。

カテゴリー: Project, 電子工作 タグ:

XMEGA-A4(5)

2010 年 4 月 18 日 コメントはありません

USARTを動かすには、まずクロック周りをきちんと抑えないと
設定値の割り出しすら出来ない。

最近のCPUを使うにあたり、かならずといっていいほど躓くのが
クロック周りの設定。

各I/Oモジュールに供給できるクロック源が複数ある上に
そのモジュールと源振の間にPLLだのDLLだのプリスケーラーだのと
イロイロ通ってくるので、その辺の設定をよく読み解かないと
一体何Hzが選択されてるのかもわからない、というのが良くある。
しかも、分かりにくい。

気の利いたメーカーなら、その辺の設定値を算出するようなエクセルファイルがあったり
サンプルコードを用意してる。

XMEGAに至っては通常のI/Oポートではなく、
「どこかのビットをセットして何クロック以内に書き込め」とか
そんな制約が付いてる。
この場合、C言語で書いたんじゃ多分ダメだろう。

で、今回は。
ここまでに充分に時間があったにもかかわらず
実はドキュメントの詳細は殆ど読んでないという現実を鑑みて(爆
とりあえず、ATMELのサイトから
解説pdfとサンプルプログラム(AVR1003.zip)を取得。

コードを読む限り、問題はなさそうだったので
そのままリンクして、サンプルと同じように呼び出し。

とりあえず、クロック周りは解決。
内蔵32MHzで動いてるようだ。

でわ。
やっと本題。

・・・・つづく(ぉぃっ

カテゴリー: Project, 電子工作 タグ: