--/--/--  --:--    スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2010/09/24  00:34    AVR Dragon買ってみた
Digi-KeyでAVR Dragonを買ってみました。
P1020225s.jpg
噂では基板固定用の穴が無いと聞いていましたが、
届いたものはネットでみた画像の物と少し部品の配置や種類が変わっており、
ちゃんと固定穴が用意されていました。
不便な所がちゃんと修正されており、
地味ではありますがユーザーの声が届いていたのかなと思いました。
とりあえずPCに接続して認識してファームアップデートまではしましたが、
JTAG用の10PINケーブルをまだ用意していなかったので
実際にデバッグはまだしておりません。
またカンファの時に東京でケーブルを買ってこようと思います。

さて、前回いじっていたXMEGAボードですが、
UARTでの転送では時間がかかりすぎるため、SDをつないでデータを読み出してみました。
恥ずかしながら、今までSDを使った回路を作ったことがなかったため、
初めての試みとなりましたが、思ったよりはだいぶ簡単にできました。
もちろん、1から自分でプログラムを書くのは大変すぎるので、
有名なELM - ChaN氏のFatFsモジュールを用いました。
下位レイヤをXMEGA用に自分で書く必要がありましたが、
MEGA64でのサンプルが同ページにあるため、
参考にしながら下位レイヤの関数を書きました。
下位レイヤが正常に動けば、あとはプラットフォーム非依存な上位レイヤの関数を用いて
データをやり取りしてあげればOKです。
BMPデータのヘッダ情報へ構造体でアクセス出来るようにするモジュールを書いたので、
SDから一度SRAMへBMPデータを転送し、自作した関数でヘッダ情報を読みだしてから、
その情報を基に秋月液晶へ表示するというプログラムを書きました。
一応SDのルートに解像度が400*96かつ2・16・256色のBitmapファイルを入れておけば、
表示できるようにしました。タクトスイッチを使って次の画像へ切り替えることができます。
P1020230s.jpg
前の写真からmicroSDスロットとタクトスイッチが追加されただけですが・・・。
せっかくの機能も写真じゃ全然伝わりませんけど・・・。
今後の課題としては24bitBMPに対応したいですが、
RAM容量が不足しているため実装できない状態です。
今実装してあるSRAMは128KByteなので容量的には足りているのですが、
現状では64KByteにて使用しています。
64KByteを超えるアドレスへのアクセスにコンパイラが対応してくれれば
128KByteの領域を全部使用することができるのですが・・・。まぁ様子見ですね。


・追記
ふと思い立って、ATMELのEBIアプリケーションノートにある
サンプルプログラムを見てみたところ、
「GCCは24bitアクセスに対応してないから、
64KB境界を超えてアクセスするときには自分でRAMPZレジスタを書き換えてね」
と書いてありました・・・。
昔に実は、(シミュレータ上にて)自分でRAMPZレジスタを叩いて
無理やり0x10000にアクセスしたことがあったのですが、
実際にその方法が正しいやり方だったそうです。
なんかすっきりしないような・・・。
まぁ現状ではそれしか方法がないそうなので、また時間があったらやってみたいと思います。
スポンサーサイト
2010/09/06  00:56    XMEGAでUART&EBI
久しぶりにXMEGAについてです。
今回は、UART(USART)とEBIを試してみました。

P1020201.jpg
一応試している回路の全体像です。
XMEGAに秋月300円液晶とSRAM(CY62128EV30)を接続しています。
SRAMをつなぐことによって、今まではFLASH上に定数配置していた
イメージデータをSRAMに置くことができるようになるので、
読み出し速度の向上(結果的にはSRAMが45nsなのであまり向上しなかった)と
何かしらの方法で外部からイメージデータを転送してSRAMに格納し、
表示することができるようになります。

P1020203.jpg
SRAMはEagleにて変換基板を設計し、学校の基板加工機で削って実装しています。
以前にも少し書いた覚えがありますが、
XMEGAではついにラッチを使うことなくバスを出せるようにもなりました・・・が、
今の所XMEGAのシリーズで物理的にPORTLが存在しないのでラッチを付ける必要があります。
今回は変換基板の裏側に74AC573を実装しており、A0~A7とA8~A15を多重化しています。
まだ登場してあまり時間が経っていないせいか、
まだまだデータシートには不明確だったり分かりづらい部分が多くありました。
例えば、EBIは最大64MHzで動作可能と書かれており、
最初はタイミング表を見ていたのでシステムクロックである
32MHzを2逓倍してEBIは動いてくれているのだと思っていましたが、
ねむいさんのぶろぐ - いろいろ試す4
にてバスの64MHz動作の注意について書かれていたので、
32MHz内蔵発振器をCLKSYSに使うとバスも32MHzで動作してしまっているようです。
私は現状は32MHzのままで動作させていますが、
64MHzでバスを動作させたい方は注意が必要です。

EBIを使った時の感じとしては、

WinAVRにてXMEGAから可能になったメモリ空間0xFFFFを超えるアクセスができません。
(強引にレジスタをいじると一応できます)
例えば0x10000にアクセスしようとすると0x0000にアクセスしてしまうようです。
以前Twitterにていえなが氏も同じ現象に出くわしている事をお聞きしたので、
まだ対応できていないと思われます。

また、外部SRAMと内部レジスタなどがアドレス的に重複している場合は、
CSが下がらない?(波形は未確認)ため干渉してしまうことはなさそうです。
今回は64KB(このSRAMは128KBであるが64KBとして使用)で、
ベースアドレスを0x0000に設定しましたが、
内部予約分0x3FFFまでは内部を使用し0x4000~0xFFFFは外部SRAMを使用できました。


SRAMにROM上配列を展開し、SRAMから液晶にデータを転送して表示させようとしましたが、
なぜかデータが化けるので、デバッグのためにUARTを使用しました。
モニタは有名なChaN氏が公開されている汎用printfモジュールを実装しました。
uartの受信・送信用の関数を用意して関数ポインタを渡してあげれば、
printfなどが使えるようになり、とても便利でした。
あわせて、同氏が公開されているI/F誌付録LPC2000基板の試食のソースを参考に、
簡易モニタを実装してメモリをDumpしながらデータ化けの原因を探しました。
結果、例えば0x8000にデータを書き込むと、
0x8002、0x8004が同じようにデータが変化したため、配線不良であると予測しました。
SRAM変換基板のSRAMの足を再度半田付けし直したところ、正常に動くようになりました。
やはりモニタが使えるとだいぶデバッグが楽に行えてモニタのすごさを実感しました。

せっかくなので、UARTから表示データを転送し、
SRAMに格納して秋月液晶に表示出来るようにしてみました。
これがまた一難ありまして、
バイナリデータをターミナルから送信すればいいと思っていたので、
C#にてBMP変換ソフトバイナリ形式出力対応版を作成し、
モニタのコマンドにてバイナリファイルを受け付ける用にしてみましたが、
なぜかうまくいかないので、悩んでいたところ
ターミナル(私はTeratermを使用しています)は基本文字データのやりとりしかできず、
色々なプロトコルにてバイナリデータ転送も出来るようになっていることがわかりました。
わざわざプロトコルに対応させるのは面倒だったので、
出力データ1Byteを4bitずつに分割し0x30と足しあわせ、
数字・記号データとして転送するように工夫して転送するようにしました。
データの転送量は基データの2倍になってしまいましたが、
ターミナルからイメージデータを転送できるようになりました。
バイナリデータは76KBで、UART-9600bpsにて約101秒で転送できました。

P1020204.jpg
試しにWEBページのロゴを転送して表示してみました。
PCからバイナリデータを転送すればいいので、
わざわざFLASHに画像データを書き直すという事をしなくても、
様々な画像を表示できるようになりました。
ただし、電源を落とすとSRAMなのでもちろん消えますが・・・

今回のソースを一応置いておきます。自己責任にてお使いください。
人に見せられるようなプログラムではないですが、少しでも参考になれば幸いです。
xmega_lcd_sram_uart.txt
(拡張子をtxtからzipに戻してから解凍してください)
2010/09/05  22:09    近状報告
前回の記事が前記中間テストの終了で・・・
気づくと8月頭に前期期末テストが終わって
現在夏休み真っ最中だったりします。
BLOGの更新が捗らないのはTwitterのおかげです、はい。
よろしければTwitterの方も見てやってくださいな。 @rain_yukizora

今年から前期期末テストが夏休み前になり、
8月上旬まで学校があり、9月の下旬まで夏休みらしいです。
いつもより長いので、今年こそはゆったりした夏休みを・・・
と思っていましたが、卒研の共同研究先の企業で夏休みの間働いてたりします。
もちろん平日は全部出勤で。
なぜか夏休みなのに学校行っている時より忙しいような・・・。
そんな夏休みを送ってたりします。


さて、一応予定や書き忘れを書き連ねておきます。

4月の中旬の話しで、ずっと書き忘れていたんですが、
無事某会社に内定をいただきました。
たぶん、来年度は関東のどこかで組み込み系の仕事をしていると思います・・・

9月25日、26日はMake: Ogaki Meetingに行こうと思ってます。
もしかしたら25日のみとかになるかもしれません。
行く方法はまだ考えてません・・・。
(だって大垣は長野から遠いし、アクセス悪いし・・・高速バスとかないし・・・)
とにかくだんだんと近づいてきたので、交通手段を考えたいと思います。

10月2日ですが、高専カンファ東京に行こうと思ってます。
まだ宿とかそのへんは決めてないですが、
まぁそのうちなんとかしたいと思ってます。

10月下旬には文化祭があるので、この夏休みを使ってクラス展示の回路とか作ってます。
企画のトップが機能してないので困ってたりしますが、
まぁなんとか形にはなるんじゃないかなと思ってます。
それにあわせて、部活の方でもまた1品展示しようと思ってます。
まぁ内容はXMEGAで秋月300円液晶の予定。
本当懲りないというか、ただのアホというかそんな感じですが、
とりえあず、現状で人に見せられるぐらいにはなんとかなったので、
文化祭に向けていろいろチューニングしておこうと思います。

とりあえず久々の更新でした。
そのうちWEBも更新したいですが、忙しくていつになることやら・・・
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。