I haven't checked the power supply with my multimeter yet, but am curious as to the following:
I have a GPS in a bread board, connected via software serial to an Uno.
I have a Sparkfun BB power supply and can power the GPS from that power supply.
Rx and Tx beween GPS and Uno are switched, as required.
If I power the GPS by the power supply, at 3V3 or 5V, the readings from the GPS are garbage.
If I power the GPS from 3V3 or 5V from the Uno, the readings from the GPS are pristine, and the GPS locks my location, indoors, as verified via a google maps lookup.
When I come to use this GPS in a circuit, it will be powered by the same source as the uC I intend to use, with common ground, so there should be no issues.
What I want to understand is why the external power supply is causing this issue. Is it because the serial signal on the Uno side relies on signal edges from a ground (reference) that is not shared by the GPS unit?
I am not really sure what to search for to find resources to learn, so pointers would be appreciated.
If the grounds are not connected, there is no common reference level.
Without that common reference, how would the GPS in this case know that the signals were going high & low?
aarondc:
Is it because the serial signal on the Uno side relies on signal edges from a ground (reference) that is not shared by the GPS unit?
CrossRoads:
If the grounds are not connected, there is no common reference level.
Without that common reference, how would the GPS in this case know that the signals were going high & low?
Say you have 2 batteries in series, each is 3V.
Battery0+ connects to Battery1-.
Now you put your volmeter black wire on Battery0- and your voltmeter red wire on Battery0+; you see 3V.
You move the voltmeter red wire to Battery1+; you see 6V.
You move the voltmeter blackwire to Battery1-; you see 3V again.
From the meter's perspective, Ground is its black wire - from each battery's perspective, its - terminal is Gnd.
From your perspective, Battery0- is the System Ground.
Now - break the connection from Battery0+ to Battery1-.
The voltmeter is still connected, red to Battery1+ and black to Battery1-; you see 3V.
Now, move the black wire to Battery0-; what do you see? 6V? 3V? Answer will be some random small value, because the meter now has no common reference point.
Same the seperately powered Arduino and GPS. The Arduino, or GPS, has a wire coming in that effectively has no connection on the other end, so it cannot see the signal as high & low with respect to its own Gnd. You need to make a System Ground connection so the signal is referenced to the same thing on both ends.
aarondc:
My naive understanding says Ground = 0V and 5V = well ... 5V.
Anywhere.
So if ground is 0, then it should be 0 volts anywhere. Regardless of the circuit's power supply.
Say you have two cardboard boxes. Each has a bottom. You could call the bottom "ground" and inside the box you can make a mark, say 5 centimeters high.
The two bottoms could easily be different with respect to each other. One might be on the floor and one on a cupboard. Just calling them "ground" or "bottom" doesn't change that.
In order for the 5 centimeter marks to line up, the bottoms have to line up. So you have to have both boxes sitting at the same height. In other word, "connect the grounds".
But that explanation seems contingent on there being a difference in grounds. E.g., two circuits powered by identical batteries still can't communicate, can they?
Would it be correct to say that a digital input requires at least some current to flow, even if uA? Thus without common ground no current can flow.
In the two boxes analogy they have to be spatially at the same level. In the case of electric circuits the ground has to be electrically at the same level. I don't see how you can do that without connecting the ground wires. After all you don't hold the two batteries so they are they same height from the floor. The only way it makes sense to say the "share" a ground is to actually connect it.
Between the grounds? I don't think that question makes sense because if the grounds are connected therefore no current flows from one "ground" to another.
Put it this way. If you get a battery and put the + terminal into a digital input of your Arduino and don't connect the - terminal to anything nothing will happen. The battery might have 3V between its + and - but without the - being connected to the Arduino (the shared ground) the + voltage is not "referenced" to anything the Arduino knows about.