Forum: PC Hard- und Software PC-Software: Dateinamen aus Ordner an µC senden


von Tim S. (tim_s42)


Lesenswert?

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.

von Marco M. (marco_m)


Lesenswert?

.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

von Tim S. (tim_s42)


Lesenswert?

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.

von Tim S. (tim_s42)


Lesenswert?

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
Noch kein Account? Hier anmelden.