Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Ausgabe am Comport
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
shouter



Anmeldungsdatum: 11.02.2005
Beiträge: 11

BeitragVerfasst am: 11.02.2005, 12:50    Titel: Ausgabe am Comport Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 11.02.2005, 14:06    Titel: Antworten mit Zitat

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 lächeln
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.. zwinkern

Grüßle,
Mecki
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
shouter



Anmeldungsdatum: 11.02.2005
Beiträge: 11

BeitragVerfasst am: 12.02.2005, 14:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 12.02.2005, 17:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 12.02.2005, 19:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
shouter



Anmeldungsdatum: 11.02.2005
Beiträge: 11

BeitragVerfasst am: 13.02.2005, 01:56    Titel: Antworten mit Zitat

@dreael
es wäre sehr nett wenn du mir ein code beispiel machen könntest!!! lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 13.02.2005, 11:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
shouter



Anmeldungsdatum: 11.02.2005
Beiträge: 11

BeitragVerfasst am: 14.02.2005, 09:06    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 14.02.2005, 10:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Quark48



Anmeldungsdatum: 16.10.2004
Beiträge: 559
Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern

BeitragVerfasst am: 14.02.2005, 13:36    Titel: Antworten mit Zitat

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 zwinkern )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 lächeln ...

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 zwinkern
_________________
Grüßle, Stefan lächeln
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht! happy
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
shouter



Anmeldungsdatum: 11.02.2005
Beiträge: 11

BeitragVerfasst am: 14.02.2005, 14:00    Titel: Antworten mit Zitat

nein ich habe ein led-display das mithilfe einer fernbedienung gesteuert wird!
und das programm soll einfach dies fernbedienung simulieren!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Quark48



Anmeldungsdatum: 16.10.2004
Beiträge: 559
Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern

BeitragVerfasst am: 14.02.2005, 14:11    Titel: Antworten mit Zitat

Hallo!

Wie nochmal, ich bin auch nur ein Mensch zwinkern ...

1. und du hast ein LED-Display drauf (Auf der Fernbedienung lächeln )
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 lächeln
_________________
Grüßle, Stefan lächeln
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht! happy
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
shouter



Anmeldungsdatum: 11.02.2005
Beiträge: 11

BeitragVerfasst am: 14.02.2005, 16:28    Titel: Antworten mit Zitat

Also das 3. drifft es am ehesten!!! aber nicht ganz happy
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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 14.02.2005, 21:45    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Quark48



Anmeldungsdatum: 16.10.2004
Beiträge: 559
Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern

BeitragVerfasst am: 14.02.2005, 21:50    Titel: Antworten mit Zitat

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 zwinkern - und vorallem:
Nobody´s perfect... cool

MfG das Spangegesicht lächeln
_________________
Grüßle, Stefan lächeln
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht! happy
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 14.02.2005, 23:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
shouter



Anmeldungsdatum: 11.02.2005
Beiträge: 11

BeitragVerfasst am: 15.02.2005, 16:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 15.02.2005, 22:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
shouter



Anmeldungsdatum: 11.02.2005
Beiträge: 11

BeitragVerfasst am: 16.02.2005, 09:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 16.02.2005, 10:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz