Arduinoのリセット、まだ続きます。
きっとあれだな、と思えるデータが取ってあったので、追加実験もして公開しておく。
まず、リセット波形の拡大から。
ATmegaのリセット入力条件は非常に厳しく、上限は 0.1Vccとなっている。Deumilanoveのように 5Vで動いていれば 0.5Vだ。この時は Deumilanove単体での測定だが、有効時間は 65μsある。ATmegaのリセット条件としては十分だし、実際にリセットとして認識する電圧はもっと高いはずだ。
ではリセット-グランド間にコンデンサを追加すると、どうなるか。DTR信号とグランド間でコンデンサが直列となる形になるため、DTR信号がローになってもリセット信号で電圧が落ち切らなくなってしまう。0.1μFを追加した場合、こうなる。
約 2.6Vまでしか下っていない。DTR信号も若干鈍って見えるのは、負荷が重いということだろう。この電圧では、ブートローダは起動しない。
Ethernet shieldの起動不良については海外でも問題認識されているようで、リセット-グランド間にコンデンサを追加するという意見に賛否があったようだ。しかし上記の現象を見れば、良い方法ではないことが分る。少くともスケッチのアップロードに、オートリセット機能は使えない。
実際に Duemilanoveに Ethernet shieldを組み合せ、0.1μFを追加した場合、どうなのだろう。
上図はUSB給電の場合だが、W5100はぎりぎりリセットが掛かるかもしれない。
しかし、電源が変われば事情が異なる。
外部電源を使用した例だが、起動が緩やかだとコンデンサの効果はほとんどない。
追加コンデンサの容量を小さくすればオートリセットは機能するだろうが、周辺デバイスのリセット条件は満さなくなるだろう。そもそも電源次第でコンデンサの効果はほとんどないため、気休めにもならないだろう。