2 MHzのSPIバスがありますが、信号の一部がしばしば「震え」ていることに気づきました。はい、トリガーは正しく設定されているので、問題はそこにあるとは思いません。
ここで私が何を意味するかを見ることができます(これは永続モードがオンの場合)。これは私のSPIバスのクロックです。
SPIは正常に動作します。私は複数のボードで数百メガバイトを転送しましたが、今のところ問題は見ていません。しかし、私はまだここで問題になる可能性があることを知りたいと思っています。また、機能しても問題を修正する必要がありますか?
測定は、非常に小さなグランドクリップを使用してソースで直接行われました。
これは私の回路の簡略化した回路図です。もちろん、ボードにはより多くのSPIデバイスがありますが、uCとSDカード以外にはまだボードにはんだ付けされていないため、この質問の目的にはこれは正確です。
マスター(AVR Mega 128)は、内蔵のRCオシレーターで実行されています。これが関連するかどうかはわかりませんが、信号が時間内にシフトするため、RCオシレーターのジッターもSPIバスで発生する可能性があります。私はそれについて言及すると思いました。また、これらの測定中にコントローラーを無限ループで実行していることにも気付きました。これがコードです:
while(1)
{
setFirstBitOnDriver(driver); // this sends a 8-bit command on the SPI bus.
GLCD_SetCursorAddress(40); // Change cursor position on the display.
GLCD_WriteText("LED: ");
for(wire=0;wire<72;wire++)
{
itoa(wire+1,str,10);
GLCD_WriteText(str);
GLCD_SetCursorAddress(44);
_delay_ms(10);
shiftVectorOnDriver(driver); // another command on SPI. 8-bit wide.
}
}
内部が72回実行されて終了すると、ジッター/震えが発生する可能性があります。最初の3行を実行するには追加の時間がかかるため、追加の処理時間のために、73番目ごとの波形がわずかに異なる時間に到着する可能性があります。私が賭けなければならなかった場合、私はこれが私の問題の原因であると推測しています(可能であれば、私はこの瞬間にそれを確認しますが、私のボードは仕事中で、翌週はオフです!)しかし、私はまだ意見を望んでいます/この問題に関するSEの回答。
しかし、uCが8 Mhzで実行されていることを考えると、ソフトウェアが原因でジッターが発生しないのは、ナノ秒単位ではなくマイクロ秒単位であるためです。しかし、2番目の図では、平らな線が見えています。これは、波形全体が時間とともにシフトし、画面に表示されない非常に短い1秒間発生します。これはループによるもので、最初の画像のジッタはRC発振器によるものだと思います。