Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi TSerial (https://www.delphipraxis.net/2565-tserial.html)

MatthiasW 29. Jan 2003 18:11


TSerial
 
Hallo,

ich möchte mit der ToolBox - Kompo an meine Serielle Schnittstelle zwei LED's betreiben. Die eine soll blinken wenn ein Befehl abgearbeitet wird und die andere soll anzeigen ob der Rechner On/ Offline ist. Ich hatte gedacht ob ich dazu das TSerPort verwenden könnte, da ich jede PIN einzeln ansprechen möchte. Aber irgendwie funktioniert das net, es passiert überhaupt nix keine LED keuchtet nichts.

Ich verwende folgenden Code:

SerPort1.Out_RTS := true;
SerPort1.Active :=True;

Weiß jemand wieso das net get?

Mfg Matthias

Daniel B 29. Jan 2003 18:19

Hi,

ich benutze eine andere Komponente, daher kann cih zu Deiner nicht viel sagen, aber was Du vor hast, kann nicht gehen.
An der Seriellen gibt es nur zwei Leitungen, eine fürs Senden und eine fürs Empfangen. Dann noch die Handshake Leitungen, die Du jetzt mal nicht brauchst. Dabei werden die Daten hintereinander gesendet. Wenn Du egal was für Daten auf die Schnittstelle ausgeben würdest, dann würde Deine LED dauern leuchten, wenn es nicht gerade ein Befehl ist der in einer ms schon wieder weg ist, dann wirst Du warscheinlich das "kurze" aufblitzen der LED nicht mehr wahrnehmen.
Was Du brauchst ist die Parallele Schnittstelle, die hat 8 "einzelne" Leitungen die Du dann einzeln auch ansprechen kannst und somit irgend welche LEDs zum leuchten bringen kannst oder auch nicht.
Wenn Du wissen möchtest ob Dein Rechner an ist, dann häng Dir doch eine LED direkt ans Netzteil ;) Oder Du arbeitest mit der parallelen Schnittstelle.

Grüsse, Daniel :hi:

MatthiasW 29. Jan 2003 18:53

TSeriel
 
Hallo,

gut das würde einiges erklären. Aber es gibt doch für Unix das CPanel und da geht das mit dem COM1 doch auch, deswegen verstehe ich das ganze net.
Beim CPanel fürs Unix kann man damit zwei LED's ansteuern und mit 4 Tasten den Rechner steuern. Sowas wollt ich eben für mein Windows 2000 auch machen.

Na gut, vielleicht sollte ich das mal mit der parallelen Schnittstelle versuchen.

Mfg Matthias

Hansa 29. Jan 2003 19:11

Re: TSeriel
 
Zitat:

Zitat von MatthiasW
...Na gut, vielleicht sollte ich das mal mit der parallelen Schnittstelle versuchen.

Laß das lieber gleich bleiben. Genau für das, was Du vorhast ist die serielle nämlich gedacht :!: Vor allem, um Geräte anzusteuern, die mit dem PC nichts zu tun haben, z.B. LED. Habe mir mal gerade ein externes Modem geschnappt, da gibt es LEDs für : RTS,CTS,LINE,RXD,TXD usw. Mit denen läuft das genau so, wie das auch bei Deinen eigenen LEDs laufen müßte. Von der Parallel-Schnittstelle eine Rückmeldung zu bekommen, da muß man ganz schön ackern, um sowas hinzubekommen. Im Prinzip ist die unidirektional. Ich tippe auf den handshake, was nichts anderes bedeutet, wie : "Stopp, hör auf zu senden, ich komme nicht mehr nach" und später dann "Mach weiter, ich habs gepackt". :mrgreen:

Gruß
Hansa

MatthiasW 29. Jan 2003 19:25

Zitat:

laß das lieber gleich bleiben. Genau für das, was Du vorhast ist die serielle nämlich gedacht Vor allem, um Geräte anzusteuern, die mit dem PC nichts zu tun haben, z.B. LED. Habe mir mal gerade ein externes Modem geschnappt, da gibt es LEDs für : RTS,CTS,LINE,RXD,TXD usw. Mit denen läuft das genau so, wie das auch bei Deinen eigenen LEDs laufen müßte. Von der Parallel-Schnittstelle eine Rückmeldung zu bekommen, da muß man ganz schön ackern, um sowas hinzubekommen. Im Prinzip ist die unidirektional. Ich tippe auf den handshake, was nichts anderes bedeutet, wie : "Stopp, hör auf zu senden, ich komme nicht mehr nach" und später dann "Mach weiter, ich habs gepackt".
Aber wieso kann ich dann nicht die PIN's einzeln ansprechen? :wall: :?

Mfg Matthias

Hansa 29. Jan 2003 19:32

Natürlich kannst Du das, aber es hakt halt irgendwo. Nur Wo ? Geh doch einfach mit dem Holzhammer hin, mache eine Endlosschleife und schicke daten ohne Ende. Irgendwann muß das Teil doch leuchten. Dazu mußt Du natürlich den richtigen Draht finden. Wahrscheinlich ist Dein Signal nur zu kurz.

Gruß
Hansa

Daniel B 29. Jan 2003 19:33

Re: TSeriel
 
Zitat:

Zitat von Hansa
da gibt es LEDs für : RTS,CTS,LINE,RXD,TXD usw.

Und die hängen direkt an der seriellen Anschlussbuchse?
Zitat:

Mit denen läuft das genau so, wie das auch bei Deinen eigenen LEDs laufen müßte.
Wenn man Daten langsam genug drüber lässt.
Man kann natürlich an die Sendeleitung eine LED dran machen, und schick mal eine Datei zur seriellen, da wird die LED schon leuchten, aber ob das gewollt ist?
Ein einfach Ein- und Ausschalten der LED erreicht man am einfachsten mit der parallelen, dafür gibt es zig-Delphi Projekte, die nichts anderes machen als an der parallelen Port zu setzen und wieder zu löschen.
Achja, entkoppeln wäre auch nicht schlecht, und vergleiche mal die Daten die rausgehen, mit denen die wieder rein kommen. Würde mich mal interessieren ob die gleich sind.

Das mit den zwei LEDs und vier Tastern, erklär mir mal bitte wie Du das mit der seriellen machen willst! Ohne extra Hardware!!
Mit der parallelen kein Thema. Wie das unter UNIX ist weiss ich nicht, glaube aber nicht das die serielle da anders aussieht.

Grüsse, Daniel :hi:

Hansa 29. Jan 2003 19:42

Zitat:

Und die hängen direkt an der seriellen Anschlussbuchse?
Nicht direkt, aber indirekt, eventuell sind sie tatsächlich nur durchgeschleift. :mrgreen: Ich mußte mal einen Schrittmotor ansteuern, vor und wieder zurück. LEDs sind da eher noch einfacher zu handeln. Wo sind denn die überhaupt angeschlossen, also an welcher Leitung ?

Gruß
Hansa

MatthiasW 29. Jan 2003 19:45

Nee, funktioniert nicht: Wenn ich die TSerPort - Kompo nehme und den Holzhammer auspacke und die Schnittstelle 50 mal in der Sekunden mit Daten bombardiere leuchtet nix. Ich habe im Test die RTS Leutung verwendet.

Wenn ich TSeriel verwende und nen Text über die Schnittstelle schicke dann
leuchtet die LED die ich an PIN 3 und 5 habe sowie die an 4 und 5 aber auch an 5 und 7. Es kommt also auf allen eine Spannung an. Was mache ich nur verkehrt? :? :wall: :x

Mfg Matthias

Daniel B 29. Jan 2003 19:54

Ich beahupte das da ein schöner Controller dazwischen hängt. Sonst würdest Du niemals ein Blinken wahrnehmen, sondern alles LEDs würden leuchten und sonst nichts.
Du kennst ja die zwei Monitore unten rechts im Tray, die Blinken beim Senden und Empfangen, das ist nichts anderes.
Die einzigste möglichkeit die ich sehe, um eine LED an der seriellen zum leuchten zu bringen, ist sie TxD und Masse, mit einem Vorwiderstand, und dabei ständig die serielle zu füttern, ständiges Daten raus schreiben. Und zwar nicht gerade wenig. Schreib in einer Endlosschleife irgend ein Ascii-Zeichen raus. Und zwar schnell. Dann würde sie auch nur dauerleuchten.
Aber das halte ich für nciht gerade sinnvoll.
Anders ist es bei der parallelen.
Da hat man 8 Port, die als Ein- oder Ausgänge benutzt werden können.
Da könnte man auch mit LEDs und Tastern arbeiten.
Man muss nur alles schön entkoppeln, wenn man sich das Motherboard nicht kaputt machen will!
Da kann man einzelne Ports einfach Ein.- und weider Ausschalten. Ich denke sowas hat Er gesucht.
An der seriellen gibts das TxD fürs Senden, das RxD fürs Empfangen und CTS und RTS fürs Handshake. Das man aber Hardware-Technisch setzen muss. Man kann per Software nur das Handshake Einschalten! Und überprfüen ob es gerade gesetzt ist. Aber nicht selbst setzen. Das regelt der IC der seriellen.
Man könnte das ganze natürlich wieter treiben.
Man besorge sich einen PIC. Ein einfachen 16F84, lernt etwas ASM, der 16F83 hat nur 32 Befehle.
Da könnte man ein Programm schreiben, das Daten von der seriellen auswertet und entsprchend die Ports des PICs setzt. Aber das würde jetzt etwas zuweit gehen.
Wie gesagt, ich schlage immernoch die parallele vor.
Ist die einfachste Möglichkeit. Nur das Entkoppeln sollte man nicht auslassen und vorsichtig sein mit dem was man anschliesst, denn der Port liefern nur sehr wenig Strom!

