Forum: Mikrocontroller und Digitale Elektronik Windows-Uhr via µC auslesen


von Joachim B. (jojo84)


Lesenswert?

Guten Morgen!

Mir ist gerade spontan eine Idee gekommen, von der ich mal höhren 
wollte, inwieweit das machbar sein könnte.

Im groben ging es da in meinem Kopf um eine Steuerung mit einem 
Mikrocontroller, der mit seinem UART an einem COM-Port eines Windows-PC 
hängt. Soweit hab ich das auch alles schon gemacht, also stumpf über ein 
Terminalprogramm Daten hin und her senden geht.

ABER: gibt es irgendwie eine Möglichkeit dem Controller die aktuelle 
Windows-Zeit zu übermitteln? Ich hab da leider so gut wie 0 Kenntnis 
drüber und das iNet war bis jetzt auch eher sparsam mit Ratschlägen. Ich 
weiß, daß man z.B. mit LabVIEW an die Uhrzeit kommen kann. Aber immer 
ein LabVIEW-Programm in "Hintergrund" laufen zu lassen ist doch etwas 
unpraktisch.

Wie könnte sowas gemacht werden? Wie kommt der Controller von "außen" an 
die Windows-Uhr? Und wie macht LabVIEW das?


Danke schonmal,
Gruß,
Joachim

von Christian D. (chris83)


Lesenswert?

Was mir da spontan dazu einfällt ist, in C# kann man die Uhrzeit 
auslesen per string. Die könnte man dann einfach per UART zum µC 
schicken. Würde halt im Hintergrund ein kleines Programm laufen, was 
aber nicht weiter stören sollte.

Grüße

von Peter D. (peda)


Lesenswert?

time /t >COM1


Peter

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Joachim A. schrieb:

> ABER: gibt es irgendwie eine Möglichkeit dem Controller die aktuelle
> Windows-Zeit zu übermitteln?

Die einfachste Möglichkeit:

  Eingabaufforderung starten und eingeben:

  time /t > com1:

An die Windows-Zeit kommt man mit so ziemlich jeder Programmiersprache, 
die es für Windows gibt.

Gruß,

Frank

von gero (Gast)


Lesenswert?

In welchem Format erscheint sie dann?

von Karl H. (kbuchegg)


Lesenswert?

Probiers aus.
Starte eine Command Line und tippe das Kommando (ohne das  "> COM1:") 
ein.
Das was dann auf dem Bildschirm erscheint, wird dann durch das > auf 
COM1 umgeleitet.

von Joachim B. (jojo84)


Lesenswert?

Hallo und danke schonmal für die Antworten!

An die Uhrzeit zu kommen war ja schonmal einfacher, als ich dachte :)

In welchem Format die Uhrzeit vorliegt, wäre natürlich gut zu wissen. 
Aber dafür könnte man ja einfach das, was der Controller empfangen hat, 
einfach mit sowas wie nem Auto-Echo wieder ausgeben, dann hat mans ja.

Jetzt stellt sich mir allerdings die Frage: wie gebe ich diesen "time 
/t"-Befehl vom µC an den PC? Wie gesagt, mit der Art der Kommunikation 
mit Windows hatte ich noch nichts zu tun.

Angenommen der Controller sendet "ich will bitte die uhrzeit empfangen". 
Dann muß ich ja auf dem PC irgendwas am laufen haben, was diesm Befehl 
empfängt, auswertet und dann dieses "time /t" ausführt. Wie wird das 
üblicherweise gemacht? Auch mit einem Terminalprogramm oder so? aber wie 
würde das Terminalprogramm dann den "time /t"-Befehl an Windows senden?

Ich weiß noch nicht so recht, was das für ein "Hintergrundprogramm" sein 
soll, was da auf dem PC dann läuft...

DANKE!
Gruß

von gero (Gast)


Lesenswert?

Ah, alles klar. Kann man irgendwo solche Kommandos nachlesen? Das wäre 
sehr interessant.

Wenn ich es ohne /t eingebe, dann will er es ändern, seh ich grad.

Und dann bekomme ich 5 UART-chars raus?

von Karl H. (kbuchegg)


Lesenswert?

gero schrieb:
> Ah, alles klar. Kann man irgendwo solche Kommandos nachlesen? Das wäre
> sehr interessant.

Vor 20 Jahren kannte jeder die Befehle (zumindest die meisten).
Das ist ganz normales Arbeiten mit der Command Line.
Seit dem ganzen Klicki Bunti Zeugs können immer weniger Leute mit der 
Command Line umgehen.

