「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



この間作ったオプティマイズのMAX2ボード。
LEDピコピコのVHDL書いて、自作の
ByteblasterMV
で書き込んでみました。
(ByteblasterMVはPCBEデータを公開
 しているので、ご興味のある方はどうぞ)

で、その辺りの写真類を。
まずは完成品。gootのKS-30Rで無理矢理ハンダ付け。
おかげで汚い仕上がり。

チップ部品をKS-30Rでハンダ付けってのは無理があるっす。
一応、テスターを当てて問題無さそうなことを確認。


まぁ、見た目は置いといて実際に使ってみることに。

右が自作のByteblasterMV。奥にある
のが問題のCPLDボード。こうやってブレッドボード
的に使います。

手前にLEDその他部品一式。オシレータは
5V用48Mhzを無理矢理3.3Vで動かしてます。
一応発振はしてるようですが、タイミングはシビアに
見れば狂ってるかと思います。ま、動作確認だけなので
タイミングはどうでもいいです。

ボード上のレギュレータで3.3Vを作ってくれるので、
3.3Vを取り出して外部回路を駆動するようにすれば
ブレッドボード上の部品と直接i/fできるので、
色々あそべるってわけです。

なかなか便利。


トラ技2006年4月号の付録と比べたのがこの写真。

容量約2倍で大きさおよそ半分。

なかなか便利です。
問題はチップ部品だな…。まぁこのくらいなら
ハンダ付け出来なくも無いってことが判ったけど、
やっぱり出来ることならチップ部品じゃない
モノがいいな…。


次は、これでコンポジットビデオ表示とか
試してみようかな。
まずはこの間のTINY2313用プログラムと
繋いでみて、その後CPLD内部でビデオ信号
の生成自体も試してみよう…と。

うまくいくといいな。



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




http://make-it-hazy.blogspot.com/2009/02/tinypong_07.html
http://make-it-hazy.blogspot.com/2009/02/tinypong_20.html
TINY2313でPONGを作ってしまう記事を
発見。

ワンチップマイコンゲームの原点って言えば
PIC16F84のブロック崩しが昔から有名ですが、
マイコンでビデオ表示といえばやはりAVRの方が
向いてるんだろうなぁ…。

完成品のムービーを見る限り、かなりの出来のよさ
という感じです。

わたし的にこのページで目を引くものは2つ。

一つはレジスタマップ。もう一つはビットイメージを
.dbでビジュアル的に書く際の書法。


レジスタマップ(変数表)的なものは、私も
ある程度の規模のプログラムを書くときには
一応書くことにしているんですが、こういう風に
サブルーチン毎に用途を決めるということは
しなかったな…。これはお勉強になった。

これまで私の頭の中にあったのは、
 ・高級言語では、サブルーチン毎に変数は
  局所化して使用する(いわゆる処理や変数の
  「構造化プログラミング」)
 ・アセンブリ言語で組む場合、普段はレジスタでは
  なくメモリマップ上にモノを記憶させておく
  (変数の変わりにRAMを使う)
といった固定観念。サブルーチン間でレジスタの共用
を厳格に管理するっていう概念が頭の中に無かった
からなぁ。

まぁ、AVRのようにレジスタが大量にあるマイコン
ならレジスタを変数のように使うことは普通に出来て
しまうわけだし、スプライト表示器などでも実際に
使ってたし。
ただ、もちろんルーチン間でごちゃごちゃにならない
ようにする方法についてはこういう風にドキュメントに
明示しないにしても、頭の中ではあれこれやりくり
してました。
(正確にいうと、局所変数的なレジスタと大域変数
 的なレジスタは分けて使ってましたけど)

こういう風に、レジスタとサブルーチンのマトリックス
で表しておけば使いやすいな…。使いまわしも効くし、
間違えも防げるはず。すばらしい。


あとビットイメージの表現方法。
こういう風にソース上で1バイト単位のビットイメージ
を描きたいっていうニーズは多々あると思うんですが、
AVRのプログラムメモリエリア(cseg)は
1ワード単位(2バイト単位)で格納しないと
ウォーニングが出るし、2バイトのところに1バイト
だけ格納される(のこり1バイト分は0b00000000が
格納される)ことになっちゃう。

ってことで、これまではPC上でツールとか組んで
hexデータを作り出したりしてましたが、このサイト
の方法は頭いいなと思いました。

