Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Mr_T aka FtFanmaster
Anmeldungsdatum: 26.12.2004 Beiträge: 103 Wohnort: Speyer
|
Verfasst am: 22.01.2006, 12:25 Titel: Joystick vorgaukeln |
|
|
Tach.
Ich wollte in FreeBasic über den Gameport ein paar Analogwerte einlesen.
Beim Testen mit dem Joystick funktioniert das mit Getjoystick auch wunderbar.
Sobald ich aber den Joystick abnehme sagt Windows (9: "Kein Joystick verbunden". Somit werden auch keine Werte eingelesen.
Wie bekomme ich also Windows dazu, auch ohne Joystick die Analogwerte einzulesen?
MfG |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 22.01.2006, 13:58 Titel: Re: Joystick vorgaukeln |
|
|
Hallo
FtFanmaster hat Folgendes geschrieben: | Wie bekomme ich also Windows dazu, auch ohne Joystick die Analogwerte einzulesen? |
Was genau willst du denn einlesen wenn nichts angeschlossen ist? Oder geht es nur darum, dass das Programm mit und ohne Joystick laufen soll?
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
Mr_T aka FtFanmaster
Anmeldungsdatum: 26.12.2004 Beiträge: 103 Wohnort: Speyer
|
Verfasst am: 22.01.2006, 14:09 Titel: |
|
|
Ich will Widerstandswerte (genauer: Werte von Potis, LDRs....) einlesen und im Proggi anzeigen lassen.
Das Programm funktioniert auch prima, allerdings nur mit Joystick. Ohne Joystick und mit Widerständen sagter halt "Kein Joystick angeschlossen" und das Programm kann auch nix einlesen.
In QBasic gings ja noch mit Stick, auch ohne Joystick. Aber Getjoystick verlangt halt die Joystick-ID um von Windows die Daten zu holen. Und wenn Windows keinen Joystick findet, gehts halt nicht.
MfG |
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 22.01.2006, 14:57 Titel: |
|
|
Klingt Brutal, aber Zerleg doch den Joystick, so das du den IC in der Hand hast der die ID erzeugt.
Alternativ hilft vielleicht Freebasic für DOS.
Oder man könnte eine QBasic Joystick Routine zerlegen und nach Freebasic umschreiben.
(Ich seh mal nach ob das geht.)
[Edit]
QBasic hatte auch eine interne Routine, also nichts mit einfachem Umschreiben ...
[/Edit]
Oder wenn's gar nicht anders geht, Benutz diese Schaltung:
http://www.skilltronics.de/versuch/elektronik_pc/ad.html _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Zuletzt bearbeitet von Michael Frey am 22.01.2006, 15:05, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Mr_T aka FtFanmaster
Anmeldungsdatum: 26.12.2004 Beiträge: 103 Wohnort: Speyer
|
Verfasst am: 22.01.2006, 15:01 Titel: |
|
|
Tja. Den Joystick hab ich vorhin offen gehabt. Hat nicht viel gebracht.
Ich hätte ja auch alles am Stick anschließen können, aber den brauch ich noch^^
Ich glaube du hast da was falsch verstanden: Ich meinte die ID die Windows vergibt (Joystick #1, #2, #3, #4.....).
Die Schaltung kenn ich.
Das Problem ist, dass ich nur einen solchen A/D Wandler dahab, aber mind. 2 benötige. Ich wollte nämlich Temperatur und Helligkeit einlesen.
Mit dem Gameport wäre das ja kein Problem.
Sollte halt möglichst noch heute gehen.
MfG |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 22.01.2006, 17:44 Titel: |
|
|
Hallo
Mit FB und dessen Zusammenspiel mit Windows kenne ich mich nicht aus aber wenn du keine allzuhohen Ansprüche an Schnelligkeit und Genauigkeit hast, hätte ich da evtl. zwei Ausweichmöglichkeiten. Eine wäre die schon angesprochene Schaltung mit dem TLC549 zu verwenden und z.B. mit einem Relais abwechselnd zwischen den beiden Sensoren hin- und herzuschalten.
Die andere Variante braucht keine zusätzliche Stromversorgung und sieht so aus:
Und das passende Programm für COM1 so:
Code: | CLS
DO
z = 0
OUT 1020, 1 'DTR anschalten
DO
z = z + 1
IF z > 10000 THEN EXIT DO
i = INP(1022) AND 16 'CTS lesen
LOOP WHILE i = 0
OUT 1020, 0 'DTR ausschalten
PRINT z
t = TIMER + .2
DO: LOOP WHILE t > TIMER
LOOP WHILE INKEY$ = "" |
Wenn DTR eingeschaltet wird, springt die Spannung an CTS nicht sofort auf den vollen Wert, sondern steigt langsam an weil der Kondensator über den Widerstand aufgeladen wird. Wie lange es dauert, bis die Schaltschwelle des Eingangs erreicht ist, hängt dabei von der Kapazität und der Grösse des Widerstands ab. Über die Zählschleife wird diese Zeit gestoppt und so kann bei gleichem Kondensator eine Änderung des Widerstands gemessen werden. Der Joystickport macht es ganz ähnlich, nur mit einem internen Kondensator. Wenn DTR ausgeschaltet wird, entlädt sich der Kondensator wieder. Da dazu auch wieder ein bisschen Zeit nötig ist, ist im Programm die Warteschleife mit TIMER eingebaut.
Den Wert von maximal 30kOhm habe ich nur durch experimentieren gefunden. Bei höheren Werten schaltet CTS bei mir nicht mehr durch (deshalb auch der Ausstieg bei Werten >10000 für z). Ich habe auch schon Elkos mit 2,2 und 10µF ausprobiert und die sind trotz wechselnder Polarität nicht explodiert. Die Angaben zu den Bauteilen sind also nur ein Vorschlag. Die müsstest du dir an deine Bedürfnisse anpassen.
Ein anderes Problem ist der bekannte Ärger mit Zeitmessungen mit Schleifen unter Windows. Mir versaut dessen Hintergrundaktivität ungefähr jede zehnte Messung. Da bei Temperatur und Tageslicht (?) keine schnellen Änderungen zu erwarten sind, könnte man Messungen, die stark vom zuletzt gemessenen Wert abweichen ignorieren, oder je nach Anwendung auch solche, die einen bestimmten Maximalwert übersteigen. Mit den drei Ausgängen des COM lassen sich so drei Widerstände messen.
Bei Kunstlicht misst man übrigens zusätzlich leicht die 50Hz-Schwankungen der Netzspannung mit und die Werte springen wild hin und her.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
|
Nach oben |
|
|
Mr_T aka FtFanmaster
Anmeldungsdatum: 26.12.2004 Beiträge: 103 Wohnort: Speyer
|
Verfasst am: 22.01.2006, 19:57 Titel: |
|
|
Hmmm. Nicht schlecht die Lösung, aber nicht ideal, auch deswegen, weil ich keinen Comport freihab und auch keine passende Buchse.
Aber ich hab jetzt ne Idee:
Ich nehm nen NE555 als widerstandsgesteuerter Frequenzgenerator und mess die Impulse pro Zeiteinheit. Das klemm ich dann an den Parallelport an.
Wären also...5 Eingänge...und dann ist da noch die bidirektionale Geschichte.
Danke vielmals für die Tips und Ideen!
MfG |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 24.01.2006, 23:41 Titel: |
|
|
Hi, FtFanmaster hat Folgendes geschrieben: | Ich nehm nen NE555 als widerstandsgesteuerter Frequenzgenerator und mess die Impulse pro Zeiteinheit. | Genau diese Schaltung, mit Zeitmessung sitzt schon auf der Gameport-Karte.
siehe:http://www.bnv-bamberg.de/home/ba1804/mathnat/Physik/Sensoren01.html
Das Problem ist, das nur bei beschalteten Eingängen (Position 0-3 mit max. 100k, oder Sensor max. 100k, an +5V) der Treiber einen Joystik am Gameport erkennt.
Damit sparst du die zusätzliche Elektronik ein, aber Achtung der Gameport ist nicht sehr präzise. Mit gleichem Widerstand an den einzelenen Eingängen 0-3 sind +/-5% normal.
Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
|