DL4OCH Amateurfunk und Elektronik

Januar 26, 2015

GPS-D-OCXO Display

Filed under: Zeitnormale — DL4OCH @ 11:03 pm

GPS_D_OCXO

Alle meine bisher gebauten GPS-referenzierten Normale haben ein großes Problem: Ohne externe Anzeige in Form eines Computers hat man keine Übersicht, worauf sich die 10 MHz beziehen. Das 1 PPS-Signal, welches direkt vom Navman Jupiter-T erzeugt wird, ist da auch nicht hilfreich. Ohne 3D-Fix bezieht sich alles auf den internen TCXO des GPS-Moduls. Zwarkann man immer den Rechner über die serielle Schnittstelle mitlaufen lassen, das sagt aber immer noch nichts darüber aus, ob die PLL nun gerastet ist, oder nicht.

Die Lösung ist recht preisgünstig und nicht weniger elegant:

Ein einfacher, preisgünstiger Arduino Duemilanove mit einem 4-zeiligen LCD-Display bietet alles, was man braucht:

– Eine Positionsanzeige
– Die Anzahl der empfangbaren Satelliten
– HDOP und PDOP ( beides Präzisionsanzeigen)
– Der Fix, also 2D, oder 3D
– Die „Uhrzeit“. Diese ist nicht genau, denn der kleine Arduino
kommt bei dieser Aufgabe kaum hinterher.
– Die Anzeige der Regelspannung für den OXCO
– GANZ WICHTIG: Ist die PLL Locked, oder nicht !

Das kostet mal wieder im Land der langen Mauer weniger als 22 Euro einschließlich Versand. Dauert zwar einen Monat, aber man hat ja auch noch andere Projekte.

Der Code ist recht schnell entwickelt und dank vorhandener Libraries einfach umzusetzen:

 

#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display

static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);

// Definition of special sequences, not implementet

TinyGPSCustom pdop(gps, „GPGSA“, 15); // $GPGSA sentence, 15th element
TinyGPSCustom fix(gps, „GPGSA“, 2); // $GPGSA sentence, 2nd element
TinyGPSCustom hdop(gps, „GPGSA“,16); // fix message

///////////////////
// VARIABLEN     //
///////////////////
int Us=0;
int Ua=0;
int loc=0;
int Loc2=0;
double V1=0;
double V2=0;
double MU=0.0048875;

void setup()
{

//  Serial.begin(115200);
ss.begin(GPSBaud);
pinMode(6,OUTPUT);

lcd.init();                      // initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(2,0);
lcd.print(„10 MHz D-GPS-OXCO“);
lcd.setCursor(3,1);
lcd.print(„Build by DL4OCH“);
lcd.setCursor(3,2);
lcd.print(„System starting“);
lcd.setCursor(5,3);
lcd.print(„please wait!“);

delay(5000);
lcd.clear();

}

void loop()
{
// This sketch displays information every time a new sentence is correctly encoded.
while (ss.available() > 0)
if (gps.encode(ss.read()))
displayInfo();

if (millis() > 5000 && gps.charsProcessed() < 10)
{
lcd.print(„No GPS detected: check wiring.“);
while(true);
}
}

void displayInfo()
{
lcd.setCursor(0,0);
if (gps.location.isValid())
{
lcd.print(gps.location.lat(), 5);
lcd.print(„N  „);
lcd.print(gps.location.lng(), 5);
lcd.print(„E“);
}
else
{
lcd.print(„INVALID“);
}

lcd.setCursor(0,1);
if (gps.satellites.value()<9) lcd.print(„0“);
lcd.print(gps.satellites.value());
lcd.print(„/12 Sat“);

lcd.setCursor(11,1);
if (gps.time.isValid())
{
if (gps.time.hour() < 10) lcd.print(„0“);
lcd.print(gps.time.hour());
lcd.print(„:“);
if (gps.time.minute() < 10) lcd.print(„0“);
lcd.print(gps.time.minute());
lcd.print(„:“);
if (gps.time.second() < 10) lcd.print(„0“);
lcd.print(gps.time.second());
}
else
{
lcd.print(„no time“);
}

lcd.setCursor(0,2);
lcd.print(„HDOP=“);
lcd.print(hdop.value());

lcd.setCursor(11,2);
lcd.print(„PDOP=“);
lcd.print(pdop.value());

lcd.setCursor(0,3);
if (*fix.value()<1) lcd.print(„no fix“);
else
if (*fix.value()<2) lcd.print(„aquire“);
else  {
lcd.print(fix.value());
lcd.print(„D fix“);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                            //
// AUSWERTUNG DER PLL   Stand 25.01.15 21.54h                                                                                         //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////

lcd.setCursor(11,3);

Us=analogRead(0);

V1=Us*MU;
lcd.print(V1,3);
lcd.print(„V“);

lcd.setCursor(18,3);

if (Us<(Ua-5)) loc=0;
else
if (Us>(Ua+5)) loc=0;
else
{
loc=1;
}

if (Loc2>5) lcd.print(“ L“);
else lcd.print („uL“);

if (loc==1) Loc2=Loc2+1;
if (loc==0) Loc2=0;
if (Loc2>5) digitalWrite(6,1);
else
digitalWrite(6,0);

Ua=Us;

}

 

Mit diesen paar Zeilen erreichen wir folgendes:

Bis auf die Anzeige, erhalten wir auch eine Auswertung des Regelverhaltens der PLL. Sobald die Spannungsvarianz entsprechend klein ist, wird der Status einer gerasteten PLL durch eine LED, welche am digitalen Port 6 angeschlossen ist, angezeigt.

 vy73 de Wilm,
DL4OCH

4 Comments »

  1. Hallo Wilm,
    kannst Du die Schaltung dafür veröffentlichen (Port-Verbindungen vom Arduino zum TU30-Modul)?

    vy 73 Werner, DL5AAB

    Kommentar by Werner Austin — Februar 9, 2015 @ 10:48 am

  2. Hallo Werner,

    die Verbindung zwischen dem Arduino und dem TU30 ist ganz einfach:
    Verbinde Pin 11 des TU30 (SDO1) mit Pin 4 des Arduino. Für den Betrieb am Arduino brauchst Du die SoftwareSerial.h Library. Die ist aber automatisch mit dabei. Da beide Geräte TTL-Pegel verwenden, braucht es keine weitere Anpassung.

    vy73 de Wilm,
    DL4OCH

    Kommentar by DL4OCH — Februar 11, 2015 @ 10:47 am

  3. Hallo Wilm,
    leider gelingt es uns nicht, bei dem TU30-Modul von Sander Elektronik, das Rockwell Binary Format auf das NMEA Protokoll umzustellen.
    Für Deine Hilfe wären wir dankbar,
    vy 73 Alex und Werner DO7HX, DL5AAB

    Kommentar by Werner Austin — März 5, 2015 @ 9:01 am

  4. Hallo Ihr beiden,

    klar kann ich Euch helfen.

    Bitte schickt mir eine Email an mein Rufzeichen at darc punkt de. Dann kann ich Euch die Hilfestellung, wie auch anderen, leisten. Wenn ich das hier poste, dann kann sich Sander Elektronik nämlich freuen, denn auf Rückfragen von mir, habe ich bis heute keine Antwort erhalten.

    vy73 de Wilm,
    DL4OCH

    Kommentar by DL4OCH — März 5, 2015 @ 11:25 pm

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress