Schaltungskonzeption - Reedrelais/ retriggerbarer Monoflop
Moderator: Guido Körber
Schaltungskonzeption - Reedrelais/ retriggerbarer Monoflop
Hallo, ich benötige etwas Hilfe bei der Konzeption einer Schaltung
Konzeption:
Schaltung mit 2 (evtl. 3) Reed-Relais (gesteuert über IO-Wariior).
Es erfolgt alle 100ms eine getrennte Abfrage, ob zwei bestimmte Konditionen noch erfüllt sind.
Ist dies der Fall, geben die beiden Programme ein positives Signal an den IO-Warrior weiter.
Dadurch werden sollen zwei voneinander getrennt angesteuerte Reed-Relais (Schliesser) geschlossen werden (diese liegen hintereinander).
Ziel ist, die Relais durchgehend geschlossen zu halten, solange die Konditionen stimmen. Dadurch wird ein Stromkreis geschlossen (1A, 5V
evtl. 9V).
Fragen:
1. Frage ist wie folgt:
Alle 100 ms erfolgt ja eine entsprechende softwareseitige Abfrage des Zustandes, im Positvfall wir ein Signal an das Reed-Relais weitergegeben. Ich möchte nun, dass das Reedrelais ab diesem Zeitpunkt für 600 ms geschlossen bleibt, sich danach öffnet. Sollte innerhalb dieser 600 ms wieder ein Positivsignal eingehen, sollen die 600 ms von vorne beginnen.
--
Im Prinzip also ein per retriggerbarem Monoflop geschaltetes Relais, dass dafür sorgt dass der Stromkreis geschlossen bleibt (wenn ich das aus der Schule noch richtig in Erinnerung habe). Oder evtl. eine andere Realisierung.
Hier wäre ich dankbar für Hilfe beim Schaltungsaufbau
2. Frage:
Reicht die Stromversorgung des USB-Buses aus um 2 oder 3 ReedRelais zu steuern?
Vielen Dank, jeder Tip bringt mich weiter.
Konzeption:
Schaltung mit 2 (evtl. 3) Reed-Relais (gesteuert über IO-Wariior).
Es erfolgt alle 100ms eine getrennte Abfrage, ob zwei bestimmte Konditionen noch erfüllt sind.
Ist dies der Fall, geben die beiden Programme ein positives Signal an den IO-Warrior weiter.
Dadurch werden sollen zwei voneinander getrennt angesteuerte Reed-Relais (Schliesser) geschlossen werden (diese liegen hintereinander).
Ziel ist, die Relais durchgehend geschlossen zu halten, solange die Konditionen stimmen. Dadurch wird ein Stromkreis geschlossen (1A, 5V
evtl. 9V).
Fragen:
1. Frage ist wie folgt:
Alle 100 ms erfolgt ja eine entsprechende softwareseitige Abfrage des Zustandes, im Positvfall wir ein Signal an das Reed-Relais weitergegeben. Ich möchte nun, dass das Reedrelais ab diesem Zeitpunkt für 600 ms geschlossen bleibt, sich danach öffnet. Sollte innerhalb dieser 600 ms wieder ein Positivsignal eingehen, sollen die 600 ms von vorne beginnen.
--
Im Prinzip also ein per retriggerbarem Monoflop geschaltetes Relais, dass dafür sorgt dass der Stromkreis geschlossen bleibt (wenn ich das aus der Schule noch richtig in Erinnerung habe). Oder evtl. eine andere Realisierung.
Hier wäre ich dankbar für Hilfe beim Schaltungsaufbau
2. Frage:
Reicht die Stromversorgung des USB-Buses aus um 2 oder 3 ReedRelais zu steuern?
Vielen Dank, jeder Tip bringt mich weiter.
-
- Site Admin
- Posts: 2879
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Also ob der USB genug Saft für die Relais hat hängt von den Relais ab. Aber ich denke bei zwei relativ kleinen Reed Relais ist es nicht mal notwendig auf 500mA zu gehen.
Was das Zeitverhalten angeht, so würde ich das in Software machen statt dafür Hardware zu verbraten. Einfach einen Timer programmieren, der nach 600ms die Relais wieder abschaltet.
Was das Zeitverhalten angeht, so würde ich das in Software machen statt dafür Hardware zu verbraten. Einfach einen Timer programmieren, der nach 600ms die Relais wieder abschaltet.
Danke.
Damit wäre die zweite Frage ja schon mal geklärt (ich ging auch davon aus, dass USB für 2 Reedrelais ausreicht).
Zur ersten Frage:
Ich glaube es ging aus meiner Formulierung nicht genau hervor, was ich möchte:
Ein Programm prüft im 100 ms - Rhytmus, ob eine bestimmte Eigenschaft erfüllt wird. Ist dies der Fall, gibt es über den USB zum IOWarrior das entsprechende Signal.
Da ja alle 100 ms ein Signal nicht ausreicht, um durchgehend das Reedrelais (als Schliesser) geschlossen zu halten, benötige ich ein Zwischenglied (also einen Timer bzw. Monoflop), welches bei jedem Signal für 600ms das Reedrelais schliesst (die 600ms starten jedesmal von neuem, sobald ein entsprechendes Signal ankommt).
Somit ist das Reedrelais eigentlich durchgehend geschlossen (solange die entsprechende Bedingung erfüllt ist). Ist die Bedingung nicht mehr erfüllt, öffnet sich der Schaltkreis nach 600 ms.
Da zum einen Win XP nicht echtzeitfähig, zum anderen die CPU-Auslastung bei etwa 90 - 95% liegen wird, möchte ich dies auch nicht softwareseitig realisieren.
Durch die hardwareseitige Realisierung macht es auch nichts, wenn das entsprechende Signal über den USB-Bus etwas später kommt.
Statt eines Schliessers einen Wechsler oder Öffner zu verbauen, ist leider auch nicht möglich, aufgrund verschiedener Faktoren.
Damit wäre die zweite Frage ja schon mal geklärt (ich ging auch davon aus, dass USB für 2 Reedrelais ausreicht).
Zur ersten Frage:
Ich glaube es ging aus meiner Formulierung nicht genau hervor, was ich möchte:
Ein Programm prüft im 100 ms - Rhytmus, ob eine bestimmte Eigenschaft erfüllt wird. Ist dies der Fall, gibt es über den USB zum IOWarrior das entsprechende Signal.
Da ja alle 100 ms ein Signal nicht ausreicht, um durchgehend das Reedrelais (als Schliesser) geschlossen zu halten, benötige ich ein Zwischenglied (also einen Timer bzw. Monoflop), welches bei jedem Signal für 600ms das Reedrelais schliesst (die 600ms starten jedesmal von neuem, sobald ein entsprechendes Signal ankommt).
Somit ist das Reedrelais eigentlich durchgehend geschlossen (solange die entsprechende Bedingung erfüllt ist). Ist die Bedingung nicht mehr erfüllt, öffnet sich der Schaltkreis nach 600 ms.
Da zum einen Win XP nicht echtzeitfähig, zum anderen die CPU-Auslastung bei etwa 90 - 95% liegen wird, möchte ich dies auch nicht softwareseitig realisieren.
Durch die hardwareseitige Realisierung macht es auch nichts, wenn das entsprechende Signal über den USB-Bus etwas später kommt.
Statt eines Schliessers einen Wechsler oder Öffner zu verbauen, ist leider auch nicht möglich, aufgrund verschiedener Faktoren.
-
- Site Admin
- Posts: 2879
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Also wenn der IO-Warrior den Zustand seiner Ausgänge nicht hält, dann liegt ein schwerwiegender Hardwarefehler vor. Der Pin bleibt also so lange auf Low bis man was anderes reinschreibt.
Und etwa 600ms kriegt selbst Windows hin, auch bei 90% Prozessorlast. Dünn wird es bei Windows wenn man unter 10ms will und dann auch noch konsistente Latenzzeiten erwartet. Da ist dann der Zeitpunkt für ein Betriebssystem gekommen.
Und etwa 600ms kriegt selbst Windows hin, auch bei 90% Prozessorlast. Dünn wird es bei Windows wenn man unter 10ms will und dann auch noch konsistente Latenzzeiten erwartet. Da ist dann der Zeitpunkt für ein Betriebssystem gekommen.
Danke, ich glaube bei mir lag hier ein Denkfehler vor:
Ich ging davon aus, dass der IOWarrior - wenn denn die Bedingung erfüllt ist (was ja nur alle 100 ms geprüft wird) - einmal kurz den entsprechenden Pin von low auf high setzt für einen entsprechend kurzen Zeitraum (paar ms) und dann wieder auf low zurückgeht.
Aber wenn ich dies jetzt richtig verstanden habe, kann der IOWarrior bei eintreten der Bedingung für einen vorher einstellbaren Zeitraum den Pin von low auf high setzen. Ist dies richtig?
Ich ging davon aus, dass der IOWarrior - wenn denn die Bedingung erfüllt ist (was ja nur alle 100 ms geprüft wird) - einmal kurz den entsprechenden Pin von low auf high setzt für einen entsprechend kurzen Zeitraum (paar ms) und dann wieder auf low zurückgeht.
Aber wenn ich dies jetzt richtig verstanden habe, kann der IOWarrior bei eintreten der Bedingung für einen vorher einstellbaren Zeitraum den Pin von low auf high setzen. Ist dies richtig?
-
- Site Admin
- Posts: 2879
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Was für eine Bedingung?
Und warum sollte der IO-Warrior einen Pin nur für eine bestimmte Zeit setzen?
Die Pins der IO-Warrior geben nur den Einganszustand zum Computer zurück und halten ansonsten den Ausgangszustand, den man zuletzt reingeschrieben hat. Es sei denn man verwendet Special Mode Functions, die dann einige Pins übernehmen.
Aber es ist z.B. nicht möglich irgend welchen Code in den IO-Warrior zu laden der dann SPS spielt oder sowas.
Und warum sollte der IO-Warrior einen Pin nur für eine bestimmte Zeit setzen?
Die Pins der IO-Warrior geben nur den Einganszustand zum Computer zurück und halten ansonsten den Ausgangszustand, den man zuletzt reingeschrieben hat. Es sei denn man verwendet Special Mode Functions, die dann einige Pins übernehmen.
Aber es ist z.B. nicht möglich irgend welchen Code in den IO-Warrior zu laden der dann SPS spielt oder sowas.
Bedingung bedeutet hier für mich das (positive Ergebnis), welches ein Programm im 100ms-Rhytmus testet. Dieses positve Ergebnis ist ja Vorraussetzung dafür, dass das Relais (Schliesser) geschlossen wird und bleibt.Was für eine Bedingung?
War wie gesagt ein Denkfehler von mir.Und warum sollte der IO-Warrior einen Pin nur für eine bestimmte Zeit setzen?
Wenn ich nun möchte, dass der zuletzt geschriebene Zustand für einen bestimmten Zeiraum bleibt (600 ms), übernimmt dies dann der Warrior-Chip (per internem Timer) oder muss dann nach 600 ms von mir/ Programm/ außerhalb der Befehl zu Pinänderung kommen? Dies ist für mich deshalb wichtig, damit ich das Worst Case Szenario abschätzen kann (Rechnerabsturz).
Last edited by chnsky on Fri Sep 14, 2007 5:32 pm, edited 1 time in total.
- Christoph Jung
- Posts: 673
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Der Zustand IM IOWarrior bleibt solange erhalten, bis entweder eine externe Änderung vorgenommen wird (also man selbst oder das Programm den Zustand ändert) oder man ihm den Strom abstellt (also Stecker zieht). Falls der Rechner mal abschmiert bleibt der Wert unverändert.
Ich glaube der IOWarrior hat keine Internen Timer,den man ansprechen könnte. Das MUSS alles über ein Programm erfolgen. Also muss im Programm ein Timer laufen der die Werte schriebt und/oder liest. Da führt kein Weg rum herum.
Ich glaube der IOWarrior hat keine Internen Timer,den man ansprechen könnte. Das MUSS alles über ein Programm erfolgen. Also muss im Programm ein Timer laufen der die Werte schriebt und/oder liest. Da führt kein Weg rum herum.
Software developer
Jetzt noch eine Frage zur Arbeitsweise:
Es steht geschrieben (im Datenblatt)...:
Wenn ich den Rechner hochfahre, findet ja ein kurzer USB-Test statt- bei dem der IOWarior sich auch zu erkennen gibt - und alle Pins werden dann als Ausgang geschaltet (aber es erfolgt keine Signalabgabe).
Konkret in meiner Situation (ich möchte ja ein Reedrelais als Schliesser betreiben), bedeutet dies, dass der Schaltkreis (das Relais) noch NICHT geschlossen wird?
Es steht geschrieben (im Datenblatt)...:
Interpretiere ich dies richtig:IO-Warrior will pull all its pins to a high state on
reset and it does so also when entering suspend
mode
Wenn ich den Rechner hochfahre, findet ja ein kurzer USB-Test statt- bei dem der IOWarior sich auch zu erkennen gibt - und alle Pins werden dann als Ausgang geschaltet (aber es erfolgt keine Signalabgabe).
Konkret in meiner Situation (ich möchte ja ein Reedrelais als Schliesser betreiben), bedeutet dies, dass der Schaltkreis (das Relais) noch NICHT geschlossen wird?
-
- Site Admin
- Posts: 2879
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Der Ruhezustand der IO-Warrior Pins ist, dass ein interner Widerstand jeden Pin auf High zieht.
Es gibt keine Unterscheidung zwischen Eingang und Ausgang beim IO-Warrior. Jeder Pin ist immer Eingang, meldet also immer den Status an diesem Pin zurück. Setzt man einen Pin auf 0 dann schaltet man damit einen Open Drain Treiber ein, der diesen Pin gegen Masse zieht.
Wer also mit einem High-Pegel seine externe Hardware einschaltet macht einen (Denk-)Fehler.
Es gibt keine Unterscheidung zwischen Eingang und Ausgang beim IO-Warrior. Jeder Pin ist immer Eingang, meldet also immer den Status an diesem Pin zurück. Setzt man einen Pin auf 0 dann schaltet man damit einen Open Drain Treiber ein, der diesen Pin gegen Masse zieht.
Wer also mit einem High-Pegel seine externe Hardware einschaltet macht einen (Denk-)Fehler.
... oder man hängt einen Inverter hinter den Ausgang, der hat dann nach Anlegen derGuido Körber wrote:Der Ruhezustand der IO-Warrior Pins ist, dass ein interner Widerstand jeden Pin auf High zieht.
Es gibt keine Unterscheidung zwischen Eingang und Ausgang beim IO-Warrior. Jeder Pin ist immer Eingang, meldet also immer den Status an diesem Pin zurück. Setzt man einen Pin auf 0 dann schaltet man damit einen Open Drain Treiber ein, der diesen Pin gegen Masse zieht.
Wer also mit einem High-Pegel seine externe Hardware einschaltet macht einen (Denk-)Fehler.
Spannung den Ausgang auf 0V und kann mit dem Programm den Ausgang auf 1 legen.
Bei den Anforderungen von chnsky (600ms nach Absturz soll das Relais abfallen)
würde ich eine HW-Lösung vorschlagen. Für den ne555 gibt es ganz nette
Monoflop-Beschaltungen. Den ne555 kann dann zwischen iowarrior und
Ausgangstreiber die 600 ms garantieren. Dann sollte aber auch das Programm
regelmäßig (mind. alle 600ms) einen Triggerimpuls senden (Watchdog!)
bye
Johnny