Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
shouter
Anmeldungsdatum: 11.02.2005 Beiträge: 11
|
Verfasst am: 11.02.2005, 12:50 Titel: Ausgabe am Comport |
|
|
HI @ all
ich habe ein Programm geschrieben das mir einnen bestimmten code von 1 und 0 über den comport ausgibt doch nun ist stack voll und er löscht immer irgendwelche calls! kann man das auch irgendwie anders machen als mit Unterprogrammen so wie ichs gemacht habe?
Hier mein Programm:
DECLARE SUB fuenf ()
DECLARE SUB drei ()
DECLARE SUB vier ()
DECLARE SUB zwei ()
DECLARE SUB anfang ()
DECLARE SUB ende ()
DECLARE SUB c ()
DECLARE SUB d ()
DECLARE SUB e ()
DECLARE SUB f ()
DECLARE SUB g ()
DECLARE SUB h ()
DECLARE SUB i ()
DECLARE SUB j ()
DECLARE SUB k ()
DECLARE SUB l ()
DECLARE SUB m ()
DECLARE SUB n ()
DECLARE SUB o ()
DECLARE SUB p ()
DECLARE SUB q ()
DECLARE SUB r ()
DECLARE SUB t ()
DECLARE SUB loeschen ()
DECLARE SUB start ()
DECLARE SUB eins ()
DECLARE SUB b ()
DECLARE SUB a ()
DECLARE SUB ein ()
DECLARE SUB aus ()
OUT (1020), 0
SLEEP 1
CALL start
SLEEP 1
OUT (1020), 1
END
SUB a
CALL aus
CALL ein
CALL aus
CALL aus
CALL aus
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL aus
CALL ein
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL ein
CALL ein
CALL aus
CALL aus
CALL aus
CALL ein
CALL aus
SLEEP 1
CALL loeschen
END SUB
SUB acht
CALL anfang
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL ende
END SUB
SUB anfang
CALL aus
CALL ein
CALL aus
CALL aus
CALL aus
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
END SUB
SUB aus
OUT (1020), 0
FOR Z = 0 TO 20
NEXT
END SUB
SUB b
CALL aus
CALL ein
CALL aus
CALL aus
CALL aus
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL aus
CALL ein
CALL ein
CALL ein
CALL aus
CALL aus
CALL aus
CALL ein
CALL aus
SLEEP 1
CALL loeschen
END SUB
SUB c
CALL anfang
CALL ein
CALL ein
CALL aus
CALL ein
CALL ein
CALL aus
CALL ein
CALL ein
CALL aus
CALL ende
END SUB
SUB d
CALL anfang
CALL ein
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL ein
CALL ende
END SUB
SUB drei
CALL anfang
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ende
END SUB
SUB e
CALL anfang
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL ende
END SUB
SUB ein
OUT (1020), 3
FOR Z = 0 TO 2
NEXT
OUT (1020), 0
FOR x = 0 TO 18
NEXT
END SUB
SUB eins
CALL aus
CALL ein
CALL aus
CALL aus
CALL aus
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL aus
CALL aus
CALL aus
CALL ein
CALL aus
REM SLEEP 1
REM CALL loeschen
END SUB
SUB ende
CALL ein
CALL aus
CALL aus
CALL aus
CALL ein
CALL aus
CALL aus
CALL aus
REM CALL loeschen
END SUB
SUB f
CALL anfang
CALL aus
CALL ein
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL ein
CALL aus
CALL ende
END SUB
SUB fuenf
CALL anfang
CALL aus
CALL ein
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ende
END SUB
SUB g
CALL anfang
CALL ein
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL ein
CALL aus
CALL ende
END SUB
SUB h
CALL anfang
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL ein
CALL aus
CALL ende
END SUB
SUB i
CALL anfang
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ende
END SUB
SUB j
CALL anfang
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL ein
CALL ende
END SUB
SUB k
CALL anfang
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL ein
CALL ende
END SUB
SUB l
CALL anfang
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL ein
CALL aus
CALL ende
END SUB
SUB loeschen
CALL aus
CALL ein
CALL aus
CALL aus
CALL aus
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL ein
CALL aus
CALL ein
CALL ein
CALL ein
CALL ein
CALL ende
SLEEP 1
END SUB
SUB m
CALL anfang
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL ein
CALL aus
CALL ein
CALL ein
CALL aus
CALL ende
END SUB
SUB n
CALL anfang
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL ein
CALL aus
CALL ein
CALL ein
CALL ende
END SUB
SUB neun
CALL anfang
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL ende
END SUB
SUB null
CALL anfang
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ende
END SUB
SUB o
CALL anfang
CALL aus
CALL ein
CALL ein
CALL ein
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL ende
END SUB
SUB p
CALL anfang
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL ende
END SUB
SUB q
CALL anfang
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ende
END SUB
SUB r
CALL anfang
CALL ein
CALL ein
CALL aus
CALL ein
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ende
END SUB
SUB sechs
CALL anfang
CALL ein
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ende
END SUB
SUB sieben
CALL anfang
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL aus
CALL ende
END SUB
SUB start
CALL anfang
CALL ein
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL ein
CALL aus
CALL ende
END SUB
SUB t
CALL anfang
CALL aus
CALL ein
CALL ein
CALL aus
CALL ein
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL ende
END SUB
SUB vier
CALL anfang
CALL ein
CALL ein
CALL aus
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL ende
END SUB
SUB zwei
CALL anfang
CALL aus
CALL ein
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL ein
CALL aus
CALL aus
CALL ein
CALL ende
END SUB
MFG
Shouter |
|
Nach oben |
|
 |
Mecki Igel

Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
Verfasst am: 11.02.2005, 14:06 Titel: |
|
|
Wie wärs mit DATA?
Dann hättest du einen Block mit dem du das ganze steuerst?
Code: | eins:
DATA "010001111110111001011100010" |
und dann einen Reader:
Code: | RESTORE eins: Reader |
die Reader SUB hat dann die Steuerbefehle:
0 / 1 = aus / an
Code: | SUB Reader
READ A$
FOR A=1 TO LEN (A$)
AnAus$=mid$(A$,a,1)
if AnAus$="0" then 'Aus
OUT (1020), 0
FOR Z = 0 TO 20
NEXT
elseif AnAus$="1" then 'An
das entsprechende für AN
end if
NEXT
end sub |
Nach dem Aufruf der Reader-SUB kannst du ja dann dein SLEEP setzen usw und Löschen und was weiß ich
Du kannst ja um diese Mini-Script-Sprache noch mal eine Script-Sprache drum herumrum coden, mit der du dann auch steuerst, was gemacht werden soll, d.h. wie lange warten usw..
Grüßle,
Mecki _________________ » Yodl.de: So sucht man gestern.
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de |
|
Nach oben |
|
 |
shouter
Anmeldungsdatum: 11.02.2005 Beiträge: 11
|
Verfasst am: 12.02.2005, 14:16 Titel: |
|
|
Danke erst einmal!
weißt du ne möglichkeit wie ich eine pause von etwa 75ms mache?
habe mir jetzt mit dieser schleife beholfen, ist aber nicht das ware weil das ja von der geschwindigkeit des cpus abhängt!!!! |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 12.02.2005, 17:41 Titel: |
|
|
Hi!
Genau das selbe Problem hatten schon ziemlich viele andere vor dir auch. Die letzte Diskussion zu diesem Thema findest du unter
http://forum.qbasic.at/viewtopic.php?t=555
Da sind zwei Lösungsansätze, und ich denke, dass sie einigermaßen genau genug sind.
Viel Spaß damit! _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 12.02.2005, 19:53 Titel: |
|
|
Zum Titelthema: Das Code-Beispiel passt bezüglich des Software-Designs wieder einmal gut zu
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Anfaengerfehler.html
Vielleicht meine Varianten dazu: Ich würde Programm (Ansteuerung) und Daten (=die verschiedenen Muster) trennen, beispielsweise mit einer .TXT-Datei arbeiten, welches ein Format wie
Code: | a=010001111110111001011100010{loeschen}
acht={anfang}01001010011001{ende}
anfang=0100... |
(kann man recht bequem mit NOTEPAD.EXE erstellen) besitzt. Die Datei lässt sich dann mit OPEN und LINE INPUT# einlesen und mit INSTR() und MID$() verarbeiten.
@shouter: Auf Wunsch kann ich Dir ein Codebeispiel davon machen.
Zum vollen Stack: Möglicherweise (habe es nicht genau analysiert) hast Du eine unendliche Rekursion. Siehe dazu
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html
Untertitel "Ein häufiger Programmierfehler bei Rekursion: Stapelüberlauf" (ziemlich in der Mitte des Artikels) _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
shouter
Anmeldungsdatum: 11.02.2005 Beiträge: 11
|
Verfasst am: 13.02.2005, 01:56 Titel: |
|
|
@dreael
es wäre sehr nett wenn du mir ein code beispiel machen könntest!!!  |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 13.02.2005, 11:21 Titel: |
|
|
Bevor ich ein Code-Beispiel machen kann, würde ich gerne einigermassen das Ziel/Aufgabe Deines Programms verstehen, also das Umfeld. Ist das Ziel von Dir die Ansteuerung einer LED-Displayzeile mit einem Schieberegistercode?
Ebenfalls wichtig: Wir müssen Deine vielen Unterprogramme etwas genauer klassifizieren können. Ein() und Aus() sind sicher einmal so eine Gruppe: Bit setzen bzw. löschen. Start() und Ende() scheinen dies auch zu sein. Eins() bis Acht() sowie a() bis t() sollen den Zeichenvorrat Deiner Displayzeile darstellen?
Ziel ist eine Optimierung, denn es macht wenig Sinn, irgend ein superraffiniert-komplizierter .TXT-Interpreter mit Rekursionen zu erstellen, wenn Du eigentlich nur einen Text auf einer Displayzeile ausgeben willst, der sich aus den Zeichen 0..8, a..t zusammensetzt, dort jeweils Start() und Ende() immer vorkommen und 1 Sek. warten ebenfalls.
Versuch also möglichst konkret das Problem als Ganzes zu beschreiben:
frei erfundenes Beispiel hat Folgendes geschrieben: | Habe an COM1 eine Display-Zeile von Gibtsgarnicht Electronics (Art. Nr. 1234567) angeschlossen, welche zwei Eingänge verwendet und das genaue Protokoll mit den Signalflanken unter http://www.gibtsgarnicht-electronics.de/support/techspects/art1234567.pdf beschrieben wird. Dazu habe ich ein Kabel gemäss dieser Anleitung gelötet, welches das RTS-Signal mit Eingang 1 der Display-Zeile verbindet sowie das DSR-Signal mit Eingang 2. Das Ganze möchte ich von einem unter MS-DOS 6.22 laufenden 486er-PC mit QB 4.5 ansteuern können. Laut Anleitung muss man bei jedem Zeichen einen immer gleich bleibenden Prolog senden (SUB anfang()), dann das Bitmuster (kann man auf karriertem Schreibblockpapier selber entwerfen; 5x7-LED-Matrix) und danach ein Epilog (SUB ende()). Sobald das letzte Bit vom Epilog gesendet wird, scrollt die Displayzeile den Text 1 Zeichen nach links und stellt in der Lücke das soeben gesendete Bitmuster dar. |
_________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
shouter
Anmeldungsdatum: 11.02.2005 Beiträge: 11
|
Verfasst am: 14.02.2005, 09:06 Titel: |
|
|
@dreael
Ja du hast recht! Das programm soll LED-Display ansteuern!
allerdings ist das ein sehr altes display über das man garnichts findet!!!!
ich brauche allerdings noch mehr Codes als nur 0...9 und a...t(....z)
Ja ein bzw aus sorgen für die impulse!
und das unterprogramm start bzw ende ist dafür da das ich am anfang einer zahl bzw eines buchstaben nicht immer den selben code eingeben muss!!!
Shouter |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 14.02.2005, 10:58 Titel: |
|
|
Hallo
shouter hat Folgendes geschrieben: | @dreael
Ja du hast recht! Das programm soll LED-Display ansteuern!
allerdings ist das ein sehr altes display über das man garnichts findet!!!! |
Vielleicht könntest du ja trotzdem mal beschreiben, wie das Teil aussieht bzw. funktioniert. Also wieviele Punkte hat das Display, wie sind die auf Zeilen und Spalten aufgeteilt. Wie werden diese angesteuert usw. Für was brauchst du z.B: die 75ms Verzögerung?
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 14.02.2005, 13:36 Titel: |
|
|
Hallo!
Vielleicht braucht er die Verzögerung für einen Refresh (Aktualisierung) des Displays, oder er will was blinken (Ja gut, bei 75ms flimmern) lassen...
Kleiner Hinweis am Rande:
QuickBasic ist ein DOS-Programm. Unter DOS (Auch in der Emulation) kann nur 640 KB Arbeittspeicher für Programme (EXE-Dateien )verwendet werden. QuickBasic begrenzt die Dateigröße von BAS-Dateien auf genau 64 KB (Genauso groß ist ein Segment, ein Teil der Speicheraufteilung von DOS, bzw dem Real-Modus.)
Ab größeren BAS-Dateien oder zu vielen oder großen Variablen oder Datensätzen im Sppeicher bekommt QuickBasic "Platzangst", deshalb kam am Anfang bei dir ein Stacküberlauf ...
Man kann auch die verschiedenen darzustellenden Zeichen in eine extra-Datei schreiben, und dann mit GET, LINE INPUT usw. wieder lesen. Dann kann man sogar seine "eigene Zeichen" machen, das spart auch Arbeitsspeicher, nicht so wie z.B. Anweisungen mit DATA.
MfG Quark48, das Spangengesicht  _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
shouter
Anmeldungsdatum: 11.02.2005 Beiträge: 11
|
Verfasst am: 14.02.2005, 14:00 Titel: |
|
|
nein ich habe ein led-display das mithilfe einer fernbedienung gesteuert wird!
und das programm soll einfach dies fernbedienung simulieren! |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 14.02.2005, 14:11 Titel: |
|
|
Hallo!
Wie nochmal, ich bin auch nur ein Mensch ...
1. und du hast ein LED-Display drauf (Auf der Fernbedienung )
Und das, was das LED-Display auf der Fernbedienung zeigt,
möchstest du auf deinem eigenen Display anzeigen (Wofür du das Programm geschrieben hast.)
...oder...
2. Du möchtest das LED-Display, das auf der Fernbedienung drauf ist,
mit deinem Programm steuern...
...oder...
3. Dein Programm steuert eine Fernbedienung für das LED-Display...
Schreib noch mal Schritt für Schritt...
Und langsam, ganz früher habe ich auch ungenau geschrieben.
MfG Quark48, das Spangengesicht  _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
shouter
Anmeldungsdatum: 11.02.2005 Beiträge: 11
|
Verfasst am: 14.02.2005, 16:28 Titel: |
|
|
Also das 3. drifft es am ehesten!!! aber nicht ganz
Also ich habe ein großes led display(etwa so groß wie in linienbussen)
dass man mit einer infarotfernsteuerung steuern kann!
und das programm das ich geschrieben habe soll die fernbedienung ersetzen!!
Dazu habe ich das Display mit hilfe eines optokopplers an den com port angeschlossen!!!
und durch das programm werden dann 1 und 0 über den comport ausgegeben wodurch das display buchstaben ausgibt!
ich hoffe das es so verständlich ist! |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 14.02.2005, 21:45 Titel: |
|
|
Nette Idee - ob sich womöglich die IrDA-Schnittstelle heutiger Notebooks auch als Fernbedienung eignen würde, könnte ich nicht einmal sagen... ;-)
Ansonsten wäre es gut, wenn Du die vorhandenen technischen Datenblätter auf den Scanner legen könntest und die .JPGs auf einen Webspace stellen könntest, so wie ich dies beispielsweise mit
http://beilagen.dreael.ch/QB/VGAPROG/
auch schon machte. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 14.02.2005, 21:50 Titel: |
|
|
Hallo!
@shouter:
Achso, schreib´ das doch gleich am Anfang des Threads hin, dass weiß man gleich bescheid, was gemeint ist!
PS: Ich war früher auch so, bsit nicht allein - und vorallem:
Nobody´s perfect...
MfG das Spangegesicht  _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 14.02.2005, 23:02 Titel: |
|
|
Hallo!
Wie bist du denn an den Code der Fernbedienung gekommen, also woher kennst die die Bitfolgen, die für die verschiedenen Zeichen gesendet werden müssen? Eine Möglichkeit wäre nämlich, einfach die Signale der Fernbedienung aufzuzeichnen bzw. die Dauer der 0- und 1-Impulse zu messen und zu speichern. Also eine Art lernfähige Fernbedienung selbst schreiben. Ich habe das schon mit der TV- und Videofernbedienung gemacht und per Infrarot QB-Programme gesteuert oder umgekehrt den Videorecorder vom Rechner starten lassen usw. Wenn du das genaue Format des Übertragungsprotokolls kennst, kannst du ganz einfach und schnell mit einem kleinen Programm die Signale aller Tasten einlesen und sie einem Array von Variablen zuordnen. So ungefähr:
- Drücken sie jetzt Taste A
(drücken)
- Taste erkannt
- Drücken sie jetzt Taste B
usw.
Danach die Werte in einer Datei anspeichern und fertig. So habe ich's gemacht. Der Code den du zu Beginn gepostet hast - können da Tippfehler in den Bitmustern drinsein oder lief der so schon?
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
shouter
Anmeldungsdatum: 11.02.2005 Beiträge: 11
|
Verfasst am: 15.02.2005, 16:42 Titel: |
|
|
Habe das mit dem oszilloscope gemacht!!!
Edit:
kann ir vieleicht jemand ein beispiel programm machen weil ichd as net ganz verstehe !
Ich würde das ganze gerne sio machn wie dreael vorgeschlagen hat!
also mit einer txt datei! |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 15.02.2005, 22:06 Titel: |
|
|
Hallo
Hier ist mal ein Ansatz. Dreael sprach zwar noch davon, die Textzeilen mit z.B. Notepad zu erstellen und diese Datei dann vom Programm einlesen zu lassen, jedoch ist es auch so schon einfacher als fur alles eine eigen SUB zu machen.
Code: | anfang$ = "01000111111"
ende$ = "10001000"
null$ = "1001011010010"
text$ = anfang$ + null$ + ende$
FOR stelle = 1 TO LEN(text$)
wert = ASC(MID$(text$, stelle, 1)) - 48
OUT 1020, wert
NEXT
|
Anstatt für jedes Zeichen eine eigene Textvariable zu benützen, könntest du auch ein Array anlegen und dort die Zeichen gleich unter dem passenden ASCII-Wert abzulegen. also statt
null$ = "1001011010010"
einfach
text$(48 ) = "1001011010010"
sofern das Display das Zeichen anzeigen kann.
Normalerweise sind die IR-Signale von Fernbedienungen wegen der Störsicherheit nochmal gepulst. Dabei liegt die Pulsfrequenz weit höher als die der Signale (z.B. bei 36kHz). Ist das bei deiner Fernbedienung nicht auch so und wenn doch, hast du das berücksichtigt? Allerdings hätte man das dann auf dem Oszilloskop sehen müssen. Was für eine zeitliche Auflösung schafft denn das Teil bzw. wie hast du das Signal den aufgenommen?
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
shouter
Anmeldungsdatum: 11.02.2005 Beiträge: 11
|
Verfasst am: 16.02.2005, 09:06 Titel: |
|
|
Hallo
mal ne frage für was ist das gut?
Zitat: | FOR stelle = 1 TO LEN(text$)
wert = ASC(MID$(text$, stelle, 1)) - 48
OUT 1020, wert
NEXT
|
und noch eine frage!
Zitat: |
anfang$ = "01000111111"
ende$ = "10001000"
null$ = "1001011010010"
text$ = anfang$ + null$ + ende$ |
wo muss ich das im programm hinmachen? am anfang?
ja die signale sind ein bisschen anders!
als in meinem program so wie ich es hier gepostet habe!
Allerdings habe ich es mittlerweile aktualisiert!
ist im prinzip ja auch egal.....
kann das was ihr mir empfiehlt ja soweit abendern dass es wieder stimmt!
Shouter |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 16.02.2005, 10:49 Titel: |
|
|
Hallo!
Du gibst das Zeichen "0" ja so aus.
CALL anfang
CALL aus
CALL ein
...
CALL ende
und in den SUBs anfang und ende steht dann nochmall CALL ein&aus.. Statt nun jedesmal ein CALL zu machen, kannst du für jedes Zeichen das du senden willst eine Stringvariable anlegen, in der die entsprechenden ein- und aus-Befehle als Folge von "1" und "0" stehen. Also ein CALL aus ist eine Null und CALL ein eine Eins. Wenn du Texte oder Textvariable mit "+" verbindest, werden sie einfach aneinandergehängt. So wird noch das CALL anfang und ende ersetzt, indem diese Teile ebenfalls als String abgelegt und mit dem für das Zeichen selbst zu einer kompletten Folge zusammengesetzt werden.
Die FOR...NEXT-Schleife zerlegt so einen Text wieder in einzelne Einsen und Nullen. Dabei ermittelst du mit LEN die Länge des Strings. Mit MID$ kannst du Stücke aus einem Text "herausschneiden". Der ASC()-Befehl übergibt den ASCII-Wert eines Zeichens. Der von "0" ist 48, der von "1" ist 49. Deshalb noch die -48. Wenn mann so wieder Zahlen hat, werden die über OUT an die Schnittstelle gesendet. Die Verzögerungsschleife für die 75ms ist halt nicht dabei.
Alle Befehle sind aber in der Hilfe des QB-Editors erklärt und auch in der vielzitierten Monster-FAQ auf www.qbasic.de werden solche Sachen ebenfalls genau beschrieben. Damit sollte eigentlich auch klar sein, wie und wo das alles in dein Programm eingebaut werden müsste.
shouter hat Folgendes geschrieben: | ja die signale sind ein bisschen anders!
als in meinem program so wie ich es hier gepostet habe!
Allerdings habe ich es mittlerweile aktualisiert!
ist im prinzip ja auch egal.....
kann das was ihr mir empfiehlt ja soweit abendern dass es wieder stimmt! |
Ich frage deshalb, weil es natürlich viel einfacher wäre, wenn man ein System finden könnte. Wenn z.B. für Buchstaben und Zahlen immer eine feste Zahl von Bits per IR übertragen werden, würde es schon reichen, die jeweilige Dezimalzahl zu speichern. Wenn diese dann noch zusammenhängend wären (z.B. A=1, B=2, C=3 usw.) bräuchte man nur noch den ASCII-Wert umzurechnen, in Bits zu zerlegen und die zu senden. So liesse sich mit wenigen Zeilen ein Programm realisieren, bei dem man einfach eine Taste der Tastatur drückt und das Zeichen gesendet wird. Ganz ohne Tabellen nur mit umrechnen.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
|