oberallgeier
27.05.2011, 16:32
Aufgabenstellung/Stand: Zum Test von IR-Fernbedienungen bzw für Aufnahme und Analyse der gesendeten Codes verschiedener Fernbedienungen habe ich ein QBasicProgramm entdeckt, das recht praktisch parameterisierbar ist und den gesendeten Code visualisiert:
......http://www.skilltronics.de/versuch/elektronik_pc/x-sat.jpg
Das Programm schaltet den Bildschirm auf Vollbildmodus und zeigt darauf die Grafik.
Frage/Problem: Für Dokumentationszwecke würde ich gerne statt des Vollbildmodus den "kleinen" Bildschirm des Kommandozeilenmodus haben, weil der große Bildschirm mit der windowseigenen Capturefunktion nicht "druckbar" ist. Natürlich wäre es redlicher mich in Qbasic einzuarbeiten, aber vielleicht unterstützt jemand meine Faulheit und gibt mir einen Tip ob und evtl. wie ich die Grafik auf den kleinen Teilbildschirm bekomme. Zusatzfrage: ist die Aufgabenstellung/Grafikdarstellung am kleinen Bildschirm-Fenster überhaupt lösbar?
Danke im Voraus.
Der aktuell bei mir auf WinXP laufende Code (Qbasic 7.1, wird als *exe gestartet) :
'SCREEN 12
DIM fz(1999) 'In fz werden die Zeiten der Impulsflanken abgelegt
ba = 760 '1016 ist die Basisadr. fr COM1, fr COM2 ist sie 760
ein% = ba + 6 'damit man in der Schleife nicht rechnen muss
OUT ba + 4, 1 'DTR einschalten zur Stromversorgung
t = TIMER 'Der TSOP braucht nach dem Einschalten etwas
DO: LOOP WHILE TIMER - t < .25 'Zeit bis er den Ausgang auf high legt
OUT 67, 20 'TImer 0, nur LSB, Modus 2
OUT 64, 0 'Timer initialisieren
eingabe:
CLS
INPUT "Dauer der Aufzeichnung in ms (1-1000) "; ms
IF ms < 1 OR ms > 1000 THEN GOTO eingabe
LOCATE 20, 1
PRINT "Jetzt eine Taste der Fernbedienung drcken."
LOCATE 13, 1
PRINT "Eine Einheit ="; ms / 50; "ms"
tmax = ms * 1193.182 'Der Timer zaehlt mit 1193182 Hz
tg = 0 'tg ist die Gesamtzeit des Messvorgangs
burst% = 0 'burst% zaehlt die Flanken des Signals
FOR x = 0 TO 639 STEP 12.8 'Hier wird das
IF x MOD 64 = 0 THEN f = 7 ELSE f = 8 'Raster gezeichnet
LINE (x, 180)-(x, 140), f
NEXT
LINE (0, 140)-(639, 180), 8, B
DO 'Dann wird gewartet,
ialt% = INP(ein%) AND 16 'bis der TSOP-Ausgang und
talt% = INP(64) 'damit CTS das erste mal auf
LOOP WHILE ialt% = 16 'low gehen
DO 'Beginn der Zeitmessung
DO
i% = INP(ein%) AND 16 'Status von CTS einlesen
t% = INP(64) 'Stand des Timerregisters lesen
dt% = talt% - t% 'Systemtakte seit der letzten Messung
IF dt% < 0 THEN dt% = dt% + 256 'Ausgleich des Ueberlaufs
tg = tg + dt% 'Zeitdifferenz zur Geasmtzeit addieren
talt% = t% 'Zeit fuer naechsten Durchlauf merken
LOOP WHILE i% = ialt% 'Auf Signalflanke warten
ialt% = i% 'Bei 0-1-Wechsel auf 1-0 und umgekehrt
fz(burst%) = tg 'Zeitpunkt der FLanke merken
burst% = burst% + 1 'Zahl der Flanken um eins erhoehen
LOOP WHILE tg < tmax 'Ausfuehren bis zur vorgegebenen Zeit
y = 160 'Startwerte fr die Grafik
xa = 0
FOR x = 0 TO burst% - 1 'Anzeige des aufgezeichneten
xb = 640 * fz(x) / tmax 'Signals
FOR xl = xa TO xb
LINE (xl, 180)-(xl, y), 2
NEXT
xa = xb
IF y = 160 THEN y = 180 ELSE y = 160
NEXT
LOCATE 20, 1 'Menu
PRINT "(1) Neue Messung "
PRINT "(2) Ende"
DO
t$ = INKEY$
LOOP UNTIL t$ = "1" OR t$ = "2"
IF t$ = "1" THEN GOTO eingabe
OUT 1020, 0 'DTR ausschalten
Danke im Voraus für die Hilfe
......http://www.skilltronics.de/versuch/elektronik_pc/x-sat.jpg
Das Programm schaltet den Bildschirm auf Vollbildmodus und zeigt darauf die Grafik.
Frage/Problem: Für Dokumentationszwecke würde ich gerne statt des Vollbildmodus den "kleinen" Bildschirm des Kommandozeilenmodus haben, weil der große Bildschirm mit der windowseigenen Capturefunktion nicht "druckbar" ist. Natürlich wäre es redlicher mich in Qbasic einzuarbeiten, aber vielleicht unterstützt jemand meine Faulheit und gibt mir einen Tip ob und evtl. wie ich die Grafik auf den kleinen Teilbildschirm bekomme. Zusatzfrage: ist die Aufgabenstellung/Grafikdarstellung am kleinen Bildschirm-Fenster überhaupt lösbar?
Danke im Voraus.
Der aktuell bei mir auf WinXP laufende Code (Qbasic 7.1, wird als *exe gestartet) :
'SCREEN 12
DIM fz(1999) 'In fz werden die Zeiten der Impulsflanken abgelegt
ba = 760 '1016 ist die Basisadr. fr COM1, fr COM2 ist sie 760
ein% = ba + 6 'damit man in der Schleife nicht rechnen muss
OUT ba + 4, 1 'DTR einschalten zur Stromversorgung
t = TIMER 'Der TSOP braucht nach dem Einschalten etwas
DO: LOOP WHILE TIMER - t < .25 'Zeit bis er den Ausgang auf high legt
OUT 67, 20 'TImer 0, nur LSB, Modus 2
OUT 64, 0 'Timer initialisieren
eingabe:
CLS
INPUT "Dauer der Aufzeichnung in ms (1-1000) "; ms
IF ms < 1 OR ms > 1000 THEN GOTO eingabe
LOCATE 20, 1
PRINT "Jetzt eine Taste der Fernbedienung drcken."
LOCATE 13, 1
PRINT "Eine Einheit ="; ms / 50; "ms"
tmax = ms * 1193.182 'Der Timer zaehlt mit 1193182 Hz
tg = 0 'tg ist die Gesamtzeit des Messvorgangs
burst% = 0 'burst% zaehlt die Flanken des Signals
FOR x = 0 TO 639 STEP 12.8 'Hier wird das
IF x MOD 64 = 0 THEN f = 7 ELSE f = 8 'Raster gezeichnet
LINE (x, 180)-(x, 140), f
NEXT
LINE (0, 140)-(639, 180), 8, B
DO 'Dann wird gewartet,
ialt% = INP(ein%) AND 16 'bis der TSOP-Ausgang und
talt% = INP(64) 'damit CTS das erste mal auf
LOOP WHILE ialt% = 16 'low gehen
DO 'Beginn der Zeitmessung
DO
i% = INP(ein%) AND 16 'Status von CTS einlesen
t% = INP(64) 'Stand des Timerregisters lesen
dt% = talt% - t% 'Systemtakte seit der letzten Messung
IF dt% < 0 THEN dt% = dt% + 256 'Ausgleich des Ueberlaufs
tg = tg + dt% 'Zeitdifferenz zur Geasmtzeit addieren
talt% = t% 'Zeit fuer naechsten Durchlauf merken
LOOP WHILE i% = ialt% 'Auf Signalflanke warten
ialt% = i% 'Bei 0-1-Wechsel auf 1-0 und umgekehrt
fz(burst%) = tg 'Zeitpunkt der FLanke merken
burst% = burst% + 1 'Zahl der Flanken um eins erhoehen
LOOP WHILE tg < tmax 'Ausfuehren bis zur vorgegebenen Zeit
y = 160 'Startwerte fr die Grafik
xa = 0
FOR x = 0 TO burst% - 1 'Anzeige des aufgezeichneten
xb = 640 * fz(x) / tmax 'Signals
FOR xl = xa TO xb
LINE (xl, 180)-(xl, y), 2
NEXT
xa = xb
IF y = 160 THEN y = 180 ELSE y = 160
NEXT
LOCATE 20, 1 'Menu
PRINT "(1) Neue Messung "
PRINT "(2) Ende"
DO
t$ = INKEY$
LOOP UNTIL t$ = "1" OR t$ = "2"
IF t$ = "1" THEN GOTO eingabe
OUT 1020, 0 'DTR ausschalten
Danke im Voraus für die Hilfe