For SPI strips like the LPD8806 and WS2801 is there ever a practical reason to run them at less than 1MHz? I know the WS2801 defaults to 1MHz in FastLED since it really doesn’t work well above that (despite the datasheet stating 25MHz!!.. how?). I’m working on some firmware that (among other thigns) would allow you to change the SPI speed and store it in EEPROM and stopping at 1MHz is a bit easier since I can just store single byte… so should I worry about supporting sub-1MHz speeds? The only reason I even run things like the LPD8806 lower is because it generally will alleviate signal noise problems but I can’t imagine below 1MHz.
Depends… when I’m using strips on an Raspberry Pi (obviously not with FastLED) the SPI lines are clearly not well shielded. In general though, I’ve found that, especially in matrix configurations, faster SPI speeds can cause errors on the signal lines. In my testing, reducing the SPI data rate always fixes the problem. This especially seems to be a problem if the power supply is installed nearby or there isn’t enough decoupling capacitance on the power rails. Some installs I’ve done have required the supply being installed very close to the strip for space constraints and it definitely seems to cause extraneous noise on the data lines.
Separate PSU from what, the arduino? Where exactly are you measuring the voltage difference?
You can either call addLeds() like this:
FastLED.addLeds<LPD8806, RGB, DATA_RATE_MHZ(1)>(…)
Or after adding the LEDs, use this function:
void setSPIRate(uint8_t speed) {
SPCR &= ~((1 << SPR1) | (1 << SPR0)); // clear out the prescalar bits
bool b2x = false;
uint8_t _SPI_CLOCK_DIVIDER = DATA_RATE_MHZ(speed);
if (_SPI_CLOCK_DIVIDER >= 128) { SPCR |= (1 << SPR1); SPCR |= (1 << SPR0); }
else if (_SPI_CLOCK_DIVIDER >= 64) { SPCR |= (1 << SPR1); }
else if (_SPI_CLOCK_DIVIDER >= 32) { SPCR |= (1 << SPR1); b2x = true; }
else if (_SPI_CLOCK_DIVIDER >= 16) { SPCR |= (1 << SPR0); }
else if (_SPI_CLOCK_DIVIDER >= 8) { SPCR |= (1 << SPR0); b2x = true; }
else if (_SPI_CLOCK_DIVIDER >= 4) { /* do nothing - default rate */ }
else { b2x = true; }
if (b2x) { SPSR |= (1 << SPI2X); }
else { SPSR &= ~(1 << SPI2X); }
}
@Adam_Haile yes, depending on the how many LEDs you have and the wire length between each, you could be generating a significant amount of RF noise. E.g. I know someone whose car remote won’t work whenever he has his matrix switched on 
The speed you use will be reflected in the frequency of noise you make…
Hmm. You say installing the PS close to the strips causes MORE noise on the data lines?
That’s the opposite of what I’d expect, but I don’t know how long your leads are from the Arduino or RPI to the first strip, or how the Arduino/RPi are powered (separate or same PS?)