Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TSerial - RS232 ansprechen (https://www.delphipraxis.net/115140-tserial-rs232-ansprechen.html)

hadschi92 4. Jun 2009 17:12

Re: TSerial - RS232 ansprechen
 
Ok, es funktioniert jetzt einigermaßen. Schließe ich eine LED zwischen Pin 3 (Sendedaten) und Pin 5 (Ground) so leuchtet die LED wenn ich meine Funktion anschalte und wenn ich sie wieder deaktiviere, dann leuchtet die LED nicht mehr. Schließe ich die LED jedoch verkehrt herum an, dann leuchtet sie immer, auch wenn kein Signal gegeben werden sollte.

Ich werde noch irgendwann ausprobieren, ob man verschiedene Signale geben kann, denn bei einem 0-Bit wird anscheinend eine positive Spannung abgegeben und bei einem 1-Bit eine negative Spannung. Vielleicht wird das aber auch von Stopbits und anderen Bits die mitgesendet werden überdeckt.

Klaus01 4. Jun 2009 17:46

Re: TSerial - RS232 ansprechen
 
Zitat:

Zitat von hadschi92
Ok, es funktioniert jetzt einigermaßen. Schließe ich eine LED zwischen Pin 3 (Sendedaten) und Pin 5 (Ground) so leuchtet die LED wenn ich meine Funktion anschalte und wenn ich sie wieder deaktiviere, dann leuchtet die LED nicht mehr. Schließe ich die LED jedoch verkehrt herum an, dann leuchtet sie immer, auch wenn kein Signal gegeben werden sollte.

.. das mag daran liegen, dass die Logische Eins auf -12V liegt und die
logische Null auf +12V.

Du solltest aber vorsichtig damit sein, Verbraucher direkt an die Schnittstelle anszuschließen.
Du solltest zumindest eine galvanische Trennung haben - das ist in manchen Fälllen für den PC
überlebenswichtig.

Grüße
Klaus

hadschi92 4. Jun 2009 18:10

Re: TSerial - RS232 ansprechen
 
Wann kann dies gefährlich werden, wenn Kurzschlüsse entstehen, oder wenn zu viel Spannung auf den PC kommt? Würde ein MOSFET oder ein Transistor dazu ausreichen? Diese schalten ja nur wenn negative Spannung richtig anliegt, so sollte man dann auch richtig Ströme schalten können.

Was ich jedoch schade finde, ist dass man nur eine Leitung schalten kann. Ich werde mich mal auf Conrad umsehen, ob ich nicht irgendeine Platine mit USB Interface finde, die mehr kann. Vielleicht kennt jemand von euch auch eine gute.

Cyf 4. Jun 2009 19:09

Re: TSerial - RS232 ansprechen
 
Zitat:

Zitat von hadschi92
Wann kann dies gefährlich werden, wenn Kurzschlüsse entstehen, oder wenn zu viel Spannung auf den PC kommt? Würde ein MOSFET oder ein Transistor dazu ausreichen? Diese schalten ja nur wenn negative Spannung richtig anliegt, so sollte man dann auch richtig Ströme schalten können.

Was ich jedoch schade finde, ist dass man nur eine Leitung schalten kann. Ich werde mich mal auf Conrad umsehen, ob ich nicht irgendeine Platine mit USB Interface finde, die mehr kann. Vielleicht kennt jemand von euch auch eine gute.

Die Sache ist ja hier, dass du nur einen Pin "schalten" kannst, weil du mit der seriellen Schnittstelle arbeitest und der Rest nunmal Steuersignale sind, die durch das Protokoll vorgegeben sind. Wenn du die Steuerpins manuell schalten würdest, oder die parallele Schnittstelle (IEEE 1284) nutzen, könntest du mehr Pins als IO-Pins missbrauchen, allerdings geht das unter Windows NT nur noch im Kernelmode und bedarf entweder eines Treibers, der Anfragen durchreicht oder die entsprechenden DMA-Bereiche im für Usermode-Programme freigibt.
Probleme könnten hier eher entstehen, wenn zu große Ströme direkt an den Schnittstellen hängen. Eine galvanische Trennung wäre als spontane Idee wohl mit Optokopplern zu erreichen, aber bis jetzt hab ich eigentlich (am LPT) auch MOSFET benutzt.

Lee500 20. Okt 2009 15:28

Re: TSerial - RS232 ansprechen
 
Hallihallo,

Ich habe auch vor mit einem Mikrocontroller zu komunizieren. Im HyperTerminal funktioniert das bereits. Das läuft in etwa so:
Ich sende ein beliebiges Zeichen und der Controller antwortet mit 8 Bytes. Wie gesagt im HT läuft es wunderbar, aber mein Programm will noch nicht so richtig.

Folgenden Code nutze ich: (abgeändert vom Beispielcode weiter vorn)
Delphi-Quellcode:
procedure TForm1.readcomClick(Sender: TObject);
var c: Char;
    digits: array [0..7] of string;
    tick: cardinal;
    count: Integer;
begin
  c := 'x'; // zu sendendes Zeichen

  with TCom.Create(nil) do
  try
    // com öffnen
    if Open(COM,RTS_DISABLED,DTR_DISABLED) then
    begin
      // senden
      if Send(c) then //Zeichen senden
      begin
        tick := GetTickCount;
        count := 0;

        // 1 Sekunde bzw. auf 8 Bytes Daten warten
        repeat

          // Daten aus der Schnittstelle lesen, sofern vorhanden
          if GetChar(c) then
          begin
            digits[count] := c;
            count := count+1;
          end;

        until ((GetTickCount-Tick) > 1000) or (count >= 7);
        if count >= 7 then //Die erhaltenen Zeichen verarbeiten
        begin
          time1.Text := digits[0] + digits[1] + ',' + digits[2] + digits[3];
          time2.Text := digits[4] + digits[5] + ',' + digits[6] + digits[7];
        end;
      end;
    end;
  finally
    // com schließen
    Close;
    Free;
  end;
end;
Die Variable COM wird in den Einstellungen gesetzt.

Beim HT hab ich folgendes eingestellt: 9600Baud; keine Parität; 1Stopbit; Datenbits: 8; Keine Flussteuerung

Ich hoffe ihr findet meinen Denkfehler.

Klaus01 20. Okt 2009 15:32

Re: TSerial - RS232 ansprechen
 
Hallo,

was funktioniert denn nicht?
Bist Du schon einmal in der Routine einen Haltepunkt gesetzt
und bist mit F8 den Code schrittweise durchgegangen?

Grüße
Klaus

Lee500 20. Okt 2009 15:34

Re: TSerial - RS232 ansprechen
 
Es erzeugt ja keinen Fehler, deshalb bin ich ja auch total überfragt was grade los ist.

Klaus01 20. Okt 2009 15:38

Re: TSerial - RS232 ansprechen
 
Zitat:

Zitat von Lee500
Es erzeugt ja keinen Fehler, deshalb bin ich ja auch total überfragt was grade los ist.

Was soll den passieren, bzw. was passiert denn nicht?

Dann setze mal einen Haltepunkt und arbeite mit F8 den Code ab.
Dann wirst Du sehen, ob alles so läuft wie Du es Dir vorgestellt hast.

Grüße
Klaus

Lee500 20. Okt 2009 15:42

Re: TSerial - RS232 ansprechen
 
Wie gesagt, es sollte ein Zeichen gesendet werden. Dann soll die Antwort von 8 Zeichen empfangen werden. Ob das senden funktioniert kann ich nicht sagen weil ich nicht weiß wie ichs testen soll. Empfangen tut er jedenfalls nix.

Gruß Lee

OldGrumpy 20. Okt 2009 15:49

Re: TSerial - RS232 ansprechen
 
Zuerstmal musst Du eingrenzen wo das Problem überhaupt liegt. Welcher Microcontroller? Je nach Plattform gibts mehr oder weniger erschwingliche Hardwaredebugger dafür. Zweitens solltest Du beim Microcontroller erstmal ein paar simple Signalisierungsmöglichkeiten schaffen. Immer wieder gern genommen ist z.B. eine LED die angeht, wenn der Controller ein Zeichen empfangen hat. So kann man Schritt für Schritt einkreisen, was denn überhaupt das Problem ist. Hast Du z.B. daran gedacht RX und TX zu kreuzen? Senden auf der einen ist ja Empfangen auf der anderen Seite.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr.
Seite 3 von 5     123 45      

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