Pakurino の ATmega328P 化 (3)

秋月で ATmega328P の取り扱いが始まりました。
単価 250 円 と安価なので、ATmega を使った FM 音源プログラムの対象デバイスを ATmega168 から ATmega328P に変えることにしました。
プログラム・メモリが 32 K バイトに倍増しているので、168 では共存できなかった LCD サポートと、デモ曲内蔵とが、両方可能になります。
ATmega328P 対応版のプログラム名は「TG328」とし、ヘッダファイルの変更などに伴う修正作業を進めていて、LCD 表示プログラム部分にバグがあることが分かりました。
その症状としては、青地に白文字の「SC1602BBWB-XA-GB-G」を使うと、表示がちらつくというものです。
従来の「SC1602BS」、「SC1602BSLB」では問題はありません。 他の種類の LCD は持っていないので、どうなるかは分かりません。
これは、ATmega 版だけではなく、すべての版で起こることです。
この症状の原因としては、LCD に送るコマンドの中に意図しない「0x00」というデータが含まれていることでした。
従来の LCD では、これは未定義コマンドとして扱われて、何も動作しないのに対し、「SC1602BB」では、これが「表示クリア」コマンドの「0x01」と同様に扱われて、表示がクリアされるようです。
FM 音源プログラムを Arduino 環境の 16 MHz クロックで動かすと、サンプリング周波数は 10 kHz 程度となり、1ms インターバルで動いている EG や LCD 表示部分の相対的な負荷が増してきて、同時発音数 2 は実現できなくなりました。
そのため、16 MHz クロックの場合は、同時発音数 1 とし、サンプリング周波数は約 16 kHz に上げることにしました。 その時の CPU 負荷は 60 % 程度なので、MIDI2CV などの処理も取り込む余裕がありますから、MIDI2CV サポートを追加することにしました。