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:

Relaiskartesteuerung über QBasic problem

 
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
MasterOfDesaster



Anmeldungsdatum: 14.02.2010
Beiträge: 4
Wohnort: nähe Hannover

BeitragVerfasst am: 14.02.2010, 18:09    Titel: Relaiskartesteuerung über QBasic problem Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 14.02.2010, 18:14    Titel: Antworten mit Zitat

Bitte nicht mehr mit "MOD" unterschreiben, könnte zu Verwirrungen führen Zunge rausstrecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MasterOfDesaster



Anmeldungsdatum: 14.02.2010
Beiträge: 4
Wohnort: nähe Hannover

BeitragVerfasst am: 14.02.2010, 18:20    Titel: Antworten mit Zitat

sorry...wusste ich nicht...berichtigt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

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

Hallo,

Frank Steinberg hat auf seiner Homepage ein ZIP-Archiv mit Beispielcodes (77 kB) zum Thema. In diesem Fall dürften die darin enthaltenen Dateien RELAIS1.BAS und RELAIS2.BAS interessant sein. (Quelle: http://www.franksteinberg.de/hardsteu.htm)

Ich vermute mal, dass bei deiner Relaiskarte direkt über die 8 Datenleitungen gesteuert wird, oder? In dem Fall müsstest du, wenn mehrere Relais anziehen sollen, die entsprechenden Bits des Registers (insg. 8 Bit verfügbar) verknüpfen (OR). In den beiden oben genannten Sourcecodes von Steini ist am Anfang einfach verständlich erklärt, was es mit dieser Bitverknüpfung auf sich hat.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
-schumi-



Anmeldungsdatum: 28.10.2009
Beiträge: 131
Wohnort: Südbayern

BeitragVerfasst am: 14.02.2010, 21:31    Titel: Antworten mit Zitat

Ach, ein gleichgesinnter grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MasterOfDesaster



Anmeldungsdatum: 14.02.2010
Beiträge: 4
Wohnort: nähe Hannover

BeitragVerfasst am: 15.02.2010, 15:50    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 28.10.2009
Beiträge: 131
Wohnort: Südbayern

BeitragVerfasst am: 15.02.2010, 19:09    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 14.02.2010
Beiträge: 4
Wohnort: nähe Hannover

BeitragVerfasst am: 15.02.2010, 21:24    Titel: Antworten mit Zitat

vielen dank...der eine teil klappt ja schon, hoffe bekommen morgen den rest hin...
Danke nochmal
_________________
Ein Mann kann etwas verändern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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
Seite 1 von 1

 
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