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
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
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
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.
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ß
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?
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.
time /t >COMx" gibt mir ein "Das System kann die angegebene Datei nicht finden.
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.
@gero: das ist mein Thema hier ;) ... Wollte nochmal schnell auf meine Frage ein paar Posts weiter oben verweisen ;)
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.
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 :)
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)
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 :-)
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... :)
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.
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
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
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.
Hallo für Tests mit comx: sollte man auch den Mode-Befehl kennen. Damit werden die Parameter der Schnittstelle konfiguriert.
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
Processing könnte eine einfache Alternative zu "richtiger" Programmierung sein.
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.
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!
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.
Ok, super. Nochmals danke, daß du dir die Zeit genommen hast. Ich probier mal rum :) VG
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 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.
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.