Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Serielle Schnittstelle RS232 unter Linux Programmieren, benötige Hilfe

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Linux-Fan



Anmeldungsdatum: 05.09.2006
Beiträge: 12

BeitragVerfasst am: 05. Sep 2006 15:02   Titel: Serielle Schnittstelle RS232 unter Linux Programmieren, benötige Hilfe

Hallo,

ich möchte gerne die serielle Schnittstelle unter Linux nutzten.
Dazu habe ich auch ein gutes Tutorial gefunden was dies für DOS erklärt.
Hier mal der Link dazu: http://www.franksteinberg.de/progss.htm

Nun möchte ich das ganze aber unter Linux nutzten und nicht unter DOS.
Wie kann ich dies realisieren?

Hier ist der Programmcode in DOS: http://www.franksteinberg.de/SOURCE/COMBLINK.BAS

Code:

'-- comblink.bas ----------------------------------------------- >>fst'04<< -
' - gibt abwechsend High-Pegel auf TxD und DTR/RTS von COM1 aus
' - an die entsprechenden Pins angeschlossene LEDs blinken abwechselnd
' - Anschlussschema:             (  Pinbelegung  Sub-D Stecker  )
'   * Widerstand 1 kOhm an Masse (9-Pol = Pin 5, 25-Pol = Pin  7)
'   * langes Bein LED1 an TxD    (9-Pol = Pin 3, 25-Pol = Pin  2)
'   * langes Bein LED2 an DTR    (9-Pol = Pin 4, 25-Pol = Pin 20)
'   * langes Bein LED3 an RTS    (9-Pol = Pin 7, 25-Pol = Pin  4)
'   * alle kurzen Beine an den Widerstand
' - funktioniert alternativ auch mit den Modem-LEDs (soweit vorhanden)
'-- V 20040111 ------------------------------- http://www.FrankSteinberg.de -
      
CLS
LOCATE 4, 1
PRINT " LED-Wechselblinker fuer COM1       >> BENUTZUNG AUF EIGENE GEFAHR <<"
PRINT " Unter DOS oder im DOS-Modus ausfuehren!"
LOCATE 12, 1
PRINT " Datenformat-Register  Bit 6 (break TxD) = "
PRINT " Modem-Steuer-Register Bit 0 (DTR)       = "
PRINT " Modem-Steuer-Register Bit 1 (RTS)       = "

BAdr% = &H3F8        'Basisadresse COM1; COM2 = &H2F8
DFR% = BAdr% + 3     'Adresse des Datenformat-Registers  (Offset 3)
MSR% = BAdr% + 4     'Adresse des Modem-Steuer-Registers (Offset 4)


'Bit3 (MasterInterrupt) setzen; alle anderen Bits loeschen
'(erm”glicht Zugang zum COM-Port unter Win95/98):
OUT MSR%, 8

DO WHILE INKEY$ = ""
 OUT (DFR%), INP(DFR%) OR 64    'Bit 6 (Wert 64) setzen     = TxD
 OUT (MSR%), INP(MSR%) AND 252  'Bit 0+1 (Wert 1+2) l”schen = DTR+RTS
 LOCATE 12, 45: PRINT "1"
 LOCATE 13, 45: PRINT "0"
 LOCATE 14, 45: PRINT "0"
 SLEEP 1
 OUT (DFR%), INP(DFR%) AND 191  'Bit 6 (Wert 64) l”schen    = TxD
 OUT (MSR%), INP(MSR%) OR 3     'Bit 0+1 (Wert 1+2) setzen  = DTR+RTS
 LOCATE 12, 45: PRINT "0"
 LOCATE 13, 45: PRINT "1"
 LOCATE 14, 45: PRINT "1"
 SLEEP 1
LOOP


Diesen möchte ich nun unter Linux nutzten.
Wie bekomme ich daraus ein unter Linux lauffähige Kommandozeilenprogramm?

Danke für die Hilfe

Linux-Fan
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 05. Sep 2006 19:02   Titel:

Wenn du DTR etc. von Hand kontrollieren willst, musst du dazu einfach die passenden ioctl()-Aufrufe verwenden. Guck mal hier:

http://www.lafn.org/~dave/linux/Serial-Programming-HOWTO.txt

Sektion 7 beschreibt, was du suchst.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Linux-Fan



Anmeldungsdatum: 05.09.2006
Beiträge: 12

BeitragVerfasst am: 11. Sep 2006 16:37   Titel:

Hallo Janka,
Janka hat folgendes geschrieben::
Wenn du DTR etc. von Hand kontrollieren willst, musst du dazu einfach die passenden ioctl()-Aufrufe verwenden. Guck mal hier:
http://www.lafn.org/~dave/linux/Serial-Programming-HOWTO.txt
Sektion 7 beschreibt, was du suchst.

Danke für den Link.

Leider komme ich damit noch nicht wirklich weiter.

Ich suche noch ein paar Muster oder HowTo zu dem Thema.

Danke Linux-Fan.
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 11. Sep 2006 18:24   Titel:

So ähnlich sollte das aussehen:
Code:

#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int main (int argc, char* argv[])
{
  int fd,i;
 
  /* 1. seriellen Port öffnen */
  fd=open("/dev/ttyS0",O_RDWR);

  /* 10 mal */
  for (i=0;i<10;i++)
  {
    /* DTR an, schlafen */
    ioctl(fd, TIOCMBIS, TIOCM_DTR)
    sleep(1);

    /* DTR aus, schlafen */
    ioctl(fd, TIOCMBIC, TIOCM_DTR)
    sleep(1);
  }

  /* Port schließen, Ende */
  close(fd);
  return 0;
}

_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Linux-Fan



Anmeldungsdatum: 05.09.2006
Beiträge: 12

BeitragVerfasst am: 11. Sep 2006 19:29   Titel:

Hallo,

danke für die Hilfe!

Wenn ich das im www richit gelsesn habe ist es so das verschieden PC´s die RS232 Schnittstelle beim booten testen oder Stnadartmässig auf HIGH setzten, ist dem Korrekt so? Wenn ja lässt sich soetwas abfangen, so das nur HIGH gesetzt wird durch das kleine eigene Programm?

Danke Linux-Fan.
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 16. Sep 2006 23:40   Titel:

Der Ruhepegel von RS232 ist +12V. Das nennt man dann "Space". Wenn man ein "Mark" macht, sind das dann -12V.
Die Spannung auf 0 zu setzen ist nicht vorgesehen.
Wenn du LEDs anschließt, drehe einfach deren Polung, um sie bei -12V leuchten zu lassen.

Nochwas: jeder LED sollten eine Dioden 1N4148 *anti*parallel geschaltet werden, da LEDs nur eine Sperrspannung von ca. 5V haben und deshalb bei der jeweils falschen Polung des RS232-Signals (==aus) kaputt gehen können.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Linux-Fan



Anmeldungsdatum: 05.09.2006
Beiträge: 12

BeitragVerfasst am: 17. Sep 2006 12:56   Titel:

Hallo Janka,

das bedeutet das ich um ein Relay damit zu steuern noch eine Diode dazwischen schalten muß?

Muß bei der LED auch eine zusätzliche Diode eingebaut werden wenn ein entsprechender Vorwiederstand verwedet wird?

Ich habe es hiermit ausgerechent: LED-Vorwiderstandsrechner
http://www.elektronik-kompendium.de/sites/bau/1109111.htm

MfG
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy