I would need help with how the Globalsat EM 506 GPS works.
My issue is that I do not receive any data from pin 4 which corresponds to the TX of the GPS.
In fact, I am not receiving any signal from the GPS.
At most, I notice that the red LED of the GPS is dimly lit with 5V (from the Arduino) but when I connect pin 5 of the GPS (GND) and pin 6 of the GPS (Directive) to the ground of the circuit (which is that of the Arduino), the red LED lights up completely.
From then on, I don't know if the GPS is functional but that it's not in a fixed position or quite simply that it is not functional.
I tried to switch the connection of the RX and TX of the GPS but without success.
Do some of you already worked with this GPS?
If yes? What am I missing? And how do you check that the GPS is still functional?
I have attached a photo of my circuit and copy pasted the code at the end of the post.
Thanks to all of you!
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
/*
This example uses software serial and the TinyGPS++ library by Mikal Hart
Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart
Modified by acavis
*/
// Choose two Arduino pins to use for software serial
// The GPS Shield uses D2 and D3 by default when in DLINE mode
int RXPin = 2;
int TXPin = 3;
int directive = 7;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit
// uses 4800 baud by default
int GPSBaud = 4800;
// Create a TinyGPS++ object called "gps"
TinyGPSPlus gps;
// Create a software serial port called "gpsSerial"
SoftwareSerial gpsSerial(RXPin, TXPin);
void setup()
{
// Start the Arduino hardware serial port at 9600 baud
Serial.begin(9600);
pinMode(directive, INPUT);
// Start the software serial port at the GPS's default baud
gpsSerial.begin(GPSBaud);
Serial.print(F("Testing TinyGPS++ library v. "));
Serial.println(TinyGPSPlus::libraryVersion());
Serial.println();
}
void loop()
{
/*
int lecture = digitalRead(directive);
Serial.println("Voici le résultat de la pin directive");
Serial.println(lecture);
*/
// This sketch displays information every time a new sentence is correctly encoded.
while (gpsSerial.available() > 0)
if (gps.encode(gpsSerial.read()))
displayInfo();
// If 5000 milliseconds pass and there are no characters coming in
// over the software serial port, show a "No GPS detected" error
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected"));
while(true);
}
}
void displayInfo()
{
Serial.print(F("Location: "));
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" Date/Time: "));
if (gps.date.isValid())
{
Serial.print(gps.date.month());
Serial.print(F("/"));
Serial.print(gps.date.day());
Serial.print(F("/"));
Serial.print(gps.date.year());
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" "));
if (gps.time.isValid())
{
if (gps.time.hour() < 10) Serial.print(F("0"));
Serial.print(gps.time.hour());
Serial.print(F(":"));
if (gps.time.minute() < 10) Serial.print(F("0"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
if (gps.time.second() < 10) Serial.print(F("0"));
Serial.print(gps.time.second());
Serial.print(F("."));
if (gps.time.centisecond() < 10) Serial.print(F("0"));
Serial.print(gps.time.centisecond());
}
else
{
Serial.print(F("INVALID"));
}
Serial.println();
}
Are were you using the same GPS the EM 506 in your project?
I did the same wiring to power up the GPS and still there's no detection of a signal from the GPS TX pin. Although I read a voltage of 3.36V on that pin.
Yes I am using an oscilloscope to read the voltage and it is still 3.6V
Also, I wired the external power supply directly to the GPS VIN and GND pins.
Still there's no signal detected and the GPS stays in the "unfixed searching for signal" state.
I verified the voltage level shift circuit to make that the arduino is recieving the signal from the TX pin of the GPS and I get the 4.5V output to the arduino pin.
Read the datasheet! What does it say about minimum Vin? What does it say about the double GND pins?
Measuring DC on a Tx pin indicates that the interbal logic is likely not running.
Talking about volt on a pin like Tx is pointless unless there us a signal. Then the swing can be verified to be correct.
I would need help with how the Globalsat EM 506 GPS works.
My issue is that I do not receive any data from pin 4 which corresponds to the TX of the GPS.
In fact, I am not receiving any signal from the GPS.
At most, I notice that the red LED of the GPS is dimly lit with 5V (from the Arduino) but when I connect pin 5 of the GPS (GND) and pin 6 of the GPS (Directive) to the ground of the circuit (which is that of the Arduino), the red LED lights up completely.
From then on, I don't know if the GPS is functional but that it's not in a fixed position or quite simply that it is not functional.
I tried to switch the connection of the RX and TX of the GPS but without success.
Do some of you already worked with this GPS?
If yes? What am I missing? And how do you check that the GPS is still functional?
I have attached a photo of my circuit and copy pasted the code at the end of the post.
Thanks to all of you!
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
/*
This example uses software serial and the TinyGPS++ library by Mikal Hart
Based on TinyGPSPlus/DeviceExample.ino by Mikal Hart
Modified by acavis
*/
// Choose two Arduino pins to use for software serial
// The GPS Shield uses D2 and D3 by default when in DLINE mode
int RXPin = 3;
int TXPin = 2;
int directive = 7;
// The Skytaq EM-506 GPS module included in the GPS Shield Kit
// uses 4800 baud by default
int GPSBaud = 4800;
// Create a TinyGPS++ object called "gps"
TinyGPSPlus gps;
// Create a software serial port called "gpsSerial"
SoftwareSerial gpsSerial(RXPin, TXPin);
void setup()
{
// Start the Arduino hardware serial port at 9600 baud
Serial.begin(9600);
pinMode(RXPin, INPUT);
pinMode(TXPin, OUTPUT);
// Start the software serial port at the GPS's default baud
gpsSerial.begin(GPSBaud);
Serial.print(F("Testing TinyGPS++ library v. "));
Serial.println(TinyGPSPlus::libraryVersion());
Serial.println();
}
void loop()
{
/*
int lecture = digitalRead(directive);
Serial.println("Voici le résultat de la pin directive");
Serial.println(lecture);
*/
// This sketch displays information every time a new sentence is correctly encoded.
while (gpsSerial.available() > 0)
if (gps.encode(gpsSerial.read()))
displayInfo();
// If 5000 milliseconds pass and there are no characters coming in
// over the software serial port, show a "No GPS detected" error
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected"));
while(true);
}
}
void displayInfo()
{
Serial.print(F("Location: "));
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" Date/Time: "));
if (gps.date.isValid())
{
Serial.print(gps.date.month());
Serial.print(F("/"));
Serial.print(gps.date.day());
Serial.print(F("/"));
Serial.print(gps.date.year());
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" "));
if (gps.time.isValid())
{
if (gps.time.hour() < 10) Serial.print(F("0"));
Serial.print(gps.time.hour());
Serial.print(F(":"));
if (gps.time.minute() < 10) Serial.print(F("0"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
if (gps.time.second() < 10) Serial.print(F("0"));
Serial.print(gps.time.second());
Serial.print(F("."));
if (gps.time.centisecond() < 10) Serial.print(F("0"));
Serial.print(gps.time.centisecond());
}
else
{
Serial.print(F("INVALID"));
}
Serial.println();
}
The inverting level shifter that you show on TX won't work, and connecting the 3.3V RX input pin to a 5V Arduino output may have destroyed the GPS module.
As a test, connect only power, GND, and GPS TX directly to the Arduino receive input pin (it is safe to make the connection in this direction), and make sure you are outside, with a clear view of the sky.
If the 3.3V TX levels are not high enough to be valid, you will need level shifters like this: