Forum: Mikrocontroller und Digitale Elektronik Relais über seriellen Schnittstelle steuern


von Luca B. (lucabert)


Angehängte Dateien:

Lesenswert?

Hallo, Leute!

Erstmal wünsche ich euch ein schönes 2010!

Und dann, meine erste Frage dieses Jahr... :)

Also, ich möchte ein Gerät ein- und ausschalten von einem Programm.
Das weil ich zuerst ein Programm auf dem Laptop starten muß, und erst 
danach den µC.

Ich habe folgendes Projekt gefunden:

   http://www.windmeadow.com/node/4?page=1

Und das sollte auch reichen, aber ich habe gesehen, daß beim einschalten 
des PCs das Status der PINs bei der seriellen Schnittstelle "unklar" 
ist.
Ganz einfach habe ich mit einem Oszilloskop gesehen, daß das Signal 
"wackelt" (also ein paar Mal zwischen 1 und 0 wechselt), bis ein 
gültiges Wert gegeben wird.
Wenn ich das oben genannte Projekt nutze, werde ich die Platine mehrmals 
ein- und ausschalten (in Millisekundenbereich!) wenn ich den Laptop 
einschalte.
Und das gefällt mir nicht.

Ein Freund hat mir gesagt, daß ein Kondensator die Lösung sein sollte.

Ich habe deswegen hier ein Schema gemacht, so wie ich verstanden habe.

Habe ich richtig verstanden (und kann das Ding funktionieren), oder bin 
ich noch betrunken vom Silvester?

Ich danke euch!
Luca Bertoncello

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Ich habe deswegen hier ein Schema gemacht, so wie ich verstanden habe.
Mach doch bitte ein Bild davon (als GIF oder PNG) und poste das...

von Luca B. (lucabert)


Angehängte Dateien:

Lesenswert?

Lothar Miller schrieb:
>> Ich habe deswegen hier ein Schema gemacht, so wie ich verstanden habe.
> Mach doch bitte ein Bild davon (als GIF oder PNG) und poste das...

OK, gemacht...
Aber da hier viele Eagle nutzen, dachte ich, das eine Eagle-Datei auch 
in Ordnung ist...

Aber egal! Hier das Schema als PNG.

Danke
Luca Bertoncello

von holger (Gast)


Lesenswert?

Im Zeitalter von PlugnPray kannste solche Sachen knicken.
Das ging mit DOS oder W98 vieleicht noch, aber mit modernen
Betriebssystemen geht das nicht mehr ohne Vorsichtsmaßnahmen
(uC mit Protokoll) an den Schnittstellen.

von Max V. (maxv)


Lesenswert?

Ich würde R2 zwischen D1 und C1 schalten (quasi 
"Einschaltstrombegrenzung") und parallel zu C1 ein Entladewiderstand.
Weil ansonsten muss sich der Kondensator über die Basis des Transistors 
entladen werden, glaube nicht dass das gewünscht ist.

von Luca B. (lucabert)


Lesenswert?

holger schrieb:
> Im Zeitalter von PlugnPray kannste solche Sachen knicken.
> Das ging mit DOS oder W98 vieleicht noch, aber mit modernen
> Betriebssystemen geht das nicht mehr ohne Vorsichtsmaßnahmen
> (uC mit Protokoll) an den Schnittstellen.

Warum sollte es nicht funktionieren?

Unter Linux (das Betriebssystem auf dem Laptop) kann ich problemlos die 
einzelnen PINs der seriellen Schnittstellen steuern.
Und Linux IST ein modernes Betriebssystem, oder? :)

Grüße
Luca Bertoncello

von Luca B. (lucabert)


Lesenswert?

Max V. schrieb:
> Ich würde R2 zwischen D1 und C1 schalten (quasi
> "Einschaltstrombegrenzung") und parallel zu C1 ein Entladewiderstand.
> Weil ansonsten muss sich der Kondensator über die Basis des Transistors
> entladen werden, glaube nicht dass das gewünscht ist.

Also, du meinst, R2 zwischen D1 und C1 schieben, richtig?
Kein Problem!

Und was meinst du mit Entladewiderstand parallel zu C1? Ein Widerstand 
zwischen D1 und GND? Was für ein Widerstand?

Danke
Luca Bertoncello

von win7 nutzer (Gast)


Lesenswert?

g holger. Geowned... Wie kann man in so einem Forum von 100% windoof 
ausgehen

von holger (Gast)


Lesenswert?

>Warum sollte es nicht funktionieren?

>Unter Linux (das Betriebssystem auf dem Laptop) kann ich problemlos die
>einzelnen PINs der seriellen Schnittstellen steuern.
>Und Linux IST ein modernes Betriebssystem, oder? :)

Ja, und das wackelt an dem Pin weil es etwas sucht.
Was willst du dagegen machen?

von Luca B. (lucabert)


Lesenswert?

holger schrieb:
>>Warum sollte es nicht funktionieren?
>
>>Unter Linux (das Betriebssystem auf dem Laptop) kann ich problemlos die
>>einzelnen PINs der seriellen Schnittstellen steuern.
>>Und Linux IST ein modernes Betriebssystem, oder? :)
>
> Ja, und das wackelt an dem Pin weil es etwas sucht.
> Was willst du dagegen machen?

Das Signal "wackelt" wenn ich den Rechner EINSCHALTE, viel bevor Linux 
(oder jedes anderes Betriebssystem) geladen wird.
Und das dauert weniger als eine Sekunde.

Nun Schluß mit dem OT. Das Programm auf dem Laptop ist meine Arbeit 
(schließlich bin ich ein Programmierer). Ich möchte nur eure Hilfe für 
die Schaltung.

Grüße
Luca Bertoncello

von Max V. (maxv)


Lesenswert?

Parallel zu C1 heißt, das eine Bein des Widerstandes kommt an das eine 
Kondensatorbein, das andere Bein des Widerstandes kommt an das andere 
Bein des Kondensators => also Parallel ;)

Größenordnung ~10K Ohm würd ich nehmen.

von holger (Gast)


Lesenswert?

>> Ja, und das wackelt an dem Pin weil es etwas sucht.
>> Was willst du dagegen machen?

>Das Signal "wackelt" wenn ich den Rechner EINSCHALTE, viel bevor Linux
>(oder jedes anderes Betriebssystem) geladen wird.
>Und das dauert weniger als eine Sekunde.

Dann wackelt halt dein BIOS mit Mausunterstützung an dem Pin rum.
Was auch immer? Es wird gewackelt;)

von Luca B. (lucabert)


Angehängte Dateien:

Lesenswert?

Max V. schrieb:
> Parallel zu C1 heißt, das eine Bein des Widerstandes kommt an das eine
> Kondensatorbein, das andere Bein des Widerstandes kommt an das andere
> Bein des Kondensators => also Parallel ;)

Ja, OK, ich weiß was parallel bedeutet... Die Frage war mehr "was ist 
einen Entladewiderstand?"... :)

> Größenordnung ~10K Ohm würd ich nehmen.

So wie in der neuen Version?

Danke
Luca Bertoncello

von Tobi W. (todward)


Lesenswert?

Naja ist nichts wares was du da vor hast.
holger hatte das schon richtig gesagt! Du musst dir einen µC schanppen 
(ein ATtiny) würde scon reichen und dann über die UART dem µC sagen, 
schalte das relais ein. Da du ja gesagt hast, das du ein Programmierer 
bist, sollte das ja eigentlich kein problem sein. Bei der Hardware 
umsetzung helfen ich/wir dir dann.

Eine andere einfachere Lösung wäre ein AND-Gatter. da die 
wahrscheinlichkeit das 2 Pin der Schnittstelle gleichzeitig high sind 
relativ klein ist, könntest du so ein schalten deines transistors/relais 
vermeiden. Du musst da einfach bei deinem programm einfach 2 statt einen 
pin auf high setzen.

Gruß
Tobi

von Luca B. (lucabert)


Lesenswert?

To W. schrieb:
> Naja ist nichts wares was du da vor hast.
> holger hatte das schon richtig gesagt! Du musst dir einen µC schanppen
> (ein ATtiny) würde scon reichen und dann über die UART dem µC sagen,
> schalte das relais ein. Da du ja gesagt hast, das du ein Programmierer
> bist, sollte das ja eigentlich kein problem sein. Bei der Hardware
> umsetzung helfen ich/wir dir dann.

Sicher! Aber, wenn eine einfache Lösung funktioniert, warum soll ich 
eine komplexe nehmen?
Mein Motto ist "K.I.S.S." (Keep It Simple and Stupid)... :)

Wenn ich dann später feststelle, daß es nicht funktioniert, kann ich 
gern eine neue Schaltung planen, mit einem µC...

Aber wo soll jetzt genau das Problem an der Schaltung sein?

> Eine andere einfachere Lösung wäre ein AND-Gatter. da die
> wahrscheinlichkeit das 2 Pin der Schnittstelle gleichzeitig high sind
> relativ klein ist, könntest du so ein schalten deines transistors/relais
> vermeiden. Du musst da einfach bei deinem programm einfach 2 statt einen
> pin auf high setzen.

Leider geht es nicht... Zwei freie PINs, die ich steuern kann, habe ich 
an der seriellen Schnittstelle nicht...
Und eine USB2Serial Schnittstelle zu kaufen, nur um zwei PIN zu nutzen 
ist etwas übertrieben, oder?

Grüße
Luca Bertoncello

von Max V. (maxv)


Lesenswert?

Ja genau so wie in der Version die du angehängt hast.
Wenn du die entsprechenden Teile da hast, bau es auf und probier es aus, 
passieren dürft nichts, nur die nachgeschaltete Schaltung, welche durch 
das Relais geschaltet wird würde ich noch nicht dranhängen :)

von oldmax (Gast)


Lesenswert?

Hi
An dieser Stelle bin ich etwas verwirrt. Wozu der Aufwand? Warum läßt du 
nicht ein Protokoll zu deinem Roboter senden, was ihn einschaltet? ich 
würde den µC schon sofort zuschalten und dabei in der Initialisierung 
die Leistung des Roboters abschalten. Erst wenn ein entsprechender 
Befehl per RS 232 kommt, werden die entsprechenden Leistungen 
freigegeben. Ist mindestens genau so sicher wenn nicht noch mehr wie die 
Zuschaltung per RTS-Signal vom USART. Nur wnn du diesen gezielt schalten 
kannst, macht es Sinn. Ich würde aber dem Controller ruhig die paar mA 
spendierren, die er benötigt, um sein Programm abzuarbeiten. Die 
Zuschaltung per Befehl ist auch sinnvoller, da vorher diverse Zustände 
des Roboters geprüft werden können. Auch ein Abschaltbefehl ist 
realisierbar. Z. B. Sende ein "O" für "On" und ein "o" für "off". 
Mögliche Antwort ist "ok", "F"(ehler) +"xxx" für Fehlernummer.
Gruß oldmax

von juppi (Gast)


Lesenswert?

Hallo
Beim Einschalten wird das Relais einige Zeit gesperrt,habe ich vor  20 
Jahren bei der Parallelen auch als einfachste Lösung gemacht.(mit 
Kindern)

Warum wollen hier immer die "Experten" eine Controllerlösung 
vorschlagen.
Um ein Relais zu schalten muß man nicht immer noch unerhebliche geistige 
Grütze in die Controller Programmierung stecken.
Der Anwender von Bitwackeln wird bei höherer Anforderung auch darauf 
kommen,die meisten wissen es doch!

Gruß

von Luca B. (lucabert)


Lesenswert?

juppi schrieb:

> Beim Einschalten wird das Relais einige Zeit gesperrt,habe ich vor  20
> Jahren bei der Parallelen auch als einfachste Lösung gemacht.(mit
> Kindern)

Schön zu wissen...

> Warum wollen hier immer die "Experten" eine Controllerlösung
> vorschlagen.

Wie gesagt: KISS...

> Um ein Relais zu schalten muß man nicht immer noch unerhebliche geistige
> Grütze in die Controller Programmierung stecken.
> Der Anwender von Bitwackeln wird bei höherer Anforderung auch darauf
> kommen,die meisten wissen es doch!

Also, du meinst, die Schaltung, wie ich es gemacht habe, sollte 
funktionieren?

Oder sind noch Korrekturen nötig?

Danke!
Luca Bertoncello

von juppi (Gast)


Lesenswert?

wie oft und wie schnell hintereinander soll das Relais geschaltet 
werden.
Hast du eine "Echte RS232" oder nur 0/5 V
Spannungsabfälle berücksichtigen.
Diode/R-Teiler Leuchtdiode/Basis /Emitter.
..auch bei abgeschalteten Relais ist die Basis-Emitter Strecke recht 
störanfällig.
B_E-Widerstand.

Ich mache die Ansteuerung etwas anders.

...auch einfach und doch primitiv.

Gruß

von Luca B. (lucabert)


Lesenswert?

juppi schrieb:
> wie oft und wie schnell hintereinander soll das Relais geschaltet
> werden.
> Hast du eine "Echte RS232" oder nur 0/5 V
> Spannungsabfälle berücksichtigen.
> Diode/R-Teiler Leuchtdiode/Basis /Emitter.
> ..auch bei abgeschalteten Relais ist die Basis-Emitter Strecke recht
> störanfällig.
> B_E-Widerstand.
>
> Ich mache die Ansteuerung etwas anders.
>
> ...auch einfach und doch primitiv.

Also, ich muß NICHT schnell das Relais schalten.
Das Relais wird benutzt um den Rest des Roboters ein- bzw. 
auszuschalten, also zwischen ein- und ausschalten sind im schlimmsten 
Fall mehreren Minuten.

Mich interessiert nur eine schnelle und einfache Lösung um dieses Relais 
steuern zu können.

Ob ich eine "echte RS232" habe oder nicht: ich spreche über die serielle 
Schnittstelle des Laptops. Also, ich nehme an, es ist "echt".
Folgende PINs sind schon für die Kommunikation mit dem Roboter belegt:

1       DCD     Frei
2       RX      Roboter
3       TX      Roboter
4       DTR     8
5       GND     Roboter
6       DSR     8
7       RTS     Frei
8       CTS     4 + 6
9       RI      Frei

Also, ich konnte die PINs 1, 7 und 9 nutzen. So wie ich aber gesehen 
habe, kann ich (mindestens einfach) nur die PIN7 vom Programm steuern, 
also nutze ich PIN7.

Ist nun meine Schaltung in Ordnung oder nicht? Gibt es andere Lösungen?