Grüsse, Daniel :hi: //<-- dem jetzt langsam die Tinte in der Tastatur ausgeht :evil:

Daniel B 29. Jan 2003 20:01

Code:
Pin Ein/Ausgang Bezeichnung
1     Ausgang 4   DCD Data Carrier Detect
2         nc     nc
3     Ausgang 3   TxD Transmit Data
4     Ausgang 1   DTR Data Terminal Ready
5       Masse    GND Ground
6     Eingang 2   DSR Data Set Ready
7     Ausgang 2   RTS Request To Send
8     Eingang 1   CTS Clear To Send
9     Eingang 3   RI Ring Indicator
Grüsse, Daniel :hi:

Daniel B 29. Jan 2003 20:03

Zitat:

Zitat von MatthiasW
Nee, funktioniert nicht
Wenn ich TSeriel verwende und nen Text über die Schnittstelle schicke dann
leuchtet die LED die ich an PIN 3 und 5 habe sowie die an 4 und 5 aber auch an 5 und 7. Es kommt also auf allen eine Spannung an. Was mache ich nur verkehrt?

Du siehst den HandShake der gesetzt ist und fertig. Somit hast Du ein 5V-Pegel, also High! Somit ist das ein dauerleuchten. Was hast Du denn für ein Vorwiderstand?
Schalte doch mal in Deiner Komponente das Handshake aus. Oder mach Dir zwei Buttons zum Ein- und Ausschalten des HS.

Grüsse, Daniel :hi:

Hansa 29. Jan 2003 20:09

ACHTUNG !

Nur kurz : glaube Du brauchst 4 und 5 und das über Kreuz !! 1:1 geht das sowieso nicht.

Gruß
Hansa

MatthiasW 29. Jan 2003 20:21

Zitat:

Du siehst den HandShake der gesetzt ist und fertig. Somit hast Du ein 5V-Pegel, also High! Somit ist das ein dauerleuchten. Was hast Du denn für ein Vorwiderstand?
Schalte doch mal in Deiner Komponente das Handshake aus. Oder mach Dir zwei Buttons zum Ein- und Ausschalten des HS.
Wenn ich ganz normal Text über die Serielle Schnittstelle schicke und die Baudrate auf 110 reduziere dann tut meine LED die ich an PIN 3 und 5 habe flackern, da ja das Signal an PIN 3 unterschiedlich hoch ist. Wenn ich noch eine LED an PIN 4 oder 7 hänge und Daten über die Schnittstelle jage, dann tun die ebenfalls blicnkern. Die Handshakes sind auf false gesetzt.

Ich habe an jeder LED einen 2,2 K Widerstand hängen.

Daniel B 29. Jan 2003 20:25

Zitat:

Zitat von MatthiasW
Wenn ich ganz normal Text über die Serielle Schnittstelle schicke und die Baudrate auf 110 reduziere dann tut meine LED die ich an PIN 3 und 5 habe flackern, da ja das Signal an PIN 3 unterschiedlich hoch ist.

Ja, das so auch oki, weil die Baudrate so langsam ist, da kann man ja die Daten selbst anschieben. ;)
Btw: Das Signal ist nciht unterschiedlich hoch, sondern mal Low und mal High, es geht hier um TTL-Signale. 5V oder 0V, dazwischen gibt es nichts.
Zitat:

Ich habe an jeder LED einen 2,2 K Widerstand hängen.
Das ist ein bisschen viel aber oki. Sind aber nicht so richtig hell, stimmts?!?

Grüsse, Daniel :hi:

MatthiasW 29. Jan 2003 20:40

Zitat:

Das ist ein bisschen viel aber oki. Sind aber nicht so richtig hell, stimmts?!?
Es reicht. Ich habe auf der Site http://www.roboter-elektronik.de/seriell.htm

eine Bauanleitung für die Serielle schnittstelle gefunden. Das was dort steht scheint aber so net zu stimmen?! :x

Kann ich denn mit der parallelen auch ereignisse abfangen wenn ich z.B. ne Taste angeschlossen habe und die der Benutzer gedrückt hat?

Und wo finde ich für Delphi da in paar Anleitungen, weil mit VB sowas zu machen ist Sch.... da das immer die AktiveX KOmpos brauch und die registriert werden müssen. :mrgreen:

Mfg Matthias

Brüggendiek 29. Jan 2003 20:46

Hallo!

Zitat:

Zitat von Daniel B
Code:
Pin Ein/Ausgang Bezeichnung
1     Ausgang 4   DCD Data Carrier Detect
2         nc     nc
3     Ausgang 3   TxD Transmit Data
4     Ausgang 1   DTR Data Terminal Ready
5       Masse    GND Ground
6     Eingang 2   DSR Data Set Ready
7     Ausgang 2   RTS Request To Send
8     Eingang 1   CTS Clear To Send
9     Eingang 3   RI Ring Indicator

Soweit - so richtig (hmmpf - ist DCD nicht ein Eingang - das Modem erkennt den Träger?)

Nur: Serielle Schnittstellen arbeiten NICHT mit 5V! Da sind entweder +15V oder -15V (negativ gegen Masse) dran (naja, beim PC vielleicht auch nur 12V). LEDs mögen übrigens keine dauernden Verpolungen, also nicht nur den passenden Widerstand, sondern auch eine Diode davorschalten!

Theoretisch ist es möglich, die statischen Ausgänge per Programm zu setzen und die statischen Eingänge zu lesen (also alles außer TxD und RxD, das sind die Daten im Takt und verändern sich). Damit kann man dann 2 LEDs und 3 Tasten anschließen. Dazu muß der Schnittstellenbaustein direkt angesprochen werden, mit den Assembler-Befehlen IN und OUT.

Kleines Problem: Das geht nur unter MD-DOS Version 7 mit Windows Version 4 (auch bekannt als Win95, Win98 und Win ME; oder eben ältere DOS-Versionen) - unter NT (also NT, 2000, XP) sind diese Assembler-Befehle privilegiert und deshalb nur für Treiber zugelassen. Treiber kann man mit Delphi nicht schreiben.
Achja - bei einer seriellen Schnittstelle an USB wird das bestimmt nicht leichter - wo ist da der Port für die Schnittstelle? Sollte ggf. der Treiber bereitstellen.

Irgendwo soll es etwas geben, mit dem man angeblich auch unter NT die seriellen und parallelen Ports ansprechen kann.

Gruß

Dietmar Brüggendiek

Daniel B 29. Jan 2003 20:47

Zitat:

Zitat von MatthiasW
Kann ich denn mit der parallelen auch ereignisse abfangen wenn ich z.B. ne Taste angeschlossen habe und die der Benutzer gedrückt hat?

Ja, das geht schon. Such mal bei Torry nach Komponenten um die parallele anzusprechen. Es gibt dort genug. Probiere ein paar aus. Die funktioniere alle recht unterschiedlich. Jedenfalls ich der Programmierung.
Da kannst Du die Port als Ein- oder Ausgänge nutzen. Und dadurch auch den aktuellen Zustand der jeweiligen Ports abfragen, dadurch auch einen Taster erkennen. Und dann meintwegen eine LED einschalten.
Zitat:

Und wo finde ich für Delphi da in paar Anleitungen, weil mit VB sowas zu machen ist Sch....
Such mit dem besten Freund des Menschen, Google!
Es gibt so viele Projekte. Such mal mit Delphi, parallele, LED u.ä..
Du findest sehr schnell was.
Manche sind mit Komponenten und manche in Assembler Code, wo man keine Komponenten braucht.

Grüsse, Daniel :hi:

Daniel B 29. Jan 2003 20:53

Zitat:

Zitat von Brüggendiek
Soweit - so richtig (hmmpf - ist DCD nicht ein Eingang - das Modem erkennt den Träger?)

Stimmt, entschuldigt, Pin 1(DCD) ist Eingang 4!!
Zitat:

Nur: Serielle Schnittstellen arbeiten NICHT mit 5V! Da sind entweder +15V oder -15V (negativ gegen Masse) dran (naja, beim PC vielleicht auch nur 12V).
Stimmt auch wieder.
Code:
Signalpegel Datenleitung Steuer- und Meldeleitungen
1/H        -3...-15V   +3...+15V
0/L        +3...+15V   -3...-15V
Zitat:

LEDs mögen übrigens keine dauernden Verpolungen, also nicht nur den passenden Widerstand, sondern auch eine Diode davorschalten!
Auch wieder wahr.

Grüsse, Daniel :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz