--/--/--  --:--    スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2010/10/30  00:04    PSG ShieldでMIDIを再生
Make: Ogaki Meeting 01にて手に入れたPSG Shieldですが、
このまま死蔵したらもったいないので実際に動かしてみました。

PSG ShieldとはArduino用のシールドの1つで、
ヤマハの音源ICであるYMZ294を搭載したシールドです。
アンプの回路とスピーカも実装済みなので、
Arduinoとこのシールドだけで音を鳴らすことができます。
気になる方はこちらをどうぞ↓
shield.io - PSG Shield

さて、このPSG Shieldを手に入れたのはいいのですが、
残念ながらArduinoを持っていないので、
てきとうにArduinoの代わりとなる基板を作成し、動かしてみることにしました。
残念ながらYMZ294のデータシートは手に入りませんでしたが、
ネット上の情報によれば汎用バスに接続できるようになっているようなので、
死蔵していたATMEGA8515からバスを出して制御してみることにしました。

それでは実際に基板を作っていきましょう。
本当はユニバーサル基板で作ろうと思ったのですが、
Arduinoのコネクタのピッチが一部0.1inchではないので、
楽するためにArduino用ユニバーサル基板を買ってしまいました。
P1020306s.jpg
本来はオリジナルのシールドを作れるというものらしいですが、
別にシールド側ではなくArduino側をコレで作っても「大丈夫だ、問題ない」ということで。
適当にAVRと必要なIC関係を配置してUEWでさくっと配線していきます。
YMZ294はマルチプレクスバスでの接続となるので、
とりあえずMEGA8515のD7-0とYMZ294のD7-0を接続、
あとは!WRはそのまま接続し、YMZ294のA0はMEGA8515のA8に接続。
!CSもMEGA8515のアドレスバスを使って作ろうと思うのですが、
そのままでは論理が逆なので、ワンロジックのNOTを使い、A9をNOTして!CSに接続します。
あとは音源ICのリセット端子をAVRのIOからリセットできるようにしておきます。
ついでにPCと通信できるようにRS232のレベル変換ICものせておきます。

そんな感じで出来上がったのがこちら。裏面は汚いので省略で。
P1020312s.jpg

これを実際にPSG Shieldとあわせるとこのような感じに。
P1020322s.jpg
と言っても、シールドがかぶさるのでぜんぜん見えませんが・・・。

そしてプログラムですが、今回はこのPSG Shield用に公開されている、
PSGShield_DEMO_A_V132のプログラムを移植しました。
PSG.cppはArduinoのためにIOを叩いて制御しているので、
出力関係を全てバス制御での出力に書き換えました。
今回アドレスバスのA8とA9を接続しましたが、
アドレス0x025Fまでが内部で使用しているため、
出力先のアドレスは0x0260以上でないとA8,9にアドレスが出力されないので注意です。
今回は無難に0x8200と0x8300のアドレスにアクセスするように書きました。
あとはメインプログラムも適当に移植してあげれば完成です。
ATMEGA8515はRAMが512Bしかないため、
音程のテーブルは全てROM上配列にしないと入りきらないので、
そこも注意が必要だと思います。

最後にshield.ioで説明している通り、シリアルMIDIドライバをインストールして
MIDIをシリアルから出力すればこのボードからMIDIが再生できるようになるはずです。
移植作業で済んだのでだいぶ簡単に遊ぶことができたのでよかったです。
(あるミスで2日間動作せず悩み続けていたのは内緒)
プログラムは勝手に移植したものなので上げませんが、
shield.ioの方にArduino用のプログラムが上がっているので
読んでみるとおもしろいと思います。

今回、実際にこのボードはうちの文化祭で展示していました。
展示の時にはFFやDQ、カービィやゼルダのMIDIなどを再生していましたが、
「懐かしい曲が!」って言ってくれる人が何人かいたのでよかったです。