Ich habe schon probiert einen USB-PowerSwitch 
(http://www.obdev.at/products/vusb/powerswitch.html) zu basteln, aber 
das Ding will einfach nicht USB sprechen, obwohl alles richtig gebaut 
ist.
Ich habe auch versucht die Spannung des ATTiny zu reduzieren (laut Forum 
von obdev.at sollte es das Problem sein), hat aber nix gebracht.

Also, ich suche eine EINFACHE Lösung. Schließlich muß ich nur ein Relais 
schalten und mehr nicht.

Danke für eure Hilfe!
Luca Bertoncello

von Tobi W. (todward)


Lesenswert?

Was ist das denn für ein roboter?
Soll das eine art notaus werden?

Was spricht denn gegen einen µC? Ok, du willst eine einfache und 
zugleich sichere Lösung. Aber das geht ja nun mal nicht so einfach, da 
du ja das bitwackeln bei booten vermeiden willst bzw. filtern willst. Um 
das Relais beim booten zu sperren, brauchst du sicher mehr hardware als 
wenn du einen tiny nimmst und den mit in die bestehende Leitung 
reinhängst.

juppi schrieb:
> Um ein Relais zu schalten muß man nicht immer noch unerhebliche geistige
> Grütze in die Controller Programmierung stecken

Ne ist auch nicht nötig... in bascom sind nur wenige zeilen code....
(biite nicht steinigen dafür)

oldmax schrieb:
> Wozu der Aufwand? Warum läßt du
> nicht ein Protokoll zu deinem Roboter senden, was ihn einschaltet? ich
> würde den µC schon sofort zuschalten und dabei in der Initialisierung
> die Leistung des Roboters abschalten.
Das wäre auch ein möglichkeit...
Wie wäre es mit einer Ladungspumpe? Du müsstest dann pin7 nur mit einer 
bestimmten frequenz umschalten und hättst einen realtiv sicheren 
ausgang.

gruß
Tobi

von oldmax (Gast)


Lesenswert?

Hi
Was ich meinte, ist, das ein Roboter eigentlich selbst eine Steuerung 
hat. So wie es Maschinen haben. Der PC, Laptop oder was auch immer die 
übergeordnete Steuerung ausmacht, kann natürlich über einen eigenen 
Ausgang die Leistung eines Maschinenteiles / Roboters aus- oder 
einschalten. Das Angebot mit dem Relais war ja auch geeignet, aber RS 
232 ist in den neuesten PC's Legende. Die Möglichkeit USB Konverter 
einzusetzen mangels direktem Zugriff auf die einzelnen Signale nicht 
unbedingt geeignet. Daher der Vorschlag, über Einschaltcode 
nachzudenken. Was bitteschön ist da überflüssige geistige Grütze.... 
aber trotzdem dank für die Anerkennung zum Experten.
Ich seh ja auch, das die Fragestellung anders war, aber wenn's doch ein 
Fehler ist, in diese Richtung zu denken, ist ein Rat und Denkanstoß zur 
Horizonterweiterung doch keineswegs nur duseliges Fachgeschwafel. Was 
letztendlich von euch angewendet wird, ist mir ehrlich gesagt völlig 
Wurscht.
Gruß oldmax

von Luca B. (lucabert)


Lesenswert?

oldmax schrieb:

> Was ich meinte, ist, das ein Roboter eigentlich selbst eine Steuerung
> hat. So wie es Maschinen haben. Der PC, Laptop oder was auch immer die
> übergeordnete Steuerung ausmacht, kann natürlich über einen eigenen
> Ausgang die Leistung eines Maschinenteiles / Roboters aus- oder
> einschalten. Das Angebot mit dem Relais war ja auch geeignet, aber RS
> 232 ist in den neuesten PC's Legende. Die Möglichkeit USB Konverter
> einzusetzen mangels direktem Zugriff auf die einzelnen Signale nicht
> unbedingt geeignet. Daher der Vorschlag, über Einschaltcode
> nachzudenken. Was bitteschön ist da überflüssige geistige Grütze....
> aber trotzdem dank für die Anerkennung zum Experten.
> Ich seh ja auch, das die Fragestellung anders war, aber wenn's doch ein
> Fehler ist, in diese Richtung zu denken, ist ein Rat und Denkanstoß zur
> Horizonterweiterung doch keineswegs nur duseliges Fachgeschwafel. Was
> letztendlich von euch angewendet wird, ist mir ehrlich gesagt völlig
> Wurscht.

Hallo!

Also, die Steuerung des Roboter macht genau der Laptop (zusammen mit 
einer Platine RnbFra 1.2), und deswegen wäre es für mich wichtig, vom 
Laptop (via Software) die Platine ein- und auszuschalten.

Daß serielle und parallele Schnittstelle auf modernen Laptops nicht 
dabei sind, weiß ich schon, aber mein Laptop ist nicht so neu, und hat 
sie.
Daher kann ich sie nutzen, denkst du nicht?

Grüße
Luca Bertoncello

von Tobi W. (todward)


Lesenswert?

dann machste einfach in die initalisierung ne while-wend schleife und 
wartest so lange bis eine variable "on" oder so enthällt. Hatte oldmax 
ja schon beschrieben.

dann passier an der platine solange nix,bis halt der befehl gekommen 
ist.
Gruß
Tobi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.