AVRのスプライト、カラー表示にした場合の
メインCPUとの接続方法を引き続き考えて
いました。
MEGA48などに内蔵しているSPI通信機能は、
先日も書いたとおり、CPUクロックの1/128
が一番遅い速度なので、20MHzで動かすと速すぎて
データを取りこぼすというのが課題でした。
チップの仕様なので、どうしようもないのですが、
だからと言って、データ送信とデータ送信の間に
waitを置くのは色々不便なので避けたい、と。
で、今日また山根さんの本をもう一度よーく読み直して
いたら、189ページにSPI通信について面白い事を
見つけました。
MEGA48など第3世代のUSARTモジュール
には「マスタSPIモード」というモードがあって、
マスター機能にしか出来ないけど、USARTモジュール
をSPIに割り当てることができ、その場合の送受信
レートはUBRRnレジスタで設定出来ると書いてあります。
おぉ!そうすれば、物凄く遅いレートでもSPI通信
が出来ちゃうジャン!!!!1200bpsとか。
マスター側だけ転送速度が遅く出来れば充分だし。
まさに「サイコーにチョードイイ」機能です。
白黒用に使ったUSARTのレートがそのまま適用
できるってことですねぇ。(ーυー) ニヤリ
http://picavr.uunyan.com/avr_m_sprite.html
白黒のスプライト表示器では、メインCPU-
スプライト表示器-背景表示器の3つのICを
USARTで直列に繋いでいたのですが、SPIに
すればバス接続にすることができるし、ついでに
SPI接続のEEPROMとか、AD変換ICとか、
その手のものもSPIバス上にズラズラ繋いで
使うことも出来るので、かえって便利かも。
テキスト表示器の場合は、Cなどの高級言語から
asciiコードで文字表示をする必要があったのですが、
http://picavr.uunyan.com/avr_m_text.html
スプライト表示であればUSARTにこだわる必要は
全くないし、ICが全部SPIバス上に載っているので
制御も回路も簡単かなぁと。
で、SPIメモリと同じようなコマンド体系にして
おけば、EEPROMにデータを書き込むかのごとく
スプライト表示器をコントロールすることが
出来るようになるはず。
それに、いざとなればメインCPUに12MHz
とか10MHzとか、その程度のクロックを使えば
通常のSPIモジュールを使うことも出来ますし。
これはSPIでオッケーかな?
あ、よくよく読み直してみたら、I/Oピンは
USARTのTX・RXをオーバーライドして
マスターSPIモードに使われると書いてある
みたい。(TへT)
それじゃぁだめなんだなぁ…
AVRをメインCPUにする場合、クロックを
10MHz程度に落とす必要があるって事で
しょうかねぇ?もうちょっと考えます。
ちなみに後閑さんの本によると、PIC16シリーズ
であればクロックの1/64倍で送受信できるので、
1/64 × 1/4 = 1/256となるため、
78125ビット/秒(約9766バイト/秒)、すなわち
限界値の15120バイト/秒以内で収まります。
これならok!
速過ぎて困るって言うのも、なんだなぁ…
(後日訂正)
PIC16シリーズのSPI送信速度って、
命令サイクルの1/64じゃなくて、Foscの
1/64なので、やっぱり速過ぎてNGですね。
メインをPICにすると、AVRよりもさらに
遅いクロックにしないと駄目。
まあPICの場合、SPIのクロックにタイマー2
を充てることができるので、20MHzで動かしても
最悪なんとかなるんですが。
それにしても、SPIの送受信レートをもう少し
遅くするいい方法は無いものでしょうか?
|
|
|
|
|
|