Ich habe einen 2-MHz-SPI-Bus, aber eines ist mir aufgefallen: Einige meiner Signale zittern oft. Ja, mein Trigger ist richtig eingerichtet, daher glaube ich nicht, dass das Problem dort liegt.
Sie können hier sehen, was ich meine: (Dies ist mit aktiviertem Persistenzmodus). Dies ist die Uhr meines SPI-Busses.
Das SPI funktioniert einwandfrei. Ich habe Hunderte von Megabyte auf mehrere Boards übertragen und bisher kein Problem festgestellt. Aber ich bin immer noch daran interessiert zu wissen, was hier das Problem sein könnte. Sollte ich mir auch die Mühe machen, das Problem zu beheben, auch wenn es funktioniert?
Die Messungen wurden direkt an der Quelle mit einem SEHR kleinen Bodenclip durchgeführt.
Dies ist ein vereinfachtes Schema meiner Schaltung. Natürlich verfügt die Karte über mehr SPI-Geräte, aber für die Zwecke dieser Frage ist dies korrekt, da auf der Karte noch nichts außer der uC und der SD-Karte angelötet ist.
Der Master (AVR Mega 128) läuft von seinem internen RC-Oszillator ab - ich weiß nicht, ob dies relevant wäre, aber da sich die Signale mit der Zeit verschieben, ist es möglich, dass der Jitter des RC-Oszillators auch im SPI-Bus landet. Ich dachte nur, ich würde es erwähnen. Mir ist auch aufgefallen, dass ich während dieser Messungen den Controller in einer Endlosschleife betrieben habe. Hier ist der Code:
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.
}
}
Der Jitter / Shiver kann auftreten, wenn der interne 72-mal ausgeführt wird und dann beendet wird. Da die Ausführung der ersten drei Zeilen eine zusätzliche Zeit benötigt, kann es sein, dass jede 73. Wellenform aufgrund der zusätzlichen Verarbeitungszeit zu einer etwas anderen Zeit ankommt. Wenn ich wetten müsste, denke ich, dass dies die Ursache für mein Problem ist (wenn ich könnte, würde ich es sofort bestätigen, aber meine Boards arbeiten und die nächste Woche ist aus!) Aber ich hätte immer noch gerne Meinungen / Antworten von SE zu diesem Thema.
Aber wenn man bedenkt, dass die uC mit 8 MHz läuft, zittere ich nicht aufgrund von Software, weil in Nanosekunden, sondern in Mikrosekunden. In der 2. Abbildung ist jedoch eine flache Linie sichtbar. Dies geschieht für eine sehr kurze Sekunde, in der sich die gesamten Wellenformen zeitlich verschieben und auf dem Bildschirm unsichtbar sind. Ich vermute, dass dies an der Schleife liegt und der Jitter im ersten Bild am RC-Oszillator.