Spannung der seriellen Schnittstelle steuern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
tyho
User
Beiträge: 31
Registriert: Samstag 18. März 2006, 13:47

Hallo,
Ich hab das hier schonmal gepostet, allerdings in einem Thread der damit nicht wirklich was zu tun hatte, deshalb der neue hier.

Und zwar will ich an die serielle Schnittstelle einen Lüfter anschließen. Dazu muss ich die Spannung steuern können. Ich habe PySerial installiert, habe da aber nichts zu dem Thema gefunden (was an meinen Englischkenntnissen liegen könnte :) )
Geht das?
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

An der seriellen Schnittstelle kann man die Spannung nicht steuern; ich weiß nicht wer Dich auf so eine Idee gebracht haben könnte...

EDIT: vielleicht sollte ich das etwas ausführlicher schreiben, sonst ist es mißverständlich. Natürlich kann man mit einem entsprechend ausgelegten Interface an der seriellen Schnittstelle die Spannung steuern, zum Beispiel gibts Netzteile die sich mittels der seriellen Schnittstelle konfigurieren lassen. Das RS232-Protokoll, welches aus dem Interface rauskommt, sieht aber nur 5V als Spannung vor. Sprich: keine Chance das was anderes ohne Einsatz von Zusatzkomponenten hinzubekommen.
--- Heiko.
tyho
User
Beiträge: 31
Registriert: Samstag 18. März 2006, 13:47

hm gut dann muss ich mal schauen, ich brauch eigentlich eh nur an/aus d.h. das müsste reichen.
Gibt es irgendwo ein deutsches Tutorial zu PySerial? Ich find in der offziellen englischen Hilfe nämlich nichts, was mir weiterhelfen könnte :oops:
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Du kannst auf einer seriellen Leitung auch nicht an/aus steuern; eine serielle Leitung überträgt Binärsignale als gepulste Daten. Du hast keinen kontinuerlichen Zustand: "Spannung an" oder "Spannung aus," sondern einen Datenstrom der serialisiert in Form von einzelnen Bits (lang/kurz an) übertragen wird, je nach seriellem Standard auch anders.

Dieser kontinuierliche Zustand ließe sich zwar mittels umsteigen auf die parallele Schnittstelle erreichen, aber unabhängig davon kannst Du einen Lüfter sowieso nicht direkt an irgendeiner irgendwie gearteten passiven Schnittstelle (was sowohl die parallele als auch die serielle sind) betreiben. Der Lüfter zieht ziemlich viel Strom, was die Schaltkreise die in Deinem Rechner sitzen im Normalfall massiv überlasten dürfte, und sie (zusammen mit dem Mainboard?) in Rauch aufgehen lässt. Im Normalfall sind sie für eine Stromaufnahme von ca. 10-50mA gebaut, was ein normaler Lüfter im Anfahrstrom um das 10x übersteigt.

Die USB-Schnittstelle sollte sowas leisten können (soweit ich weiß gibts die Maßgabe dass USB mindestens 500mA pro Port selbst leisten kann, denn schließlich können Endgeräte Strom vom USB-Anschluss ziehen), aber bei USB hast Du das selbe Problem wie beim seriellen Port, dass Du nämlich ein serielles Signal, und keinen kontinuierlichen Zustand hast.
--- Heiko.
tyho
User
Beiträge: 31
Registriert: Samstag 18. März 2006, 13:47

ok vielen dank für die schnelle antwort
dann muss ich mir was anderes überlegen.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Einen kleinen externen UART (parallel <-> seriell Wandler) anbauen, mit dem Du über die serielle Schnittstelle sprechen kannst, der wiederum einen Triac (oder auch nur einfach einen Transistor, so hoch ist die Leistung die hier fließen muß bestimmt nicht) ansteuert, der dann die Spannung eines Lüfters regelt? Oder noch einfacher: einen Transistor über einen (Meldesignal-)Ausgangspin der parallelen Schnittstelle ansteuern, und als Verstärker-/Regelkreis für den Strom für den Lüfter nutzen?

Wenn Du keine Ahnung von E-Technik hast kann ich nur empfehlen mal durch den Katalog von Conrad zu blättern, Bausätze für sowas gabs vor fünf Jahren für um die zehn Mark. Teurer geworden ist das ganze wohl kaum...
--- Heiko.
Benutzeravatar
windows97
User
Beiträge: 24
Registriert: Freitag 10. März 2006, 13:34

Ach hier ein herzliches Hallo!

Also falls überhaupt Interesse besteht, deinen Schalter über die parallele Schnittstelle zu steuern, möchte ich an dieser Stelle kurz auf Pollin Electronic verweisen. Unter der Bestellnummer 710 722 findest du da den passenden Bausatz. Der Downloadbereich bietet dir eine Bauanleitung, wo auch auf den Einbau der Bauteile eingegangen wird.
Schaus dir mal an, falls das Ganze noch interessant für dich ist.
Vielleicht nebenbei noch nen kleiner Tipp: Schau dir auch mal das allseits bekannte www.wikipedia.de an, da sind die ganzen Schnittstellen auch recht verständlich beschrieben.

Gruß Daniel
Gräten auf dem Sofakissen wird man wohl entfernen müssen.
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

modelnine hat geschrieben:Du kannst auf einer seriellen Leitung auch nicht an/aus steuern; eine serielle Leitung überträgt Binärsignale als gepulste Daten. Du hast keinen kontinuerlichen Zustand: "Spannung an" oder "Spannung aus," sondern einen Datenstrom der serialisiert in Form von einzelnen Bits (lang/kurz an) übertragen wird, je nach seriellem Standard auch anders.
Doch er kann an/aus machen, mit genau 2 aderpärchen.

Er kann die folgenden leitungen nutzen:

Code: Alles auswählen

DTR(4) --> DSR(6)
RTS(7) --> CTS(8)
Sowas habe ich nämlich vor garnicht langer zeit mal geschrieben.
Man muss 4 aktiv schalten, und kann wenn es ein stromkreis zu 6 gibt,
bei 6 dann abfragen ob spannung (signal) anliegt.

Das ganze sind afaik 5 V.

Und dafür reichen die win32 extensions, braucht man garkein pyserial oder sonstwas
tyho
User
Beiträge: 31
Registriert: Samstag 18. März 2006, 13:47

modelnine hat geschrieben:Einen kleinen externen UART (parallel <-> seriell Wandler) anbauen, mit dem Du über die serielle Schnittstelle sprechen kannst, der wiederum einen Triac (oder auch nur einfach einen Transistor, so hoch ist die Leistung die hier fließen muß bestimmt nicht) ansteuert, der dann die Spannung eines Lüfters regelt? Oder noch einfacher: einen Transistor über einen (Meldesignal-)Ausgangspin der parallelen Schnittstelle ansteuern, und als Verstärker-/Regelkreis für den Strom für den Lüfter nutzen?

Wenn Du keine Ahnung von E-Technik hast kann ich nur empfehlen mal durch den Katalog von Conrad zu blättern, Bausätze für sowas gabs vor fünf Jahren für um die zehn Mark. Teurer geworden ist das ganze wohl kaum...
Doch doch ich versteh schon wie das geht genau das haben wir grad im Physik-Unterricht. Ich glaube, ich probiere erst den Vorschlag von Mad-Marty aus und wenn das nicht funzt, mach ichs mit einem Transistor!
Benutzeravatar
windows97
User
Beiträge: 24
Registriert: Freitag 10. März 2006, 13:34

Das ganze sind afaik 5 V.
Gegen Masse kann die Spannung aber auch höher liegen.
Die RS-232 Schnittstelle wirft ja bis zu U=12V bei HIGH-Pegel raus.
Sollte man auf jeden Fall vorher mal durchmessen, bevor es PUFF macht und es so unangenehm riecht. :wink:
Ich glaube, ich probiere erst den Vorschlag von Mad-Marty aus und wenn das nicht funzt, mach ichs mit einem Transistor!
Ähm, ich denke, du wirst um nen Treiber (oder auch Transistor) nicht herumkommen, denn du kannst die PC-Schnittstelle nur mit ein paar mA belasten. Denke du brauchst auf jeden Fall ne Entkopplung der Last zum PC, die du über eine Transe realisierst.
Vielleicht mal die Frage: "Was willst du damit denn ansteuern?"
Gräten auf dem Sofakissen wird man wohl entfernen müssen.
tyho
User
Beiträge: 31
Registriert: Samstag 18. März 2006, 13:47

Vielleicht mal die Frage: "Was willst du damit denn ansteuern?"
einen Lüfter für den Keller
Muss über einen PC geschaltet werden, da der zur Entfeuchtung des Kellers gedacht ist. Ich lass Wetterdaten aus dem Inet abrufen und das Script soll dann entscheiden, ob Lüfter an oder aus!
Ähm, ich denke, du wirst um nen Treiber (oder auch Transistor) nicht herumkommen, denn du kannst die PC-Schnittstelle nur mit ein paar mA belasten.
Gut also auf jeden Fall mit Trainsistor. Trotzdem immer mit dem einfachereren (so siehts jedenfalls für mich aus), also mit dem von Mad-Marty anfangen, wenn das nicht klappt versuchs ich mit modelnines Vorschlag.

Vielen Dank für die vielen Antworten!

EDIT:
Noch eine Frage, was ist jetzt besser, seriell oder parallel?
Benutzeravatar
windows97
User
Beiträge: 24
Registriert: Freitag 10. März 2006, 13:34

Hey, ich wollte dich nicht zum Konsum anstacheln. Aber oft ist das die beste Möglichkeit, ohne sich etwaige Hardware zu zerschiessen... Mir natürlich noch nie passiert. :roll:

Mit welcher Spannung betreibst du denn den Lüfter? Falls U = 12V, dann zieh dir doch von nen Laufwerksstecker aus dem Rechner nach draussen und nimm das als Versorgungsspannung... Vielleicht sicherheitshalber noch ne Feinsicherung einbauen. Und beachte die Widerstandsbeschaltung des Transistors.

Viel Spaß jetzt schonmal beim Basteln! :wink:
Gräten auf dem Sofakissen wird man wohl entfernen müssen.
Benutzeravatar
windows97
User
Beiträge: 24
Registriert: Freitag 10. März 2006, 13:34

EDIT:
Noch eine Frage, was ist jetzt besser, seriell oder parallel?
Oi, hab ich jetzt nicht mehr mitbekommen.

Also die Realisierung über die Serielle (ohne pyserial) ist aufjeden Fall verdammt fuchsig! Ich würds auch so machen! Mit der Parallelen kannste natürlich ein paar Lüfter mehr steuern, was dann aber wahrscheinlich über ist... :wink:

Machs mit der seriellen Variante! Aber schau dir vielleicht mal an, welche Spannung da vom PC ausgespuckt wird, bevor... PUFF!
Gräten auf dem Sofakissen wird man wohl entfernen müssen.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Doch er kann an/aus machen, mit genau 2 aderpärchen. ...
Stimmt, an die Statusleitungen der seriellen Schnittstelle hab ich gar nicht gedacht; ich hab sie bisher für sowas noch nicht mißbraucht, immer nur bei der parallelen. ;-)
--- Heiko.
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Hi mal ein beispiel wie das geht.

es testet die statusleitungen durch, der status der "empfänger" wird natürlich nur 1, wenn ein kabel dazwischen ist ....

Code: Alles auswählen

import win32file

MS_CTS_ON  = 16
MS_DSR_ON  = 32
MS_RING_ON = 64
MS_RLSD_ON = 128

def getCTS(comhandle):
    return MS_CTS_ON & win32file.GetCommModemStatus(comhandle) != 0

def getDSR(comhandle):
    return MS_DSR_ON & win32file.GetCommModemStatus(comhandle) != 0

def setRTS(comhandle, level=1):
    if level:
        #rtsState = win32file.RTS_CONTROL_ENABLE
        win32file.EscapeCommFunction(comhandle, win32file.SETRTS)
    else:
        win32file.EscapeCommFunction(comhandle, win32file.CLRRTS)

	    
def setDTR(comhandle,level=1):
    if level:
        win32file.EscapeCommFunction(comhandle, win32file.SETDTR)
    else:
        win32file.EscapeCommFunction(comhandle, win32file.CLRDTR)

		
def flush(comhandle):
    win32file.PurgeComm(comhandle, win32file.PURGE_RXCLEAR | win32file.PURGE_RXABORT)
    win32file.PurgeComm(comhandle, win32file.PURGE_TXCLEAR | win32file.PURGE_TXABORT)

if __name__ == '__main__':
    # OUT:IN : RTS:CTS   7-8
    # OUT:IN : DTR:DSR   4-6

    
    com1 = win32file.CreateFile(u'COM1:' , win32file.GENERIC_READ, \
                                0, None, win32file.OPEN_EXISTING, 0, None)
    flush(com1)

    print "Testing DTR(4) to DSR(6)"
    print "=" * 80
    print "DSR (6) is %s" %getDSR(com1)
    print "Setting DTR to 1" ; setDTR(com1)
    print "DSR (6) is %s" %getDSR(com1)
    print "Setting DTR to 0" ; setDTR(com1, 0)
    print "DSR (6) is %s" %getDSR(com1)
    print "Setting DTR to 1" ; setDTR(com1)
    print "DSR (6) is %s" %getDSR(com1)
    print "\n\n"

    print "Testing RTS(7) to CTS(8)"
    print "=" * 80
    print "CTS (8) is %s" %getCTS(com1)
    print "Now Setting RTS to 1" ; setRTS(com1)
    print "CTS is %s" %getCTS(com1)
    print "Now Setting RTS to 0" ; setRTS(com1, 0)
    print "CTS is %s" %getCTS(com1)
    print "Now Setting RTS to 1" ; setRTS(com1)
    print "CTS is %s" %getCTS(com1)



    print "Commstate : ", win32file.GetCommModemStatus(com1)

    win32file.CloseHandle(com1)
    #raw_input('Enter to continue')
tyho
User
Beiträge: 31
Registriert: Samstag 18. März 2006, 13:47

windows97 hat geschrieben:Machs mit der seriellen Variante! Aber schau dir vielleicht mal an, welche Spannung da vom PC ausgespuckt wird, bevor... PUFF!
Jaja ich will schließlich nicht den Server von meinem Vater schrotten :roll:
Viel Spaß jetzt schonmal beim Basteln!
Den werd ich haben! :)
tyho
User
Beiträge: 31
Registriert: Samstag 18. März 2006, 13:47

@ mad-marty:
ich hab da ein kleines problem und zwar gibts kein Modul namesn win32file, wird wohl daran liegen dass ich unter Linux arbeite :roll:
Was kann ich da machen?
tyho
User
Beiträge: 31
Registriert: Samstag 18. März 2006, 13:47

So ich habe jetzt ein weiteres Problem :roll:
Und zwar soll das Script ja auf einem Debian-Linux laufen, d.h. es gibt keine Win32Extensions! Weiß jemand wie das unter Debian geht? Könnte mir jemand als Beispiel nen Code geben, der der "an macht"? Ich glaub sonst bekomm ichs nicht hin :cry:
Das muss ich mal loswerden:
Wenn ihr euch mal wundert, was ich für dämliche Fragen stelle:
Ich bin ein Python-Newbie!
tyho
User
Beiträge: 31
Registriert: Samstag 18. März 2006, 13:47

so, wen das interessiert, wei man das unter linux macht hier nen link dazu:
http://www.linux-magazin.de/Artikel/aus ... riell.html
und es tut :P
Das muss ich mal loswerden:
Wenn ihr euch mal wundert, was ich für dämliche Fragen stelle:
Ich bin ein Python-Newbie!
Benutzeravatar
windows97
User
Beiträge: 24
Registriert: Freitag 10. März 2006, 13:34

so, wen das interessiert, wei man das unter linux macht hier nen link dazu:
http://www.linux-magazin.de/Artikel/aus ... riell.html
und es tut
Hey, das ist gut zu wissen, hab mir auch schon son paar Dinge durch den Kopf gehen lassen, wofür ich das gebrauchen könnte... - Kaffeemaschine etc :wink:
Du hast dann jetzt aber auch die C-Source vom LinuxMagazin genommen, gell?

Gruß Daniel
Gräten auf dem Sofakissen wird man wohl entfernen müssen.
Antworten