Eu tenho um barramento SPI de 2 MHz, mas uma coisa que notei é que alguns dos meus sinais frequentemente 'tremem'. Sim, meu gatilho está configurado corretamente, então não acho que o problema esteja lá.
Você pode ver o que quero dizer aqui: (isso está com o modo persistência ativado). Este é o relógio do meu ônibus SPI.
O SPI funciona bem. Transferi centenas de megabytes em várias placas e ainda não vi um problema. Mas ainda estou interessado em saber qual poderia ser o problema aqui. Além disso, devo me preocupar em corrigi-lo, mesmo que funcione?
As medições foram feitas na fonte com um clipe de terra MUITO pequeno.
Este é um esquema simplificado do meu circuito. Obviamente, a placa possui mais dispositivos SPI, mas, para os fins desta pergunta, isso é preciso, pois a placa ainda não possui nenhuma solda, exceto o uC e o cartão SD.
O mestre (AVR Mega 128) está fugindo de seu oscilador RC interno - não sei se isso seria relevante, mas como os sinais mudam no tempo, é possível que o tremor do oscilador RC também esteja terminando no barramento SPI. Só pensei em mencionar. Também me ocorreu que, durante essas medições, eu executei o controlador em um loop infinito. Aqui está o código:
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.
}
}
O tremor / tremor pode ocorrer quando o interno é executado por 72 vezes e depois sai. Como leva um tempo adicional para executar as três primeiras linhas, pode ser que cada 73ª forma de onda chegue em um momento ligeiramente diferente devido ao tempo de processamento adicional. Se eu tivesse que apostar, acho que essa é a causa do meu problema (se pudesse, eu o confirmaria neste instante, mas meus conselhos estão no trabalho e a próxima semana está fora!) Mas eu ainda gostaria de opiniões / respostas da SE sobre este assunto.
Mas, considerando que o uC está rodando a 8 Mhz, não faço jitter devido ao software, porque em nanossegundos, mas em microssegundos. Mas na 2ª figura uma linha plana é visível. Isso ocorre por um breve segundo em que todas as formas de onda mudam no tempo e ficam invisíveis na tela. Suponho que isso se deva ao loop e o tremor na primeira foto se deva ao oscilador RC.