Forum: Mikrocontroller und Digitale Elektronik Embedded Linux - Systemzeit über GPS setzen


von Leiseflieger (Gast)


Lesenswert?

Guten Abend!

Ich habe hier ein Linux System basierend auf AT91RM9200, das keine 
(batteriegepufferte) Echtzeituhr hat. Es hat aber ein GPS-Modul auf der 
Platine, und dieses wiederum ist mit einer Pufferbatterie versehen.

Das GPS-Modul ist über die serielle Schnittstelle erreichbar (NMEA, 
9.600 Baud). Das PPS-Signal ist nicht angeschlossen.

Folgende Aufgabe: Nach dem Booten soll vom GPS-Modul die Zeit geholt 
werden und die Systemzeit entsprechend gesetzt werden. Dabei kommt es 
nicht auf eine sekundengenaue Synchronisation an. Es geht mir 
hauptsächlich darum, dass das Gerät - es handelt sich um einen 
Datenlogger, auf meiner SD-Karte Dateien mit halbwegs stimmigem Datum 
anlegt.

Es reicht also völlig, wenn die Systemzeit einmal gesetzt wird und dann 
langsam vom GPS wegdriftet.

Gibt es dafür ein Tool? Am besten irgendetwas, was man in den 
Bootskripten aufrufen kann, das sich einen NMEA-Datensatz holt und die 
Systemzeit liest, und anschließend die serielle Schnittstelle wieder 
freigibt? Denn diese wird vom anschließend startenden Anwendungsprogramm 
nämlich benötigt.

Oder wie würdet ihr das angehen? Ich hatte schon eine Menge gesucht, 
aber nichts gefunden. Es soll auch einen ntpd geben, der mit NMEA-Daten 
klarkommt. Dann bräuchte man wahrscheinlich gpsd, damit mehrere Prozesse 
gleichzeitig auf das GPS-Modul zugreifen können. Das heißt, ich müsste 
meine Logger-Anwendung umschreiben, was ich möglichst vermeiden möchte.

Freue mich über jeden Tipp!

von holger (Gast)


Lesenswert?

>Systemzeit liest, und anschließend die serielle Schnittstelle wieder
>freigibt? Denn diese wird vom anschließend startenden Anwendungsprogramm
>nämlich benötigt.

Wie wirst du das GPS Modul an der Schnittstelle wieder los?

von Richard (Gast)


Lesenswert?

Ueberlegung:

Ein Shellscript schreiben, welches ein kleines Programm startet (von dir 
erstellt). Dieses Programm greift auf TTY zu, liest einen Satz Daten und 
spuckt dir dann ein "date"-konformes Datum aus.
Dieses Datum leitest du dann an "date" weiter.
Nachdem dies geschehen ist, startet das Script deinen Logger.

Gruesse,
Richard

von Leiseflieger (Gast)


Lesenswert?

> Wie wirst du das GPS Modul an der Schnittstelle wieder los?

Was ich meinte war, dass die Schnittstelle als solche wieder freigegeben 
wird, d.h. kein Prozess im Hintergrund läuft, der die Schnittstelle 
offen hält. Denn mein Applikationsprogramm möchte ebenfalls das 
GPS-Modul nutzen.

> Ein Shellscript schreiben, welches ein kleines Programm startet (von dir
> erstellt). Dieses Programm greift auf TTY zu, liest einen Satz Daten und
> spuckt dir dann ein "date"-konformes Datum aus.
> Dieses Datum leitest du dann an "date" weiter.

sfz

So werde ich es wohl machen müssen. Schade, ich dachte so ein Tool gibt 
es vielleicht schon.

von nanotech (Gast)


Lesenswert?

holger schrieb:
> Wie wirst du das GPS Modul an der Schnittstelle wieder los?

Das will er nicht. Er hat eine Anwendung verpfuscht, indem sie direkt 
auf die Schnittstelle des Moduls zugreifen muss, doch jetzt fiel ihm 
ein, dass er irgendwie auch noch die Systemzeit von der Schnittstelle 
holen und setzen muss.

Man könnte das jetzt richtig machen (Anwendung holt Daten von gpsd, gpsd 
schreibt gleichzeitig Daten für ntpd in Shared Memory) oder man versucht 
sich durchzuwurchteln.

von Leiseflieger (Gast)


Lesenswert?

Nein, er macht das jetzt richtig, mit gpsd. Weil es ja so schön Mode 
ist, möglichst viele Layer übereinanderzupacken. Irgendwo muß der 
Overhead für das Auslasten eines ARM9 ja herkommen.

Gleichzeitig vergibt er dir noch 10 Extrapunkte für über den Standard 
dieses Forums hinausgehende Höflichkeit.

von nanotech (Gast)


Lesenswert?

Ja, ja, ist schon schlimm, wenn sich der eigene Pfusch nicht so einfach 
zukleistern lässt. Echte Männer benutzen ja gar keine Treiber, kein 
Betriebssystem, keine Programmierbibliothek und schon gar keine 
Hochsprache wie C. Neumodischer Layerscheiss. Echte Männer machen auch 
nicht auf Mädchen und heulen über den Standard des Forums heulen. 
Taschentuch? Bei der Mami anrufen?

von Zeiter (Gast)


Lesenswert?

Oder deine Anwendung setzt die Zeit sobald eine da ist.

von sieben von neun (Gast)


Lesenswert?

Die Verwendung eines GPS antelle einer RTC ist fragwuerdig. GPS bedingt 
Sicht zu einem Teil des Himmels. Ich glaube nicht das meine Systeme 
damit rechnen koennen. Und wenn sie in einem Metallgehause eingebaut 
sind sowieso nicht. Wenn sie nicht in einem Metallgehause eingebaut sind 
hat man moeglicherweise EMV Probleme.

von Lord Z. (lordziu)


Lesenswert?

sieben von neun schrieb:
> Die Verwendung eines GPS antelle einer RTC ist fragwuerdig. GPS bedingt
> Sicht zu einem Teil des Himmels.

Wer lesen kann ist klar im Vorteil. Er schreibt ja, dass er in seiner 
"richtigen" Applikation auch das GPS-Modul braucht.
Also kann man wohl davon ausgehen, dass die Sicht zum Himmel 
gewährleistet ist, sonst funktioniert es eh nicht.

von Werner B. (werner-b)


Lesenswert?

Hmmm....

aus der Applikation heraus die Uhr stellen.
Die bekommt sie ja per GPS.
Ala
1
if(time_valid) system("date %d.%d.%d...");

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.