.setでビット列を文字列としてマクロ定義して
おいて、その定義した文字列を寄せ集めた形にして
.dbでバイトデータとして定義するっていう方法。

これなら2バイト単位で簡単に定数化できるもんな…。
すばらしい。お勉強になりました。
マクロ自体は基本的にあまり好きではないのですが、
これは解りやすい方法だと思うので、多用しても
あとで訳わかんなくなることもないだろうし、
逆にソースの可読性も上がる気がする…。


日々、お勉強だな。


お、cm見てたら山本梓が森雪のカッコしてる!
意外に違和感無いな…


(追記)
.set擬似命令って…なんだ?
.macroともちがうんだなぁ…。山根さん本に
載ってないなぁ。

(さらに追記)
.set擬似命令、解りました。
.equに似てて、相違点としてはプログラム中で
何度も再定義が出来るってことみたい。
.equだと同じシンボルで再定義するとエラーに
なるけど、.setなら上書きされるイメージみたい。
なるほどね。

以下、helpファイルより抜粋。

SET - Set a symbol equal to an expression

The SET directive assigns a value to a label. This label can then be used in later expressions. Unlike the .EQU directive, a label assigned to a value by the SET directive can be changed (redefined) later in the program.

Syntax:
.SET label = expression

Example:
.SET FOO = 0x114 ; set FOO to point to an SRAM location
lds r0, FOO ; load location into r0
.SET FOO = FOO + 1 ; increment (redefine) FOO. This would be illegal if using .EQU
lds r1, FOO ; load next location into r1




コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




CoCoNet液晶工房でこの間買っておいたnokiaの
5110液晶(白黒)。
ブレッドボード用のアクセサリを先日作ったので、
あとで試してみようと思ってPCD8544のデータシート
を眺めてみる…。

そもそもがSPIで制御できるっていう理解で買って
きたので、それほど苦労は無いだろうと思って
眺め始めたんですが…あれ?読んでも頭に入って
こないぞ???

信号名が違うからか?いや、タイミングチャートが
やっぱりSPIとはなんか違う…

なんだかんだで頭からお尻まで30分くらい何度も
何度も眺めてしまった…
ちょこっと眺めて、適当なデータをぶっこんで
何か表示させて満足満足…って行くはずだったのに…。
(TへT)


よーく眺めてみて、ようやくピンと来た。

SPIプラスαの信号なんだな。これ。

クロック信号、マスターイン、マスターアウト、
スレーブセレクトに相当する信号に加えて、
もう1個信号があるんだな。送信中のビット列が
データなのかコマンドなのかを判別するビットが。
ここが引っかかってたんだな。
D/C信号ってやつ。解った。解った。

で、D/C以外の信号はまさにSPIそのまま。
SPIモード0ってやつだ。
(クロック立ち上がりで取り込み、クロック位相
 は正論理)


こうなると、次はプログラムの構想に。

例によって山根さんの本を引っ張り出す。
SPIのページ。

I2Cと違ってやっぱ簡単だな。
それにしても、AVRのSPIは送り出しの
順番が「MSBから」だけでなく、「LSBから」
にもできるんだなぁ。
あまり他では聞いたことが無い気がするなぁ。

まぁいいや。

とにかく、SPIをモード0で使って、MSBから
順に送り出して、8ビット目のクロックとあわせて
データ/コマンドを識別するビットをいっしょに
送ればいいわけだな。
といっても、SPIはハードウェア処理させたいから、
1バイト送り出す事前にデータかコマンドかのビットを
設定しておくっていうのが現実的な方法だな。
これはこれでヨシと。


もう1点微妙なところ。データシート見てると
ページによってはVddには2.7~3.3V、
ページによっては定格7V(入力端子はVdd+0.5V)
って書いてあるんだけど、どっちなんだろう?
5Vで使いたいんだけどなぁ。

LEDの方は適当でもいいとして、コントローラー
の電圧と入力信号の電圧って、5VがOKなのか
どうなのか… 5Vつないだ途端に画像じゃなくて
煙が出たら嫌だからな…


arduinoにPCD8455用ライブラリが公開されている
からこれも試してみたんだけど、arduinoは
5Vのしか持ってないからな…
3.3Vだけだとしたら、3.3V用のarduinoを
使えってことなのかな?

http://www.arduino.cc/playground/Code/PCD8544
こっちにはやっぱり3.3Vって書いてあるみたい…
うーん。



コメント ( 4 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする