« PICkit2入手 | トップページ | 非圧縮zip »

2016年1月 4日 (月)

I2Cのクロック

年末年始は、ArduinoとYM-2151で遊ぶことになっている。
無事に曲を演奏できるようになったが、さらに多くの曲を演奏するとなると、外部記憶を使いたいところだ。
今回は外付けEEPROMからMDX(曲)データを読み出して演奏することにした。
EEPROMは24LC512を使っている。
だがEEPROMからの読み出しに時間がかかっているようで、テンポが遅くなってしまう曲がある。
EEPROMの書き込みはひじょうに遅く、1バイトに5msもかかるらしいが、読み出しはそんなに遅くないはず。
とりあえずI2Cの通信速度を上げてみることにした。たった1行加えるだけでいい。

    Wire.begin();
    TWBR = 12;        // 通信速度(400kHz)

デフォルトでは、TWBR=72と設定されており、100kHzで動作しているようだ。
この値を32とすれば200kHz、12とすれば400kHzで動作する。
I2Cの信号線、SDAとSCLの抵抗値は、こちらのサイトで詳しく説明されている。
http://www.picfun.com/i2cframe2.html

この修正によって、演奏はかなり改善されたが、まだ少しテンポにムラがある。
これくらいならバレないかも・・・というレベルだ。
外付けのEEPROMはI2Cによるシリアル通信だから、内蔵EEPROMに比べると速度が遅いのだろう。
だったら曲を切り替える時に、外付けEEPROMから内蔵EEPROMに、1曲分のデータをロードしてから演奏すればいい。
と思ったのだが、内蔵EEPROMへの書き込みは1バイトが3.3msかかる。8KBだと3.3×8000=26400ms=26secもかかってしまう計算になる。
ちょっと現実的ではないなあ。

高速なRAMにロードするのは当然無理。
ブロック転送して、キャッシュされたデータだけは演奏とか、とにかくトリッキーな手法が必要になる。
とりあえず、テンポが乱れるが無圧縮zipを演奏してから考えるとしよう。

« PICkit2入手 | トップページ | 非圧縮zip »

お仕事」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/24707/63394409

この記事へのトラックバック一覧です: I2Cのクロック:

« PICkit2入手 | トップページ | 非圧縮zip »

最近のトラックバック