J'ai un bus SPI à 2 MHz mais une chose que j'ai remarquée, c'est que certains de mes signaux «tremblent» souvent. Oui, mon déclencheur est correctement configuré, donc je ne pense pas que le problème soit là.
Vous pouvez voir ce que je veux dire ici: (c'est avec le mode persistance activé). Ceci est l'horloge de mon bus SPI.
Le SPI fonctionne bien. J'ai transféré des centaines de mégaoctets sur plusieurs cartes et je n'ai pas vu de problème jusqu'à présent. Mais je suis toujours intéressé à savoir quel pourrait être le problème ici. De plus, dois-je prendre la peine de le réparer même si cela fonctionne?
Les mesures ont été prises directement à la source avec une TRÈS petite pince de masse.
Ceci est un schéma simplifié de mon circuit. Bien sûr, la carte a plus de périphériques SPI, mais pour les besoins de cette question, c'est exact car la carte n'a encore rien soudé, à l'exception de l'UC et de la carte SD.
Le maître (AVR Mega 128) fonctionne sur son oscillateur RC interne - je ne sais pas si cela serait pertinent, mais comme les signaux changent dans le temps, il est possible que la gigue de l'oscillateur RC se retrouve également dans le bus SPI. Je pensais juste le mentionner. Il m'est également apparu que pendant ces mesures, j'ai fait fonctionner le contrôleur dans une boucle infinie. Voici le 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.
}
}
La gigue / frisson pourrait se produire lorsque l'interne fonctionne 72 fois puis se termine. Puisqu'il faut un temps supplémentaire pour exécuter les trois premières lignes, il se peut que chaque 73e forme d'onde arrive à un moment légèrement différent en raison du temps de traitement supplémentaire. Si je devais parier, je suppose que c'est la cause de mon problème (si je le pouvais, je le confirmerais cet instant mais mes planches au travail et la semaine prochaine est éteinte!) Mais j'aimerais quand même des opinions / réponses de SE à ce sujet.
Mais compte tenu du fait que l'UC fonctionne à 8 MHz, je ne tremble pas en raison du logiciel, car en nanosecondes, mais plutôt en microsecondes. Mais dans la 2ème figure, une ligne plate est visible. Cela se produit pendant une très brève seconde où la totalité des formes d'onde se décale dans le temps et est invisible à l'écran. Je suppose que cela est dû à la boucle et la gigue dans la première image est due à l'oscillateur RC.