 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
MasterOfDesaster

Anmeldungsdatum: 14.02.2010 Beiträge: 4 Wohnort: nähe Hannover
|
Verfasst am: 14.02.2010, 18:09 Titel: Relaiskartesteuerung über QBasic problem |
|
|
Hy alle zusammen,
ich hätte da mal ne frage.
Ich möchte meine LPT 8 Kanal Relaiskarte von Pollin über qbasic steuern.
das mit dem OUT befehl kann ich schon und funktioniert auch.
jetzt aber meine frage. Wie kann ich einzelne Kanäle ausschalten und nicht nur alle auf einmal ?
und meine zweite Frage... Ich habe eine EXE datei erstellt in der geschrieben ist, dass Kanal 1 eingeschaltet wird und eine EXE datei in der geschrieben ist dass kanal 2 eingeschaltet wird.
Wenn ich die datei aufrufe für den 1sten kanal geht kanal 1 an. wenn ich jetzt aber die datei für kanal 2 aurufe geht kanal 2 ein und kanal 1 aus. Wie bekomme ich es hin, dass er nicht kanal 1 ausschalten ?
Bzw. ist es möglich, dass die datei zuerst ausliest welcher kanal eingeschaltet ist und diesen dann wieder mit einschaltet?
Um hilfe wäre ich sehr froh.
MfG
MasterOfDesaster
Zuletzt bearbeitet von MasterOfDesaster am 14.02.2010, 18:19, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 14.02.2010, 18:14 Titel: |
|
|
Bitte nicht mehr mit "MOD" unterschreiben, könnte zu Verwirrungen führen  |
|
Nach oben |
|
 |
MasterOfDesaster

Anmeldungsdatum: 14.02.2010 Beiträge: 4 Wohnort: nähe Hannover
|
Verfasst am: 14.02.2010, 18:20 Titel: |
|
|
sorry...wusste ich nicht...berichtigt. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
-schumi-

Anmeldungsdatum: 28.10.2009 Beiträge: 131 Wohnort: Südbayern
|
Verfasst am: 14.02.2010, 21:31 Titel: |
|
|
Ach, ein gleichgesinnter
hab auch die K8 Contol und bin seehr zufrieden damit.
Zur Ansteuerung:
Es gibt ja 8 Relais, die jeweils die ersten 8 Bit der Zahl darstellen, die man an die pararelle Schnittstelle sendet, also..
OUT [BASISADRESSE, bei mir 888], 255
(binär: 11111111)
... stellt alle Relais an
OUT [BASISADRESSE], 0
(binär: 00000000)
... stellt alle Relais aus
OUT [BASISADRESSE], 3
(binär: 11000000)
... stellt Relais 1 + 2 an
usw...
um jetzt einem Bit zu ändern Braucht man einen Vergleichsbit...
will man z.B. Relai nr. 3 ändern:
2^(3-1)=4
d.h. man muss OUT, [BASISADRESS], 4 senden um Relai nr. 3 zu einzuschalten, allerdings gehen dann alle anderen Relais aus
(wenn man die Zahl 8 binär darstellt 00100000 lässt sich das nur unschwer erkennen)
soweit warst du vermutlich ja schon...
Mit den folgenden Funktionen OR, AND und XOR bleibt der Zustand der restlichen Relais unverändert:
Wenn du also Relais nr. 3 einschalten willst ist der Code:
OUT [BASISADRESSE], INP([BASISADRESSE]) OR 2^(3-1)
Wenn du also Relais nr. 3 ausschalten willst ist der Code:
OUT [BASISADRESSE], INP([BASISADRESSE]) OR 2^(3-1)
Wenn du also Relais nr. 3 alternieren (umschalten) willst ist der Code:
OUT [BASISADRESSE], INP([BASISADRESSE]) XOR 2^(3-1)
Um einzellne Relais einzulesen braucht man die AND-Funktion:
Beispiel mit Relais nr. 3 :
Relaiszustand% = INP([BASISADRESSE]) AND 2^(3-1)
IF Relaiszustand% = 0 THEN PRINT "Relais 3 ist ausgeschaltet"
IF Relaiszustand% = 2^(3-1) THEN PRINT "Relais 3 ist eingeschaltet"
(Das ganze lässt sich mit IF + ELSE natürlich eleganter lösen)
Das ganze + noch andere infos kann man auch nochmal unter
http://www.franksteinberg.de/progss.htm
nachlesen. Dort ist auch die Ansteuerung der seriellen Schnittstelle beschrieben..
MFG + viel Erfolg
-schumi-
[EDIT]
Der Beitrag wurde nochmal geändert um Fehler zu Beseitigen
...2^Kanal -> ...2^(Kanal-1)
Zuletzt bearbeitet von -schumi- am 15.02.2010, 19:14, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
MasterOfDesaster

