Hallo, ich nutzte den PC um damit Fernsehsendungen aufzunehmen. Der PC hängt an einer µC-gesteuerten Steckdose und ist im BIOS so eingestellt, dass er, sobald er am Netz hängt, hochfährt. Der µC ist teil einer größeren Steuerung und ist eh immer im Betrieb. Er bekommt derzeit über den START-Taster des PC-Gehäuses mit, dass der PC hochfahren soll und schaltet dann die Steckdose ein. Über einen USB-Port bekommt er mit, dass der PC nun an ist und sobald hier die Spannung fehlt, weiß er, dass der PC nun aus ist und trennt den PC wieder vom Stromnetz. Nun soll der PC aber auch Aufnehmen. Dafür habe ich eine kleine Einstellmöglichkeit erstellt (serielle Schnittstelle und Terminal), bei der ich die Start-Zeit einstellen kann. Komfortabler wäre es aber, wenn der µC vom PC automatisch per RS232 mitbekommt, wann er den PC hochfahren soll. Bei der Aufnahmesoftware ist es möglich, ein Programm auszuführen, sobald sie beendet wird. Die Aufnahme-Aufgaben werden in einem Ordner gespeichert und tragen z.B. den Dateinamen "ProSieben (AC3) 05-11-2012 20-09-00 Mad Monday.job". Nun möchte ich gerne, dass nachdem DVBViewer (so heißt die Aufnahmesoftware) beendet wurde, ein kleines Programm gestartet wird, das über die Serielle Schnittstelle die Dateinamen der Aufnahme-Aufgaben an den µC schickt. Das könnte z.B. eine .bat sein, die eine .exe mit den entsprechenden Angaben startet: start nochunbekannte.exe -cCOM5 -b19200 -C:\Windows\Tasks\ Ich suche also irgendeine Möglichkeit, die Dateinamen der Dateien in diesem Ordner irgendwie über die serielle Schnittstelle zu übertragen. Ob dafür noch irgendwelche Umwege nötig sind, ist egal. Hauptsache es reicht, dass nur eine Datei ausgeführt werden kann. Es ist aber möglich, dass diese weitere Dateien ausführt. Natürlich geht es auch einfacher, wenn ich ein neues Mainboard kaufe, das den PC per RTC hochfahren kann und den PC dauerhaft ans Stromnetz hänge. Das will ich aber nicht, wäre ja zu einfach. ;) So könnte ich dann auch noch auf einem LCD anzeigen, was aufgenommen wird.
.BAT und .CMD Dateien weren unter Windows von CMD.EXE ausgeführt. Das kann Ausgaben auch nach COMx umleiten (so wie man es von DOS noch kennt). Probier mal in der Eingabeaufforderung aus: echo "Hallo" >COM1 Baudrate usw. kannst du mit dem MODE Kommando einstellen: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/mode.mspx?mfr=true
Danke, das funktioniert ja schon ganz gut. Baudrate ist auch so schon passend. Und mit einer .bat klappt es schon soweit. cd c:\Windows\Tasks\ dir >COM5 Und schon sind alle Dateinamen sowie Änderungsdatum und -Zeit auf dem Weg zum µC. Evtl. lässt es sich auch noch so anpassen, dass es nur noch die Dateinamen sind.
So, das Programm funktioniert nun. Als erstes wird das Programm Terminal.exe, das normalerweise über die serielle Schnittstelle mit dem µC kommuniziert, geschlossen, falls es geöffnet ist. Danach wird der COM-Port für die Kommunikation zum µC eingestellt. Da mein Hauptprogramm auf dem µC zu langsam ist, um die Daten schnell genug zu verarbeiten, wird nun "P#" gesendet. Diese Kombination trifft bei normalem Gebrauch vermutlich nie ein. Der µC bekommt nun 9 Sekunden Zeit, um diese Anweisung zu verarbeiten und in ein Unterprogramm zu gehen, bei dem er fast nichts anderes zu tun hat, als diese Daten zu verarbeiten. Nun wird der gewünschte Ordner gewählt und die Dateinamen werden gesendet. Der µC reagiert hierbei auf die Maske "XX-XX-XXXX XX-XX-XX". Hat er diese erkannt wird der Wert sowie die nächsten Zeichen bis zum nächsten "." (jedoch maximal 18 Zeichen) zwischengespeichert. Nun wird der Wert 99-99-9999 99-99-99 an den µC geschickt. Hier wird dem µC gesagt, dass er die bisher gespeicherten Werte endgültig im EEPROM speichern darf. Anschließend wird Terminal.exe geöffnet und der µC gibt aus, was er nun gespeichert hat. So kann man sofort sehen, ob alles richtig funktioniert hat. Hätte nicht gedacht, dass es so einfach ist. Ich glaub, ich will mein Problem wieder zurück. ;) Danke nochmal für die Hilfe. :stop Taskkill /IM Terminal.exe /f ping 127.127.127.127 -n 2 tasklist |find /i Terminal.exe >nul if %errorlevel% == 0 ( goto stop ) mode COM8:19200,N,8,1 echo P#>COM5 ping 1.1.1.1 -n 9 cd c:\Windows\Tasks\ dir |find /i ".job" >COM5 echo 99-99-9999 99-99-99>COM5 cd/ c: cd Program Files (x86) start Terminal.exe
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.