Forum: PC-Programmierung Serielle Schnittstelle


von Alf R. (bitbit)


Lesenswert?

Mein Ziel ist es ein oder mehrere LEDs direkt über die serielle 
Schnittstelle anzusprechen.Und einen Tastendruck an den PC zu 
übertragen.
Vergleichbar mit diesem Projekt:
http://www.hsg-kl.de/faecher/inf/msr/seriell/index.php
Wie realisiere ich das unter Linux in C?
Wie setzte ich die einzelnen Datenleitungen(RTS...)auf 1 bzw. 0
Gibt es dafür ein Konsolenprogramm?
Und wo finde ich überdieses Thema weitere Informationen?
Mfg bitbit

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Alf R. schrieb:

> Wie realisiere ich das unter Linux in C?
> Wie setzte ich die einzelnen Datenleitungen(RTS...)auf 1 bzw. 0
> Gibt es dafür ein Konsolenprogramm?
> Und wo finde ich überdieses Thema weitere Informationen?

http://www.mikrocontroller.net/articles/Ports_benutzen_(GCC)

Achtung: Die Forensoftware hat einen bekannten Bug und meint die 
verlinkte Seite sei nicht vorhanden. Aber die schliessende Klammer 
gehört mit zu Link! Also diese nach dem Aufruf in der Adresszeile des 
Browsers manuell nachtragen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan B. schrieb:
> Achtung: Die Forensoftware hat einen bekannten Bug und meint die
> verlinkte Seite sei nicht vorhanden.

Die Forensoftware meint das nicht, aber sie verstümmelt derartige Links.

Abhilfe ist das Ersetzen der schließenden Klammer durch ihren 
"quoted-printable-Code" %29.

http://www.mikrocontroller.net/articles/Ports_benutzen_(GCC%29

von bitbit (Gast)


Lesenswert?

Genau das habe ich gesucht.
Aber jetzt habe ich noch eine Frage zum Quellcode:
1
int i;
2
ioctl (port, TIOCMGET, &i);
Was ist mit TIOCMGET gemeint, welcher Wert landet durch die Funktion in 
der Variablen i?
1
if ( (i & TIOCM_CD) == TIOCM_CD) //??????????????
2
{
3
  // am Pin liegt Spannung an (3 bis 12V)
4
}
5
else
6
{
7
  // am Pin liegt keine Spannung an (0 bis -12V)
8
}
Auch dieser Codeabschnitt ist mir nicht ganz klar(TIOCM_CD?,
Bitvergleich mit i?)
Mfg bitbit

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> TIOCMGET ?

http://www.makelinux.net/ldd3/chp-18-sect-3.shtml
Code im µC.net Artikel ist möglicherweise nur für Kernel 2.4 und älter.

> if ( (i & TIOCM_CD) == TIOCM_CD) //??????????????
> Auch dieser Codeabschnitt ist mir nicht ganz klar(TIOCM_CD?,
> Bitvergleich mit i?)

Wenn Bit TIOCM_CD in i gesetzt ist, dann...
i wurde vorher gefüllt: ioctl (port, TIOCMGET, &i);
Bitmanipulation

von bitbit (Gast)


Lesenswert?

Dieser Code ist mir noch nicht ganz klar:
1
int i = 0;
2
if (...) i |= TIOCM_RTS; // Pin RTS wird aktiviert (12V)
3
if (...) i |= TIOCM_DTR; // Pin DTR wird aktiviert (12V)
4
ioctl (port, TIOCMBIS, &i);
Was ist TIOCMBIS?
Warum werden TIOCM_RTS und TIOCM_DTR nicht direkt angesprochen?
Gruss bitbit

von Klaus W. (mfgkw)


Lesenswert?

Es gibt zu dem ganzen ioctl-Zeugs auch diverse Doku...

von Stefan B. (stefan) Benutzerseite


Lesenswert?

bitbit schrieb:

> int i = 0;

Eine "leere" Variable anlegen. In dieser Variable werden wir unsere 
gewünschten Bits setzen.

> if (...) i |= TIOCM_RTS; // Pin RTS wird aktiviert (12V)
> if (...) i |= TIOCM_DTR; // Pin DTR wird aktiviert (12V)

Was wir hier durch hinzuODERn machen.

> ioctl (port, TIOCMBIS, &i);

Und die Adresse der Variablen geben wir an die Funktion ioctl() weiter.
Was die Funktion mit der Adresse machen soll, sagen wir im Parameter 
TIOCMBIS.

> Was ist TIOCMBIS?

Das "könnte" bedeuten: TTY IO Bits Setzen

> Warum werden TIOCM_RTS und TIOCM_DTR nicht direkt angesprochen?

Weil die Funktion ioctl hier die Schnittstelle zwischen Software und 
Hardware ist und die eben über Adresse einer Hilfsvariable (3. Argument) 
und Anweisung (2. Argument) arbeitet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.