von Joachim B. (jojo84)


Lesenswert?

time /t >COMx" gibt mir ein "Das System kann die angegebene Datei nicht 
finden.

von gero (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Seit dem ganzen Klicki Bunti Zeugs können immer weniger Leute mit der
> Command Line umgehen.

Da muss ich dir leider Recht geben und ich gehöre ebenfalls dazu.

von Joachim B. (jojo84)


Lesenswert?

@gero:
das ist mein Thema hier ;) ...

Wollte nochmal schnell auf meine Frage ein paar Posts weiter oben 
verweisen ;)

von Karl H. (kbuchegg)


Lesenswert?

Joachim A. schrieb:

> Jetzt stellt sich mir allerdings die Frage: wie gebe ich diesen "time
> /t"-Befehl vom µC an den PC?

Gar nicht.
Dazu müsste auf Windows eine Command Line laufen, die ihre Eingaben 
nicht von der Tastatur sondern von der seriellen Schnittstelle bekommt 
und ihre Ausgaben auch wieder dort hin sendet.

> Wie gesagt, mit der Art der Kommunikation
> mit Windows hatte ich noch nichts zu tun.

Da gibts auch nicht viel.

> Angenommen der Controller sendet "ich will bitte die uhrzeit empfangen".
> Dann muß ich ja auf dem PC irgendwas am laufen haben, was diesm Befehl
> empfängt, auswertet und dann dieses "time /t" ausführt. Wie wird das
> üblicherweise gemacht?

man kann versuchen einen Telnet Server zu bekommen, der über die 
serielle Schnittstelle angesprochen werden kann. Es gibt auch noch 
andere Programme, die genau das machen: eine Command Line über die 
serielle Schnittstelle anbieten.

Aber meistens programmiert man sich ein Windows-Programm, welches auf 
Kommandos auf der Seriellen lauscht und die gewünschte Information 
besorgt. So ein µC interessiert sich ja normalerweise nicht für so viele 
Dinge am PC und macht auch keine Fernwartung des Windows Rechners.

von gero (Gast)


Lesenswert?

Joachim A. schrieb:
> das ist mein Thema hier ;) ...

Ja, sorry, aber es war interessant, das ist gut zu wissen.
Frag ihn mal, ob es dann als fünf UART-chars rauskommt :)

von Karl H. (kbuchegg)


Lesenswert?

Joachim A. schrieb:
> time /t >COMx" gibt mir ein "Das System kann die angegebene Datei nicht
> finden.

Leerzeichen!

der Haken '>'  hat eine Bedeutung!
Er sorgt für die Umleitung der Ausgabe des Vorhergehenden. Er gehört 
daher nicht zum COM1 dazu

time /t > test.dat

speichert die Ausgabe des time Kommandos in test.dat

time /t > COM1:

speichert die Ausgabe des time Kommandos in COM1. COM1 ist aber zufällig 
die serielle Schnittstelle (die sich hier wie eine ganz normale Datei 
präsentiert, in die selbstverständlich geschrieben werden kann. Nur 
landet dann eben das Geschriebene auf dem Kabel und nicht auf der 
Festplatte)

von Karl H. (kbuchegg)


Lesenswert?

gero schrieb:
> Karl heinz Buchegger schrieb:
>> Seit dem ganzen Klicki Bunti Zeugs können immer weniger Leute mit der
>> Command Line umgehen.
>
> Da muss ich dir leider Recht geben und ich gehöre ebenfalls dazu.

Ich hab auch schon wieder viel vergessen :-)
Aber manche Dinge gehen von der Command Line einfach besser.
Hast du dich schon mal geärgert, wenn Windows wieder mal rumtrödelt um 
alle Dateien eines Verzeichnisses zu löschen?

# Command Line auf.
# zum Verzeichnis navigieren
# del *.*

So schnell könnte die Operation ablaufen, wenn man nicht vorher 
feststellen muss, wieviele Dateien und Bytes gelöscht werden müssen, 
damit die Grenzen für den Fortschrittsbalken bestimmt werden können :-)

von Joachim B. (jojo84)


Lesenswert?

Karl heinz Buchegger schrieb:
> So ein µC interessiert sich ja normalerweise nicht für so viele
> Dinge am PC und macht auch keine Fernwartung des Windows Rechners.

hihi, ja, das stimmt =)

