PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Qbasic-Grafik von IR-Codes unter WinXP



oberallgeier
27.05.2011, 15: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

DanielSan
27.05.2011, 16:47
Mach mal das ' vor dem screen befehl weg.
Dann müsstest du ein fenster von 80 spalten mal 30 zeilen haben. Wenn dir ds nicht reicht kannst du mit...

WIDTH 80,60
... direkt unter dem screen befehl noch auf 80*60 umstellen.

Ansonsten such mal nach "basic screenmodes"

Gruss daniel

oberallgeier
27.05.2011, 18:41
Hi Daniel,

danke für die Hilfe. Die auskommentierte Zeile SCREEN 12 habe ich wieder aktviert, das ergibt die volle Bildschirmauflösung - also die Darstellungsvariante Vollbildschirm, die ich schon habe und die ich ändern will. Andere Werte wie 9 oder 13 (nach diversen Tutorials) ergeben "falsche" Bildschirmgrössen, offenbar diverse Herstellervarianten. Lediglich der Modus 0
SCREEN 0
macht das was ich will, allerdings läuft dann die Kästchengrafik nicht:

......18884
es gibt die oben genannte Fehlermeldung und das Programm ist abgestürzt. Also nach Deinem Vorschlag und auch nach dem Durcharbeiten der Tutorials (danke für den Hinweis zum Suchen) bekomme ich es nicht hin. Offenbar ist die verwendete Grafikvariante im DOSfenster nicht machbar :( - schade.