Arduino持っている方はデモプログラムを書き込めばすぐに遊べるので、
よければ入手して遊んでみてください。
たまには音がなる回路もいいものですね。
暇があれば、もう少しこのボードを拡張してみたいと思います。
スポンサーサイト
AVR
2009/09/13  01:16    ATXMEGAの入手先の現状
なにやら最近になりやっとATXMEGAが手に入るようになってきたので、
入手可能な通販サイトを調べてみました。

以下が、サイトと商品です。
Digi-Key:ATXMEGA128A1(CBGA) & ATXMEGA64A1(CBGA)
共立:ATXMEGA128A1(TQFP)
チップワンストップ:商品多いので略称表記 ATXMEGA128A1、64A1、256A3、64A3、32A4、16A4

値段で考えると断然Digi-Keyですが、CBGAは手で半田付けできる訳がないので却下。
そうなると、共立かチップワンストップのATXMEGA128A1あたりが狙い目になりそうです。
やっぱり手軽さと値段で考えると共立が一番妥当な気がします。
それでも1つ1800円は結構高い・・・。

今日簡単にXMEGAのPDFを読んでみましたが、
感想としては、
「AVRのコアはそのままに、周辺機器を32bitマイコン並みにしたAVR」
という感じでしょうか?
AVRコア自体は同じもので、命令は今までのAVRと互換です。
ただし、命令一覧をぱっとみた感じでは新機能の暗号化の命令が追加されていました。
動作クロックはATMEGA128の2倍である32MHzで動作が可能。
更にATXMEGAは32MHzの内臓クロック発振器が搭載されているため、
外部にクリスタルを付けることなく最大速度で動作ができるようです。
MEGAシリーズの上位におまけのようについていたバスIFは強化され、
まともに使えそうです。ただし、XMEGA128A1でもラッチは必要そうですが・・・。
通信機能も充実しており、MEGAシリーズとは比べてどれも4倍ほど積んでいます。
(UARTは8つ、SPIとTWIは4つずつ。)
あと今回の目玉といえばDMACとDACでしょうか。
DMACはチャンネル数を4チャンネルもち、UARTとSPIもアクセス可能です。
SPIにDMACでアクセスできるということはSPIでSDなどを接続しておけば、
そこからSRAMへDMACが転送してくれるなんてこともできるのかもしれません。
また、ライトはできませんが、FLASHとEEPROMもリードできます。
DACは2つ搭載されており、努力しだいでは音楽再生も可能かもしれません。
他にもいろいろ機能が追加されていますが、きりがないので。
とにかく、かなり高機能なデバイスであることは間違いないですね。
問題は、今までのISPライタが使用できないこと。
XMEGAにプログラムを書き込むには、ATMEL純正ライタをPDIモードにするか、
JTAGでの書き込みしか今のところはできないようです。
HIDaspxのようにATtiny2313などで書き込めるようになればいいんですけどね・・・。

とりあえず気分だけでも、ということでテストが終わったらスキルアップも兼ねて
ATXMEGA128A1のマイコンボードを設計してみようかと思います。
とりあえずサイズはInterfaceについてきたV850基板程度には納めたいなと。
更に、ピンの電源などの互換性は抜きにして、
Interfaceの位置にピンヘッダをあわせた基板にしてみようかと思います。
機能としては、
・USBminiBコネクタとUSBシリアル変換ICの実装によるUART通信(プログラム書き込み不可)
・USBでPCと接続するだけで使えるように3.3Vレギュレータ
・もしスペースと余力があれば、SRAM実装
・基板上にはPDIコネクタとJTAGコネクタのパターン
とこんな感じの予定です。
欲張るだけ欲張った感じですね。
まぁやっぱりこうやって基板の仕様を決めているときが一番楽しいですから。
どうなるか楽しみです。
AVR
さて、昨日載せた基板について、じっくり書いていこうかと思います。
最初の4枚は、先輩に先輩の携帯で撮影していただいたので、
私の3年前の携帯に比べて写真が綺麗です(笑)