Anmeldungsdatum: 14.02.2010 Beiträge: 4 Wohnort: nähe Hannover
|
Verfasst am: 15.02.2010, 15:50 Titel: |
|
|
Danke für die schnelle antwort...
Die Beispiel bas dateien hab ich mir auch schon durchgelesen.
Verstehe es aber nicht so ganz, wie ich es für meinen Fall verwenden kann.
Ich erklär einfach mal was ich damit steuern will, vielleicht ist es dann einfacher zu verstehen.
Ich möchte meine Knight Rider Elektronik damit steuern.
An Kanal 1 hängen die LED´s vom Amaturenbrett
--> http://technabob.com/blog/wp-content/uploads/2007/01/kitt_dashboard.jpg
an Kanal 2 hängt die Voicebox
An Kanal 3 hängt die LED vom Automodus
An Kanal 4 hängt die LED vom Normalmodus
An Kanal 5 hängt die LED Vom Persuitmodus
--> http://www.stevesellman.com/rally/images/dashb.jpg
An Kanal 6 hängt das Lauflicht
http://ebaybilder.silbernagel-und-stell.de/kr1.JPG
An Kanal 7 hängt der Surveillance Mode
--> http://www.rent-a-kitt.de/images/image/pke/suv-unit.jpg
An Kanal 8 hängt der 7" TFT
___________________________________________________
so...nun mein anliegen...
Kanal 1, 2 und 8 sollen immer eingeschaltet sein.
und die anderen nur wenn ich sie starte.
Gestartet soll alles über einzelne EXE Dateien, da ich eine extra dafür entwickelt Sprachsoftware verwende.
allerdings sollen Kanal 3-5 so geregelt sein, dass immer nur einer davon eingeschaltet ist, sprich wenn Automodus aktiviert ist, sollen die anderen beiden Kanäle ausgeschaltet werden... und wenn jetzt z.b. Automodus eingeschaltet ist, ich dann aber Normalmodus einschalte soll Automodus ausgeschaltet werden...
Ich hoffe ihr versteht was ich meine.
Wäre froh über einen (fertigen) Code, da ich noch ziemlicher anfänger in sachen qbasic bin.
Bis auf dass was ich damals in der Schule gelernt habe (Textadventure mit INPUT und IF) kenn ich mich nicht wirklich aus.
Befehle wie OUT888, 1
OUT888, 2.....usw
kann ich schon...aber halt nicht mehr _________________ Ein Mann kann etwas verändern. |
|
Nach oben |
|
 |
-schumi-

Anmeldungsdatum: 28.10.2009 Beiträge: 131 Wohnort: Südbayern
|
Verfasst am: 15.02.2010, 19:09 Titel: |
|
|
Aha, das hilft schon mal weiter..
ganz am Anfang musst du eine *.EXE starten um Kanal 1,2 u. 8 einzuschalten und alle anderen aus...
Binär muss das also so aussehen:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Kanalnummer
--+--+--+---+--+--+--+--+---------------------------------
1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | Zustand
Es muss also an den Port eine Zahl gesendet werden, die Binär 11000001 aussehen muss. Also 2^0 + 2^1 + 2^7 = 131
Das Programm das ganz am Start ausgefürht werden muss enthält also den Code:
OUT [BASISADRESSE], 131
Bei Kanal 6 und 7 gilt folgendes:
Wenn die *.EXE gestarte wird, wird er Zustand umgekehrt, also:
OUT [BASISADRESSE], INP([BASISADRESSE]) XOR 2^[6-1 oder 7-1, je nach Kanal 6 oder 7]
Und bei den Kanälen 3-5:
Code: |
'Als erstes alle Kanäle 3-5 ausschalten:
OUT [BASISADRESSE], INP([BASISADRESSE]) AND (2^2 + 2^3 + 2^4)
'Dann den jeweiligen einschalten:
OUT [BASISADRESSE], INP([BASISADRESSE]) OR 2^[3-1, 4-1 oder 5-1, je nach Kanal 3,4,5)
|
So, das müsste jetz passen...
Der Lerneffekt ist zwar ziehmlich flöten gegangen, aber es lohnt sich auf jeden Fall sich das ganze auf der oben erwähnten Seite nochmal zu Gemüte zu führen...
MFG
-schumi-
PS: hatte im verherigen Beitrag einen Fehler:
Es muss nämlich ...2^[Kanal-1] heissen statt ...2^[Kanal] |
|
Nach oben |
|
 |
MasterOfDesaster

Anmeldungsdatum: 14.02.2010 Beiträge: 4 Wohnort: nähe Hannover
|
Verfasst am: 15.02.2010, 21:24 Titel: |
|
|
vielen dank...der eine teil klappt ja schon, hoffe bekommen morgen den rest hin...
Danke nochmal _________________ Ein Mann kann etwas verändern. |
|
Nach oben |
|
 |
|
|
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.
|
|