Daß der Controller nicht "direkt" den Uhrzeit-Befehl sendet hatte ich 
schon so verstanden. Aber bei mir ist kenntnismäßig eben da schöuß, wo 
ich einen "telnet"-server laufen lassen soll, oder daß ich ein 
Windows-Programm schreiben soll, was auf einen COM-Port lauscht. Da ist 
einfach die Sache, daß man da nicht so gut drüber Bescheid weiß, wenn 
man sowas noch nicht gemacht hat, sry :( ...

@gero:
nicht bös gemeint, m'kay? Wollte nur nicht, daß meine Fragen hier 
untergehen... :)

von Karl H. (kbuchegg)


Lesenswert?

Joachim A. schrieb:

> ich einen "telnet"-server laufen lassen soll, oder daß ich ein
> Windows-Programm schreiben soll, was auf einen COM-Port lauscht. Da ist
> einfach die Sache, daß man da nicht so gut drüber Bescheid weiß, wenn
> man sowas noch nicht gemacht hat, sry :( ...

Dann wirds Zeit.
Du kannst ja nicht ewig mit Hyperterminal rumrödeln um deinem µC eine 
'Ausgabefläche für seine Ergebnisse' zur Verfügung zu stellen.

Mit Visual Basic oder C# ist das Erstellen einer Fenster basierten 
Anwendung dann ja auch keine große Hexerei mehr.

von Peter D. (peda)


Lesenswert?

Die COM ist wie eine Datei. Eine Datei kann nichts von selber machen.

Du brauchst also ein Programm, was die COM öffnet, etwas daraus liest 
und etwas zurück schreibt.
Du brauchst also irgendne Programmierumgebung, um so ein Programm zu 
schreiben.


Peter

von Joachim B. (jojo84)


Lesenswert?

Karl heinz Buchegger schrieb:
> Dann wirds Zeit.

Ja, ich weiß... ich geißel mich ja auch schon die ganze ZEit ;) ...

Dann frag ich mal so: kann mir jemand (oder vielleicht Karl Heinz?) 
Quellen nennen, über die ich mich da selbst einarbeiten kann? Ich finde 
das nämlich interessant, auch weil ich dann ja z.B. Messwerte oder sowas 
direkt in eine Datei auf dem PC schreiben könnte, ohne den Umweg übers 
Terminalprogramm :)

VG

von Maxx (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Gar nicht.
> Dazu müsste auf Windows eine Command Line laufen, die ihre Eingaben
> nicht von der Tastatur sondern von der seriellen Schnittstelle bekommt
> und ihre Ausgaben auch wieder dort hin sendet.

Siehe ctty bzw putty.

von karadur (Gast)


Lesenswert?

Hallo


für Tests mit comx: sollte man auch den Mode-Befehl kennen. Damit werden 
die Parameter der Schnittstelle konfiguriert.

von Joachim B. (jojo84)


Lesenswert?

OK, danke nochmal für die Tips!

Dann weiß ich schonmal so grob, wo ich ansetzen muß. Wenns wieder 
Probleme gibt (ich geh mal davon aus ;) ) muß ich mich wohl wieder 
melden...

Kann ja das Feld für gero freigeben :) ...

Gruß,
Joachim

von gero (Gast)


Lesenswert?

Na, ich habe aufmerksam mitgelesen! ;-)

von Hansilein (Gast)


Lesenswert?

Processing könnte eine einfache Alternative zu "richtiger" 
Programmierung sein.

von ... (Gast)


Lesenswert?

gero schrieb:
> Karl heinz Buchegger schrieb:
>> Seit dem ganzen Klicki Bunti Zeugs können immer weniger Leute mit der
>> Command Line umgehen.
>
> Da muss ich dir leider Recht geben und ich gehöre ebenfalls dazu.

Naja, wenigstens "HELP" sollte man auf der Kommandozeile aber noch 
tippen können :)
Und mit "help time" oder "time /?" bekommt man dann auch die Erklärung 
für das "/t".
Und mit "help mode" bzw. "mode /?" sieht man, wie man die Parameter der 
seriellen Schnittstelle einstellt.

von Joachim B. (jojo84)


Lesenswert?

Juhu, das war was, was ich schon wußte :) ... Also das mit dem "befehl 
/?" für ne Erkläuterung...

Ich hab jetzt nochmal etwas rumgeguckt, und auch nen Blick auf dieses 
"putty" und "ctty" geworfen. Aber so ganz raff' ich das noch nicht.
Wäre einer von euch vielleicht so nett und beschrebt mir das in dem 
Stil: " Für AVR-Programmierung brauchst du das XXX-Board, nen Mega32, 
AVR-Studio und WinAVR!" nur für den Zugruff vom µC auf den PC und 
umgekehrt :) ?!

DANKE!

von Karl H. (kbuchegg)


Lesenswert?

Joachim A. schrieb:

> Ich hab jetzt nochmal etwas rumgeguckt, und auch nen Blick auf dieses
> "putty" und "ctty" geworfen. Aber so ganz raff' ich das noch nicht.
> Wäre einer von euch vielleicht so nett und beschrebt mir das in dem
> Stil: " Für AVR-Programmierung brauchst du das XXX-Board, nen Mega32,
> AVR-Studio und WinAVR!" nur für den Zugruff vom µC auf den PC und
> umgekehrt :) ?!


Na ja.
Was gibts da gross zu erklären.

Du kannst deinen AVR über die serielle mit Hyperterminal 'reden lassen'.

So weit so gut

Jetzt machst du ein Command Window auf (vulgo 'DOS-BOX' ), konfigurierst 
mittels 'mode' die serielle Schnittstelle und startest mit

ctty COM1

das den ctty. ctty macht nichts anderes, als auf der seriellen zu 
lauschen, Zeichen zu sammeln und wenn eine Zeile vollständig ist, 
übergibt sie diese an den Command Line Prozessor, der sie ausführt. ctty 
krallt sich den Ergebnistext, den das auszuführende Kommando generiert 
und schickt diesen Text auf umgekehrten Weg wieder über die 
Schnittstelle über die das Kommando eingetrudelt ist.

In a Nutshell: ctty leitet die Ein/Ausgabe eines Command-Windows um. Weg 
von der Tastatur/Fenster, hin zur (in dem Fall) seriellen Schnittstelle 
COM1.

von Joachim B. (jojo84)


Lesenswert?

Ok, super. Nochmals danke, daß du dir die Zeit genommen hast. Ich 
probier mal rum :)

VG

von VON THRON (Gast)


Lesenswert?

habe sowas ähnliches auch vor. möcht meine Uhr allerdings stellen am 
Controller über ein C#- Programm.

Dort habe ich bereits den Befehl:

string Time = DateTime.Now.ToShortTimeString();

Diesen werd ich aufspliten müssen oder?

und wie fange ich die Daten an meinem µC wieder auf?
über eine Interrupt Routine?

von Karl H. (kbuchegg)


Lesenswert?

VON THRON schrieb:
> habe sowas ähnliches auch vor. möcht meine Uhr allerdings stellen am
> Controller über ein C#- Programm.
>
> Dort habe ich bereits den Befehl:
>
> string Time = DateTime.Now.ToShortTimeString();
>
> Diesen werd ich aufspliten müssen oder?
>
> und wie fange ich die Daten an meinem µC wieder auf?

Du formatierst die Uhrzeit in einen Text und schickst sie über die 
PX-Serielle SCHnitstelle zum µC, der sie an seiner UART wieder 
zeichenweise empfängt und zur aktuellen Uhrzeit zusammensetzt.

> über eine Interrupt Routine?

Ist eine Möglichkeit.
Was du eben bisher an Techniken gelernt hast, um Kommunikation über UART 
durchzuführen.

von Eisregen (Gast)


Lesenswert?

Hallo, versuche gerade das gleiche wie VON THRON.

char line[9]

uart_gets( line, sizeof( line ) );
uart_gets(":");

bedeutung von sizeof?
Lese ja den string von der Seriellen schnittstelle, doch wie sag ich ihm 
das er speichern soll. in der Variable, stunde,minute und sekunde?

von Thomas E. (thomase)


Lesenswert?

Karl Heinz Buchegger schrieb:
> In a Nutshell: ctty leitet die Ein/Ausgabe eines Command-Windows um. Weg
> von der Tastatur/Fenster, hin zur (in dem Fall) seriellen Schnittstelle
> COM1.

Bist du sicher, dass das heutzutage noch funktioniert?
Dafür braucht man doch ein richtiges DOS. In der Emulation von XP usw. 
ist der ctty-Befehl doch gar nicht mehr drin.

Siehe 
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/dos_diffs.mspx?mfr=true

Unavailable MS-DOS Commands


mfg.

von VON THRON (Gast)


Lesenswert?

Das senden des strings is nicht mein Problem nur das Empfangen und 
aufteilen!

kann mir jemand helfen?

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.