Steuerung eines Gerätes über die seriele Schnittstelle
-
Und was hat mir das ganze jetzt gebracht, ich bin jetzt genauso schlau wie vorher.
Ich müsste jetzt wissen wie ich etwas mit dem serielen Port anstellen kann, initialiesirungen bringen mich nicht weiter.
-
Das von Blackbird war doch kein Code zur Initialisierung, sondern zeigt, wie du ein Pin setzen und wieder löschen kannst (also, wie du dort das Potential verändern kannst) - sollte doch eigentlich genau das sein, was du haben wolltest.
Vor einiger Zeit gab es doch mal einen schön ausgearbeiteten Thread über Motoransteuereungen mit Schaltplan, etc. - scheint aber irgendwie verschwunden zu sein (oder ich bin nur zu blöd ihn zu finden
)
-
Wie soll man mit der Funktion EscapeCommFunction() bitte einen Motor steuern???
Ich habe bei Elektronk auch nicht den vollen Durchblick,(ich entwickel nur die Software, den Rest baut jemmand anders). Bin also de facto zu blöd das mit dem Potential zu kapieren.Es wäre wirklich net wenn jemmand mir das nochmal erklären würden. Wie kann ich mehrere Pins setzen, wie kriege ich raus welches Pin das am Ausgang ist (Verkabelung), und was meint ihr mit Potenzial veränderung (Vielleicht kenne ichs unter einem anderem Namen?)

Danke im Voraus
-
flammenvogel schrieb:
Wie soll man mit der Funktion EscapeCommFunction() bitte einen Motor steuern???
Das hat Blackbird doch oben geschrieben?
flammenvogel schrieb:
[...]und was meint ihr mit Potenzial veränderung (Vielleicht kenne ichs unter einem anderem Namen?)

Das bedeutet, dass du die Spannung am Pin änderst, also z.B. von 0V auf 12V.
Du solltest allerdings beachten, dass die serielle Schnittstelle AFAIK mit -12V und +12V arbeitet. Ich weiß nicht, wie du den Motor ansteuern willst, aber der Schalter sollte auf die negative Spannung vorbereitet sein.
-
Du kannst eben (wenn ich das bisher in den Diskussionen richtig verstanden hatte) entweder die Steuerleitungen (DTR, RTS)verwenden, die du mit einer speziellen Funktionen setzen kannst (EscapeCommFunction), oder du verwendest die Datenleitung(en?), die du mit WriteFile bearbeiten kannst

Hoffe, das stimmt auch - hab damit nämlich noch nie was gemacht

-
Na bravo, also muss ich dem Kram ausprobieren und nachmessen. Es kennt nicht jemmand noch zufällig ein Schaubild mit der Pinbelegung der serielen Schnitstelle ???
-
-
Das ist schon nicht schlecht, aber wie oben schon beschrieben brauche ich ein Schaubild, wo ich sehen kann welches Pin was ist. Auf der Seite sind nur Nummern für die Position, ich brauche am besten wirklich ein Bild.
-
hi,
machs ueber die parallele, is viel einfacher. dafuer gibts auch genug matral wenn man mal googled.
ich selbst bin auch durch google sehr weit gekommen und steuer meine eisenbahn mit dem pc (progs (server + client) und interface natuerlich selbst gebaut).so schwer is das nicht wenn man sich etwas mit beschaeftigt. vielleicht solltet ihr erstmal klaeren was der motor alles machen soll und wieviel steuerleitungen ihr braut. vielleicht braucht ihr noch informationen die vom motor zuruueck an den pc gehen sollen. dann solltet ihr euch mal ne idee machen wie das programm mit der elektronic kommuniziert, soll heissen, nich das einer das interface baut und danach wird versucht die software dazu anzupassen oder umgekehrt.
gruss
msp
-
Je mehr ich darüber nachdenke ist es vielleicht wirklich sinnvolller das über die Parrallele Schnittstelle zu machen. Ich bin absoluter Anfänger in solchen sachen.
Kann jemmand mal ein paar Sachen zur parralenen Schnitstelle posten.
Der Motor soll sich jeweils in beide Richtungen (links und rechts), und in 3-4 verschiedenen Geschwindigkeitstufen bewegen können.
-
@flammenvogel:
Nagut, noch mal von vorn:Von 3-4 Geschwindigkeitsstufen und vorwärts/rückwärts war in Deinem Eingangspost nicht die Rede. Und Deine Frage bezog sich auf die Verwendung einer Lib oder nicht Lib - nicht auf die Hardware.
@msp:
Ob Parallel oder Seriell ist hier egal. In jedem Fall muß von einem "rein digital" arbeitenen Ausgang (+12V --> -12V bei seriell oder 0V --> +5V bei parallel) auf einen quasi analogen Ausgang umgesetzt werden.
Die Leistungsverstärkung für den Motor betrachte ich als gelöst, so habe ich den Eingangspost von @flammenvogel verstanden.Die serielle wie auch die parallele Schnittstelle bieten diegitale Ausgänge und digitale Eingänge, die man per Software setzen und abfragen kann.
Serial: 3 Ausgänge 4 Eingänge
Parallel: 11 Ausgänge 5 Eingänge (bei EPP auch 13 Eingänge, weil bidirektional)
Die serielle Schnittstelle kann zusätzlich noch eine Anzahl Bits (5 bis
seriell ausgeben und auch empfangen. Die parallele nicht.Seriell hat den Vorzug der Kurzschlußsicherheit und der Überlastungsfestigkeit, die Parallele nicht (Basteln auf eigene Gefahr!)
Eine Geschwindigkeitsregelung wird IMMER stufig erfolgen müssen. Bei 8 Bit sind es 256 Stufen bei 2 Bit sind es 4 Stufen. Eine "quasi analoge" Spannung erhält man mit gewichteten Widerständen oder einem R-2R-Netzwerk.
Für die Vor/Rück-Steuerung ist dann ein weiteres Bit nötig. Seriell würde also reichen.@flammenvogel, Literatur und Schaltungen gibt es reichlich im Netz, sicher jedoch nicht passend für Deine Aufgabenstellung.
Entweder du modifizierst eine Schaltung oder entwickelst eine eigene. Wenn dann noch Fragen sind - ich beantworte sie gerne.Blackbird
-
@Blackbird
Das mit der Steuerung leuchtet mir ein. Wenn die Elektronik-Leute das mit dem Umsetzen von Bits hinkriegen, um sowas wie Stufensteuerung zu machen, habe ich keine Einwände.Wie kann ich das jetzt aber Programieren?
(Beispiel Code wäre nicht schlecht) oder Link zu weiterführender Literatur. Ich habe selber schon bei Google geguckgt. Allerdings wähle ich meistens die Suchwörter so ******** das da nichts bei rauskommt.
-
Ohne Hardware, oder die Kenntnis, wo Du was anschließen willst, kannst Du (noch) nichts programmieren.
Ein allgemeines Programmbeispiel ("Code-Schnipsel"), das die Ansteuerung eines Pins der seriellen Schnittstelle illustriert, habe ich schon gepostet. Parallel-Ausgabe erfolgt mit dem Interfacenamen "LPT1" statt "COM1" und mit WriteFile (...) statt EscapeCommFunction (...). Das gilt für W32-Systeme, für 16-Bit-Systeme kannst Du mit oup(), inp() (oder outport() und inport() ) arbeiten.
Suche einfach in der Hilfe zu Deiner IDE nach den aufgeführten Funktionen und Du bekommst (fast) immer eine Code-Beispiel.Wie und wo Du dann diesen Code verwendest, hängt ganz von Deinem Programm ab. Ist es eine GUI, ein Consolen-Prog, willst Du mit Threads arbeiten, soll's dauernd im Hintergrund laufen, steuerst Du den Motor über Tasten, Mouse, Joystick an, ...?
Blackbird
-
Tja das Problem ist das ich selber noch nicht weiß wo ich was anschließen will.
Die Fähigkeiten die das Ding haben soll habe ich ja schon gepostet.
Ich benutze Dev-Cpp, das Ding hat keine eigene Referenz zu C++ (IMHO). Ich werde woll einen Kanal zur steurung vorwärts rückwärts. Einen weiteren wenn für an/aus und noch einen für den Speed (ich weiß nicht wie ich das realiesieren soll, elektrotechnisch).
Wegen der Hardware, wenn die seriele Schnittstelle einen Überspannungsschutz hat werde ich wohl die seriele nehmen. Solange die Anzahl der Leitungen das hergibt.
Ist der Kram sonst vom Motherboard abhängig, das Prog soll auf mehreren PCs laufen.Der Motor wird wohl keine Signale zurück zum PC senden.
Wäre trozdem für etwas Beispiel Code dankbar, am besten eine Funktion die den Motor anschaltet und den Kanal für vorwärts anschaltet. Speed Steuerung kann vorerst vernachlässigt werden. Die Pin belegung ist mir vorerst egal, so wie es euch grade in den Kram passt. <- Bin froh wenn ich überhaupt was kriege an Code.
-
flammenvogel schrieb:
Ich benutze Dev-Cpp, das Ding hat keine eigene Referenz zu C++ (IMHO).
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

flammenvogel schrieb:
Wegen der Hardware, wenn die seriele Schnittstelle einen Überspannungsschutz hat werde ich wohl die seriele nehmen.
AFAIK hat die Schnittstelle keinen Überspannungsschutz, sondern einen Schutz vor Kurzschluss.
Außerdem liefert die serielle Schnittstelle -12V/+12V, keine 0V/5V-Logik-Level. Je nachdem, was du da dranhängst, musst du evtl. eine Pegelanpassung vornehmen. Negative Spannungen mögen nicht viele ICs.
-
@cd9000:
ein Überspannungschutz ist vorhanden, jedoch nicht 240V
Die Spezifikation sieht +-30V (min. +-25V) an den Eingängen vor. Ob sich auch die Mainboardhersteller daran halten - keine Ahnung. Darauf verlassen sollte man sich nie, da hast Du schon recht.@flammenvogel:Für Dich nach Deinen (unvollständigen und widersprüchlichen) Angaben eine Schaltung nebst Programm zu entwickeln geht weit über das Anliegen des Forums hinaus. Und ich habe auch nicht die Zeit, das zu machen. Und die die Lust dazu ist auch auf ein Minimum abgesunken, da Du selber keinerlei Leistung dabei einbringst.
Hier noch ein paar Hilfen, mit denen Du weiterkommst:
Da Du keine Angaben über den Motor gemacht hast, nehme ich einfach einen an: 12V, 10mA. Dieser Motor wird mit einem Widerstand (1kOhm) in Reihe an Pin 4 und an Pin 7 einer 9pol. Sub-D-Buchse angelötet und diese in den 9pol. Sub-D-Stecker Deines PC gesteckt.
Mit folgendem Programm läuft der Motor 1s rechtsrum, stoppt für eine Sekunde und läuft anschließend 1s linksrum. Dann stoppt er wieder.#include <windows.h> int main (void) { HANDLE hCom = CreateFile ("COM1", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); EscapeCommFunction(hCom, CLRDTR); // Rücksetzen DTR EscapeCommFunction(hCom, CLRRTS); // Rücksetzen RTS Sleep (1000); EscapeCommFunction(hCom, SETDTR); // Setzen DTR (Pin 4 bei 9pol., Pin 20 bei 25pol.) Sleep (1000); EscapeCommFunction(hCom, SETRTS); // Setzen RTS (Pin 7 bei 9pol., Pin 4 bei 25pol.) Sleep (1000); EscapeCommFunction(hCom, CLRDTR); // Rücksetzen DTR Sleep (1000); EscapeCommFunction(hCom, CLRRTS); // Rücksetzen RTS Sleep (100); CloseHandle (hCom); return (0); }Ist Dein Motor etwas niederohmiger, so kannst Du eine je eine Transistorbrücke zwischen Motor und Pin(s) schalten oder gleich einen fertigen IC (z.B. L293) verwenden. Alternativ kannst Du auch von jedem Pin ein Relais schalten lassen (http://www.c-plusplus.net/forum/viewtopic.php?t=76199&highlight=), deren (je ein) Umschalter den Motor an eine zusätzliche Spannungsquelle schalten(Öffnerkontakte zusammen schalten und an +Batt, Schließerkontakte zusammenschalten und an -Batt, Mittenkontakte direkt an den Motor).
Die Software ist für alle Varianten gleich.
Masseanschluß am Seriellen Port ist 5 bei 9pol. und 7 bei 25pol. Steckern/Buchsen.Mit den angegebenen Keywords solltest Du in der Lage sein, mit Google alles Nötige zu finden.
Blackbird
-
Danke Blackbird, genau das habe ich noch gebraucht
VIELEN DANK FÜR EURE MÜHE!!!!
-
Hi,
hab irgentwo mal gehört, dass man einen Treiber unter WindowsXP schreiben muss, damit ich die COM/Serielle-Schnittstelle bearbeiten/programmieren kann.
Hatte mal solch ein PRogramm und hatte es auch unter Windows XP/98 ausprobiert. Unter WindowsXP hat es nicht funktioniert und unter 98 schon.
Hab jedoch gleiche Methode verwendet!
Kann sich das einer erklähren ?
Ciao