-
@danionbike,
Portzugriffe unter Winows: lies Dir mal das hier durch:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=10599
Eine Zeitspanne warten (in C/C++ mit Windows-API):
wie schon erwähnt:
#include <windows.h>
...
Sleep (3 * 60 * 1000); // 3 Minuten warten
...
Besser wäre es mit einem Timer und einer Timerprocedur:
...
SetTimer (NULL, 0, 1000 * 60, MyTimeProc); // 1-Minuten-Timer
...
VOID CALLBACK TimerProc(
HWND hwnd, // handle to window
UINT uMsg, // WM_TIMER message
UINT_PTR idEvent, // timer identifier
DWORD dwTime // current system time
)
{
// Tu irgendwas
}
Warum nimmst Du nicht die serielle Schnittstelle? Die ist kurzschlußfest und liefert ca. 5mA bei etwa 10V.
...
HANDLE hPort;
hPort = CreateFile (TEXT("COM1"),
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);
EscapeCommFunction (hPort, SETRTS); // RTS setzten
Sleep (2000);
EscapeCommFunction (hPort, CLRRTS); // RTS rücksetzten
Sleep (2000);
EscapeCommFunction (hPort, SETRTS); // RTS setzten
Sleep (2000);
CloseHandle (hPort);
...
Blackbird
-
@ Blackbird
die Wartefunktion habe ich ja schon!
diese funktioniert auch einwandfrei.
das mit der seriellen Schnittstelle wäre eine Überlegung wert.
bin leider auf dem Gebiet kein Profi!
meinst du nun, dass ich deinen Quellcode
...
HANDLE hPort;
hPort = CreateFile (TEXT("COM1"),
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);
EscapeCommFunction (hPort, SETRTS); // RTS setzten
Sleep (2000);
EscapeCommFunction (hPort, CLRRTS); // RTS rücksetzten
Sleep (2000);
EscapeCommFunction (hPort, SETRTS); // RTS setzten
Sleep (2000);
CloseHandle (hPort);
...
einfach ins Programm einbinden soll?
Und fertig ist es?
Brauch ich dann unter NT2000/XP keine weiteren Teiber o.ä.?
sorry, wenn ich so viel frage, aber wie gesagt, bin blutiger Anfänger! :-)
-
Ein einfaches Beispiel:
Code:
/*******************************************
** Pin5 ist Masse, Pin7 ist +10V (== AUS)
** Pin7 ist -10V (== EIN)
** Version 1 mit Funktion 'warte ()'
*******************************************/
#include <windows.h>
#include <time.h>
#define SWITCH_ON 3 // Minuten
#define SWITCH_OFF 57
void warte (int sekunden)
{
clock_t start;
sekunden *= CLOCKS_PER_SEC;
start = clock ();
while (clock() < start + sekunden);
}
int main (void)
{
HANDLE hPort;
hPort = CreateFile (TEXT("COM1"), GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
for (;;)
{
EscapeCommFunction (hPort, SETRTS); // RTS setzten Pin7
warte (SWITCH_ON * 60);
EscapeCommFunction (hPort, CLRRTS); // RTS rücksetzten Pin7
warte (SWITCH_OFF * 60);
}
CloseHandle (hPort);
return (0);
}
oder einfacher:
Code:
/*******************************************
** Pin5 ist Masse, Pin7 ist +10V (== AUS)
** Pin7 ist -10V (== EIN)
** Version 2 mit Funktion 'Sleep ()'
*******************************************/
#include <windows.h>
#define SWITCH_ON 3 // Minuten
#define SWITCH_OFF 57
int main (void)
{
HANDLE hPort;
hPort = CreateFile (TEXT("COM1"), GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
for (;;)
{
EscapeCommFunction (hPort, SETRTS); // RTS setzten Pin7
Sleep (SWITCH_ON * 60 * 1000);
EscapeCommFunction (hPort, CLRRTS); // RTS rücksetzten Pin7
Sleep (SWITCH_OFF * 60 * 1000);
}
CloseHandle (hPort);
return (0);
}
Blackbird
-
hallo,
bist du dir sicher, dass an Pin7 10V anliegen?
hab gelesen dass am Parallelport bei einem "high" ca. 5V anliegen.
und nach dem Aufbauschema ist Pin5 auch nicht Masse sondern Pin18 bis Pin 25.
Grundaufbau 25pol Sub-D Buchsenleiste:
Pin2 bis Pin9 = Ausgänge (Bidirektional) Zugriff durch DATA Register
Pin15, Pin10 bis Pin13 = Eingänge Zugriff durch STATUS Register
Pin1, Pin14, Pin 16, Pin17 = Ein/Ausgänge Zugriff durch CONTROL Register
Pin 18 bis Pin25 = Masse
stimmt doch oder?
Oder meinst du nun den seriellen Anschluss????
-
klar, du meinst die serielle.
eine Frage hätte ich noch:
du schreibst in deinem Progr. für Pin7 == AUS ist dieser +10V und für == EIN -10V bzw. Pin5 ist Masse.
Möchte ja gerne ein Relais an den Pin7 anschließen, schaltet das Relais dann auch nur bei -10V? Oder wie ist das mit +/-10V gemeint?
-
hallo!
also das Programm funktioniert!!!
bei EIN habe ich -11,34V
bei AUS habe ich +11,34V
aber wie soll ich damit ein Relais steuern???
was gibt es noch für Möglichkeiten einen Arbeitsstromkreis damit zu steuern?
Möchte ja erreichen dass einmal Strom fließt und dann garkein Strom fließt (auch kein negativer).
bin mal auf eure Antworten gespannt!
-
Ganz einfach: mit einer Diode (Polung ist egal) vom Pin7 zum Relais und vom 2. Anschluß des Relais zum Pin5 (Masse). Das Relais sollte aber ein 12V-Typ im IC-Gehäuse sein, also eins, welches für IC-Ausgänge geeignet ist. Denn mehr als ca. 10 mA kommen da nicht raus.
Solche Relais schalten aber selten mehr als 0,3A bis 0,5A bei höchstens 42V!
Statt Relais kannst Du besser einen Optokoppler (mit Vorwiderstand) einsetzen. Die Empfängerseite kann dann (mit einer externen Spannungsquelle) je nach Schaltung, alles Mögliche treiben/schalten/steuern.
Blackbird
-
hallo!
also wie ich dich versteh kann ich das mitm Relais vergessen oder?
Wie funktioniert ein Optokoppler?
Hast du für meine Anwendung einen Schaltplan o.ä.?
-
hab mich mal bei Conrad umgeschaut.
folgendes Relais gefunden:
SIGNALRELAIS DS2Y 2U 2A 12V
Spulenspannung V/DC 12
Typ DS2Y-S-DC12V
Ansprechsp. V/DC max. 8,4
Abfallsp. V/DC min. 1,2
Spulenwid. Ω* 720
Spulenstrom mA* 16,7
Leistungsaufn. mW 200
Betriebssp. V/DC max. 24
2 x UK - 200 mW empfindliches Miniatur-Relais, 1500 V FCC Überspannungsfestigkeit. Hohe Empfindlichkeit - 200 mW Betriebsleistung. Hohe Durchbruchspannung 1500 V FCC zwischen den geöffneten Kontakten. Gehäuse passend für 16-poligen IC-Sockel. Versiegeltes Gehäuse.
Technische Daten: Übergangswiderstand (bei Spannungsabfall 6 V/DC 1 A): 50 mΩ · Kontaktmaterial: Vergoldetes Silber · Grenzwerte: Schaltleistung (ohmsche Last) max. 60 W, 62,5 VA · max. Schaltspannung 220 V/DC, 250 V/AC, max. Schaltstrom 2 A , max. Carrying-Strom 3 A · UL/CSA Grenzwerte: 1 A 30 V/DC, 0,3 A 110 V/DC, 0,3 A 125 V/AC · Lebensdauer: Mechanisch 1 x 108, elektrisch (1 A 30 V/DC) 5 x 105, (2 A 30 V/DC) 1 x 105 · Isolationswiderstand min. 1000 MΩ (bei 500 V/DC) · Durchbruchspannung: offene Kontakte 750 Vrms, zwischen den Kontaktsätzen 1000 Vrms, zwischen Kontakten und Spule 1000 Vrms · FCC Überspannungsfestigkeit zwischen den geöffneten Kontakten 1500 V · Umgebungstemperatur -40 bis +70 ºC.
*±10%
-
Die Wahl des Relais hängt doch vom Einsatz ab. Über den hast Du noch nicht viel geschrieben. Welche Spannung, wieviel Strom sollen denn geschaltet werden?
Wenn es Netzspannung (230V~) ist, kannst Du besser ein Solid-State-Relais vervenden. Das ist erstens optisch getrennt und zweitens schaltet es eben Netzwechselspannung.
Schaltungen zum Ansteuern von Lasten per PC-Schnittstelle (seriell und parallel) gibt es im Internet viele. Und auch hier im Forum ist schon mehrmals darüber diskutiert worden.
Für das Verständnis der Vorgänge sind aber ein paar Grundkenntnisse in Elektronik sehr hilfreich. Das hilft Zeit und Geld sparen, kannst Du mir ungeprüft glauben.
Blackbird