GPS clock with databus
GPS clock with multidrop databus
Using GPS modules in variouse projects I started to get a shortage on space in the shack window. And because a new project arrived who also need GPS for synchronization and timing, I wanted to look for a good base setup which could be shared between various projects. That how the GPS clock with multdrop databus came to mind.
Basiclly it's build out of the following components :
- good quality GPS receiver with external antenna
- arduino based GPS clock which also TX a stream of decoded GPS data (differential driver TX)
- a raw GPS datafeed and a 1pps output (both differential driver TX)
The GPS receivers contain use differential RX buffers to connect to the multidrop bus. For the multidrop bus CAT6 cables can be used or any other twisted pair and shielded cable.
On this page new idea's and the progress about this system will be published.
We got started
Because I broke my utc clock this project was activated again. From the spareparts I had on stock the first steps are made. The basic building blocks are :
- Arduino MEGA 2650 (it's overkill but hey it works for development)
- Large 4x20 LCD display (for now with I2C lcd adapter)
- NeoBlox6 GPS receiver
- BME280 (for temperature, humidity and pressure measurement).
- DS3231 RTC (backup clock but will be synced to the GPS)
The software (which is still work in progress) I have wrote myself published on my github page (link). This weekend I want to buy and add the MC3487N and MC3486N RS422 bus driver and receiver. Then it will have a multidrop signal bus (rs422 based) to allow other gps enabled devices to use the nmea data stream and the 1pps signal.
The first device what will be added is a large (8 cm high) 4 digit 7 segment display which will be my new UTC clock in the shack.
The software now is showing :
- UTC date & time
- Locator grid
- Sat count
- Latitude & Longitude (in Dgr en DMS)
- Temperature, Humidity & Pressure.
Another step forward
When the 4x20 blue LCD arrived I couldn't resist starting on the building of the final case. Big advantage of the I2C LCD controler. Just extend the wires for testing. The push buttons aren't connected yet.
And again another step forward
Everything is starting to get together. The larger MEGA2560 board is replaced by the final Robotyn MEGA 2560 (Embedded).
Tapping the 1pps signal
Tapping the 1pps signal to a interrupt of the Arduinoboard was a piece of cake. Just hooking up a wire to 1pps led driver of the Ublox NEO-6M GPS Module (see image below) which you connect to a interrupt enabled pin on the Arduino.
I used a small piece of wire which I soldered to a Dupont header connector. This allows me to replace the GPS without soldering. The picture below shows the all ready installed the MC3487N RS422 line driver.
In the interrupt service routine I turn on a digital output which is turned off after a 200mSec timer runs out. This will show that the basic software is running and accepting interrupts. The digital output is connected to a green led above the red power led.
Connecting the signal bus
After installing the MC3487N RS422 driver it was time to test the databus. I placed a RJ45 breakout connector on a breadboard and hooked up the MC3486N RS422 Receiver. Connecting the receiver output to a RX of a Arduino which reads the input and echo's it on the TX. On the serial terminal on the Arduino studio the NMEA streams where showing like direct from the GPS receiver. A test with the 1pps signal toggeling the onboard led on 1pps showed that also that part was working.
Passing the gps signals to a real user
I used my QRP-Labs Ultimate3 QRSS/WSPR transmitter for the final test. I solderd a few wires to a 5 pins DIN connector and pluged the wires into the breadboard holding the MC3486N RS422 receiver. Switched the Ultimate3 on and it worked sort off.
It did show the heartbeat but didn't find the lat/lon/time. It seemed that the NeoBlox has some problems with the CheckSum in the NMEA sentence and switching of the check in the GPS Info setup from the QRP-Labs Ultimate3 did the trick.
They are now in sync.
And another real user
A few months ago I got a old TTL based counter with very nice large 7 segment displays in it. By using a 74LS74, a Arduino Nano and some transistors (the 7 segment displays where common anode but worked on 7 volt) I quickly was able to control the display and display . . . . a counter (ok Arduino based). By adding the MC3486N RS422 receiver I was able to feed the GPS datastream to the Arduino. Adding the TinyGPS++ library I used in the GPS clock and using the timer from the Arduino (light up one display per tick) I managed to show a stabe blink free display which didn't interfere with the serial interrupt. Now I have a nice large digital UTC clock in the shack which is fed by the central GPS clock.
This is more then enough for now.
But I think I will be adding some new stuf later on to this system.