MA330035.jpgMA330036.jpg
まず、削った上体の表裏です。裏は削った状態で写真を撮り忘れたので、
AVRがすでに乗っています。
表がドリルの先端角90度、裏が先端角60度で削ってあります。
裏を写真で見れば分りますが、ちゃんとどの配線も切れずに切削できました。

MA330037.jpgMA330038.jpg
これが、FFCのコネクタを半田付けしている時の写真。
目の良さだけは自信がありますが、今回ばかりは望遠鏡を駆使してます。
2枚目が半田付けした後の写真。
写真が歪んでるのは望遠鏡のレンズを通して撮影したためです。
レンズを通すとよく見えますね。
ちなみに、全部付いているようですが、
実際動作させてみると、何本も接触不良がありました。

CA3300012.jpgCA3300032.jpg
完成した基板がこちら。
半田付けが汚いのは仕様です。
上に大きく飛び出す部品は極力なくした結果、
表はスイッチ、裏はFFCコネクタの高さで収まりました。
かなり薄いですし、小さいです。
表のコネクタは上がライタコネクタ兼汎用IOの10ピン、
右上から、電源コネクタ、汎用IO、インバーター出力となっています。


お待ちかねの、画像出力をやってみました。
結果・・・
PAP_1085.jpg
原因不明のラインノイズが出てますね。
とりあえず表示した画像はわかるようです。
・ノイズの法則性としては、上下の白だけのラインでは発生しない。
・色の変化が多い周りで多く発生?
・必ずそこに出るわけではなく、再描画のときにノイズの位置が変動する。
(変動といっても、上の2つの条件の範囲内で)
のようです。
このノイズの原因は何だろう・・・。
可能性として、現在思い当たる節といえば、
・出力されるCKが一定周期でない。
・単に出力する速度が遅いから。
ぐらいですかね?
画像データに元からノイズが混入の可能性は、ノイズの変動からみてないと思います。
出力されるCKが一定ではないのには、画像の保存形式が関係しています。
去年の秋ごろに書いた、独自の形式で画像データをROM上に保存していますが、
容量節約のために連長圧縮(ランレングス圧縮)を用いています。
マイコンは圧縮されたデータを何回連続したかのデータに解凍し、
解凍されたデータの示す回数だけ出力します。
クロックはIOを叩いてトグルしていますので、
連続し始めにはクロックの立ち上がりが遅く、
連続データ中は高速にデータ出力といったような、
出力クロックの不安定性が発生します。
実際に、文字や立体(色の変化が多い)の辺りではノイズが発生しているので、
この可能性が高いかもしれません。
単に描画が遅いのは、プログラムの改良で少しは改善できるかもしれませんが、
ある程度限界はみえると思います。
現在は、私が目で大体測ったところ、5~6fps程度だと思われます。
先人の方で、ATMEGA644P(20MHz)でこの液晶を表示していらっしゃる方がいますが、
7fps程度らしいので、16MHzのATMEGA128ではたぶんこの程度が限界かもしれません。
さて、疲れたので今日はこの辺で。
明日は、プログラムの改良と、
FPSを犠牲にする代わりに安定したクロック供給について考えてみたいと思います。


今回、この液晶を使うに当たって、参考にしたサイト。

フルカラーLCDモジュールの解釈 - なる研 - naru様
秋月液晶の解析の第一人者?であり、解析結果にお世話になりました。
今回の液晶の出力は、こちらの解析結果を元にすべて製作しています。

秋月カラーグラフィックLCDモジュールの解析 - xcrOSgS2wY様
さまざまなテストパターンの掲載や、製作の過程を載せていらっしゃいます。
テストパターンを参考にさせてもらいました。

液晶症候群(後編) - ALTERAでいこう - 長船(アルテラマスター)様
某動画でも有名な方です。
この液晶を動かすモチベを維持してくれたサイトといっても過言ではないかも。

秋月300円カラー液晶 - STRV's工房 - STRV様
この液晶をATMEGA644Pで動かしている方です。
この製作記事がなかったらAVRで液晶駆動なんて考えなかったかも(爆)
AVR
2009/02/26  23:35    テスト期間終了
今日のテストはたぶん全部できた気がした。

さて、今日は例のALBISボードを加工機で削ってみました。
気になる0.5mmピッチでしたが、なんとか削れました。
まぁあの加工機なら0.5mmが限界ぐらいだと思います。
夜になるまで半田付けの結果・・・
とにかく見てほしいのがこちら!
LCD-TEST
テストパターンでた!!!
下ができた基板。
やっぱりLCDが映るとうれしいですね!
最初、ラインノイズみたいなのしかでてなかったのですが、
オシロスコープをひっぱりだして配線を確認したところ、+10VがFFCに来ていない!
半田ごてでコネクタの半田付け部分を暖めてあげたら、
今度はつながったようでちゃんと+10Vでました。
基板の詳細はまた次の記事で詳しく書こうと思います。

明日はまた臨時休業なので、お休みです。
ロボカップの回路を作ると共に、
画像の変換プログラムを改良しないとこの基板だと表示できないので、
改良を予定しています。


LCDいいね!ヽ(*・ω・)ノ。・:*:・
AVR
今日の昼間からテストみたいです。
学年末テストですから、まじめにやらないと・・・。
といいつつBLOG書いてるのはどうかと思いますが。

ふと、ATMEGA128がバス接続可能なことを思い出したのでいろいろ調べてみた。
もしかしたら、外部にSRAMを増設して、液晶の領域を確保できるかもという試みからです。
とりあえず分ったことを箇条書きにすると・・・

・外部にSRAMを接続する場合、ポートAとポートCとポートG(一部)が必要
・ATMEGA128のバスはポートAがアドレスバス兼データバスになっている
・ポートAがデータとアドレスを兼用しているので、アドレスバスの間に74xx573が必要になる
・ATMEGA128のメモリ領域は最大が$FFFF(64KB)である
・すでに内臓メモリでIOポートやRAMなどの予約領域が$10FF存在する
・よって外部に64KBのSRAMを接続しても予約領域の分は増設RAMが使えない。
・内部のレジスタ操作をすることによって、外部SRAM64KBをフルに使うことができる。

とりあえずこんなところ。
もし、あの液晶の配列を作って、データを格納してみたとして、
解像度400*96、各色6bit(合計18bitだが、各色1byteで計算したいので3byteで仮定)
すると、400*96*3=112.5KBとなる。
これじゃあもし外部SRAMを増設してもオーバーは目に見える。
もし、R:G:Bを5bit:6bit:5bitにして2byteに抑えたとしても、
400*96*2=75KBとなり、これでもやはりオーバーしてしまう。
更に色を絞っていくのもよいが、どんどん色が劣化してしまうのは目に見えるので
それはやめておくことにする。
要するに・・・
AVRじゃどんなにがんばっても
RAMに液晶(400*96*3byte)バッファを構築するのは無理そうってことです。
まぁ人によっては解像度200*48の画像を拡大して表示している方もいますが、
せっかくの解像度ですから、400*96で表示したいですしね。
あと周波数とかの問題もありますし、
AVRじゃ液晶ドライバには無理があるってことがわかります。
まぁ前から私のやりたいのは、画像の表示ですし、
(できるなら0.5秒間隔ぐらいのGIFアニメーションみたいな紙芝居的動作ぐらいはしてみたい)
とりあえず、画像を表示することが目標です。
某FPGA使いさん達のように動画を再生したいとかなら、
素直に、ハイパフォーマンスなマイコンを使うか、PLDを使うしかないと思います。

バスについてまさか調べるとは、私のAVRの使用範囲では夢にも思ってなかったですが、
まぁこんなこともあるんだなぁと。
来年度ちゃんと進級できていると、授業でH8を使ってバス接続とかするそうです。
話に聞くと、マイコンの授業の先生がバス大好きな人だとか。
「うちの部の人は質問攻めにあったりするから気をつけろよ」と先輩が言っていたので、
注意はしたいと思ってます。
AVR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。