The furthest board is maybe 50 feet away (much less than the 150 feet it says it should be able to handle), but I'm having pretty consistent connectivity issues. I think I want to abandon the USB extender and move over to rs485, but then I'd need to add some sort of serial to USB adapter on the other end, not to mention that I can't use the common (and super cheap) max485 adapters with the Pico's 3.3V.
So I guess my question is, how would you connect a 3.3v device to a PC up to 50 feet away, (with preference for using cat5 cable since it is already run to each device)?
My cat5 cable is unshielded. Could that be the source of my issues? I understood that USB uses a twisted pair for data, so would I experience the same problems if I tried to move to rs485?
TTL-RS232 serial is fine for 50-100m if you stick to low Baud rates (for long connections, start with 2400 Baud and use trial and error to see what works). Over shorter cable lengths, transmission can be much faster.
For the PC, use a USB to 3.3V TTL serial port adapter.
Actually I don't really know why I didn't consider it. I guess if I'm trying to use the highest baud rate I can (I think 115200 with the max485), do I need to be mindful about what kind of shifter I'd use? Might it be a bad idea to just use a voltage divider?
Is there any reason I couldn't use two separate pairs of max485 modules to avoid any complexity with it being only half duplex? I already have the cat5 cable in place with enough twisted pairs.
No there isn't any real reason. The main issue with fully assembled MAX485 modules is that the designer somehow put a terminator on all of them, and really it should just be on the on that is in receive mode, not on the one that is in drive mode.
If you do the math, you will find that at 250Kbps you should be able to cover 300 meters.
DMX which is 250Kbps 8N2, is guaranteed up to 100 meters, which is including loads of big connectors (still just 1 terminator in the whole chain though ! ) So i would start testing at a faster start speed.
A simple voltage divider made out of 3x 1K resistors will do the trick just fine. Just power the modules with 5v, The one in drive mode will accept 3.3v logic levels, the one in receive mode puts out 5v logic levels so
MAX485 RI -> 1K -> pico-RX -> 1K -> 1K -> GND
n.b. using higher value resistors will induce more capacitance which will go at the expense of speed.
50 feet is almost nothing for MAX485 & Cat 5 twisted pair UTP cable.
Ground wire only require if using more than one slave device. That also requires a wire to toggle the slave to transmit.
There is no free lunch with this device. You need to have programs on each end that communicate using serial data and the Baud rates are identical.
Actually not even that. RS485 uses the polarity between the data + & data - to determine the polarity of the output.
In many cases though the GND from the driver is used for shielding as in DMX, but common GND is not connected. The advantage of this is also that in case of a power surge on the GND line, other devices on the bus are not catastrophically affected.