現在、AVRは内蔵の8MHzクロックで動作させています。 もともと手持ちのものが古い(2世代目)ATmega8Lで、2.7V~5.5Vでの駆動が可能な代わりに8MHzまでの動作となっているためです。 姉妹品のATmega8は最高16MHzですが、4.5V~5.5Vでないと動作しません。 3.3V動作のSDカードまでバッファを介したくなかったため、これはこれで悪くないチョイスではありました。
しかし、現行のAVRは3世代目に入っており、mega8系の後継にはATmega88(他に48/168/328)があります。 これは、2.7V~5.5Vで20MHz動作が可能となっています。 さらに低電圧(1.8V~)対応版として、ATmega88Vがあります。 型名の最後にVがつくものはみなこのバージョンで、こちらは10MHzまでの動作です。
電力消費を減らしたP/PVバージョンもあるのですが、そこまでは拘らないので別にいいです。
いずれにしても、ATmega88が後継としてはいいチョイスということです。 幸い、以前日本に行ったときにためしに一つ買っておきました。
ただ、8MHz以上の周波数で動作させる場合は、必ず外部にクリスタルが必要です。
というわけで、今月頭に日本に行ったときに20MHzのクリスタルとコンデンサを少々買っておきました。
現在のSDカードドライバは、データの連続読み込み部分をかなりチューンしてありますが、1バイト読み込むためにはPC本体側で29クロック必要です。 そのため、inir(24クロック)は使えません。
また、セクタをまたぐアクセスにはそこそこ時間がかかります。 とは言っても、
- 大部分の命令を1クロックで実行する
- avr-gccが賢く最適化する
という感じでZ80とは根本的に異なるので、体感するようなことはほとんどないのですが。
でも、やはりZ80側をフルパワーで動作させても追従させてあげたいので、88に差し替えてみようかと思っています。 幸いI/Oも結構空いていることですし。
でも、ATmega8L、5個も買っちゃったんだよなぁ...。
僕も ATmega88 と 20MHz のクリスタル持ってます^^
ATmega88は3.3Vの場合20MHz 動作保証されません。
和文データシート 192ページ 26.3. 速度勾配 を見てください。
およそ13MHzです。(実力的には動きますけど・・)
データシートの26.3 Speed Gradesを確認しました。確かに、20MHz/3.3VはSafe Operating Areaからは外れてますね。いままで動かなかった試しがないので気づいてませんでした。10MHz/2.7Vと20MHz/4.5Vを結ぶ直線上が境界になっているのですね。